HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2025
0228
アキアキノヒロロ「HSP3dish helper」による、メディアファイル使用の[hsp]の変換について23解決


アキアキノヒロロ

リンク

2025/2/28(Fri) 01:50:51|NO.103147

hsp3dish.js のガイドの、「6.メディアファイルの再生」に

・wav,mp3形式の再生に対応しています(mmload,mmplay命令)
・ogg形式は一部のブラウザのみ対応しています(mmload,mmplay命令)
・Chrome及び、Firefox上での動作を確認しています
・IE11上では動作しません(エラーにはなりません)

とあり、試してみましたが、エラーがでました。
テストしたスクリプトはごく単純な次のものです。

#include "hsp3dish.as" #pack "se_block2.wav" //音のデータを登録 mm = "data/se_block2.wav" mmload mm,0 title "音のデータ" + mm *main stick key if key&256 : mmplay 0 // マウス左ボタンで再生 redraw 0 color 0,0,128 : boxf color 255,255,0 pos 10,10 : mes "" + mm redraw 1 await 1000/60 goto *main
このように、wavファイル一つだけですので、dataフォルダに[se_block2.wav]を置いているだけです。
(仮に、hsptv にある wav ですが、何でもいいです)
変換時に出る「console」には、その[wav]ファイルをパックした旨が表示されたのですが、
結局、アップしても、
#Error 12 --> File I/O error
となってしまいました。

メディアファイルの入った、サンプルの「tamane_jump.hsp」は成功し、Edge上でも、Chrome上でも、メディアファイルは再生されていますが、
上のテストしたスクリプトのものでは、どちらでもエラーになって再生されません。

どこに問題があるのか、判断がつきません。



この記事に返信する


じゅんちゃんおじ

リンク

2025/2/28(Fri) 08:30:39|NO.103150

ぱっと見て、とりあえず動くように直すには

mm = "data/se_block2.wav"



mm = "se_block2.wav"

に修正して、
#pack "se_block2.wav" をやめて、
HSP3Dish Helper を使う直前に
自分で手作業で data フォルダ新規作成して、
そのなかに必要な素材ファイル(se_block2.wav など)をいれた状態にして、
変換を実行すると、大丈夫な気がします。(とりあえずの回避策)

HSP3Dish Helper 側の問題なのか、
ファイル名を文字列型変数に代入するときの相対パスのディレクトリ表現(スラッシュ)
に不都合があるのか判りませんが。(HSP特有の \\ 仕様の話)


付記: こういう書き込みは開発側にとってとても有用な情報だと思います。

だれかが実際につかってみて、それについて意見がでないとわからないことが多いから。

・説明書がまちがっていたりわかりにくい場合(書き手の責任)
・説明書の理解や使い方がまちがっている場合(ユーザーの責任)
・ツールの実装側の問題(ツール開発者の責任)



アキアキノヒロロ

リンク

2025/2/28(Fri) 16:03:16|NO.103151

まずは、4つの読込み方でテストしました。

> #pack のところに [data/] を付け加えるか、加えないか
> mmload の p1 に [data/] を付け加えるか、加えないか

この2x2の4つの組合せのうち、成功したのは
> mmload の p1 に [data/] を付け加えない
というもので、#pack はどちらでも構わないというか、
コメントアウトしても、成功しました。


では、「hsptv」にはない一般の、wavファイルはどうかというと、
dataフォルダに入れないといけないので、
> mmload の p1 に [data/] を付け加える
として指定しなければ、hspファイル自体がアウトになってしまいます。
では、
> #pack のところに [data/] を付け加えるか、加えないか
これはどちらもエラーになります。
もしかしてと、hspファイル自体がアウトになっても構わず、
> mmload の p1 に [data/] を付け加えない
でやってみました。この場合、
> #pack のところに [data/] を付け加えるか、加えないか、
にも関係なく成功で、またコメントアウトしても、成功しました。

ということは、以上をまとめると、

「#pack」の指定は、実行ファイル作成時のパックするファイル指定であって、
「HSP3dish helper」での変換では、無視してよく、
mmload の p1 には、hspファイル自体の実行も関係なく、ファイル名のみの指定でいい

というようになります。

何故、ここまで迷ってしまったのかというと、
ほとんどの場合、「HSP3dish helper」での変換だけなら、出来てしまうことです。
しかし、上手くいったと思うと、サイトにアップし、繋いでみると、エラーということが
多いのです。
かつ、まずは エラーにならない hspファイル自体が出来て初めて、そのhspファイルを
変換に使えると思ってしまうからです。



アキアキノヒロロ

リンク

2025/2/28(Fri) 17:41:55|NO.103152

補足です。

上のテストは、[wav]ファイルでしたが、[mp3]ファイルも同様です。

メディアファイルだけでなく、[hsp] が読み込むファイルは画像ファイルでも、
何にしろ、[data]フォルダに入れたものは、[hsp] での記述(スクリプト)では、
「data/〜〜」とすることなく、直にファイル名だけの指定でよく、
それだけで、変換の内部で「data/〜〜」として読み取っているようです。
ただし、[hgimg4] の場合、モデルデータ等は、[res]フォルダに入れなければいけないので、
「res/〜〜」とする必要がある、ということのようです。

ちなみに、[res]フォルダに入れる必要がないものでも、[data]フォルダではなく、
[res]フォルダに入れて、「res/〜〜」と記述して、読み込むことも可能で、
Webアプリもエラーになりません。



アキアキノヒロロ

リンク

2025/2/28(Fri) 17:44:14|NO.103153

一応、解決と致しますが、
この件に関して、他にも分かることがあれば、お寄せ下さい。



Drakuji

リンク

2025/2/28(Fri) 18:42:53|NO.103156

私もこの問題に直面してました。
実行スクリプトのファイル階層から見て、
"data/"フォルダに入れてくださいと指示があるので、
mmloadなどのファイルパスを指定する際に"data/リソースファイル名.拡張子"としてました。

・・・すると、おっしゃられる通りFile I/O Errorが出まして、
色々と検証すると、ファイルパスの指定に"data/"を取り除くことで解決しました。

Windowsで開発、デバッグ実行して、早速DishHelperで変換してアップロードして完了・・・
というスタンスで開発したい場合は、都度ファイルパスを変えるのが面倒なので、
個人的な対処方法ですが、

#include "hsp3dish.as" /*//////////////////////////////////////////////////////////////////// Windowsで開発実行またはWebGLで開発実行かをプログラムの最初のほうに定義する --------------------------------------------------------------------*/ #if 0 //Windowsで開発・デバッグするときは0にする #const global APP_PFOS (PLATFORM_WEBGL) //WebGLで実行 #else #const global APP_PFOS (PLATFORM_WINDOWS) //Windowsで実行 #endif /*//////////////////////////////////////////////////////////////////// ファイルパスに"data/"をつけるつけないの定義 --------------------------------------------------------------------*/ #if APP_PFOS == PLATFORM_WEBGL #define global DATADIR "" //WebGL実行時のデータディレクトリ #endif #if APP_PFOS == PLATFORM_WINDOWS #define global DATADIR "data/" //Windows実行時のデータディレクトリ #endif /*//////////////////////////////////////////////////////////////////// 実際リソースファイルをロードする命令の場面でファイルパスの指定方法は・・・ --------------------------------------------------------------------*/ mmload DATADIR + "リソース不アイル名.拡張子",0,1 celload DATADIR + "リソース不アイル名.拡張子",2,0
こんな感じで書いてみてます。
もしくは、自動判別する場合は、以下と上記のファイルパスの指定方法でいけるのではないかと思います。

#include "hsp3dish.as" /*//////////////////////////////////////////////////////////////////// Windowsで開発実行またはWebGLで開発実行かをプログラムの最初のほうに定義する ファイルパスに"data/"をつけるつけないの定義 (未検証です・・・が参考まで) --------------------------------------------------------------------*/ getreq APP_PFOS,SYSREQ_PLATFORM //実行環境の判別値をAPP_PFOSに代入される switch APP_PFOS case PLATFORM_WEBGL DATADIR = "" swbreak case PLATFOWM_WINDOWS case PLATFORM_LINUX DATADIR = "data/" swbreak swend
仮にNO.103147のスクリプトに自動判別の方法で適用してみると、

#include "hsp3dish.as" //実行環境を判断してデータフォルダのファイルパスを自動的に適用する getreq APP_PFOS,SYSREQ_PLATFORM //実行環境の判別値をAPP_PFOSに代入される switch APP_PFOS case PLATFOWM_WINDOWS case PLATFORM_LINUX DATADIR = "data/" swbreak case PLATFORM_WEBGL DATADIR = "" swbreak swend //音のデータを登録 mm = DATADIR + "se_block2.wav" mmload mm,0 title "音のデータ" + mm *main stick key if key&256 : mmplay 0 // マウス左ボタンで再生 redraw 0 color 0,0,128 : boxf color 255,255,0 pos 10,10 : mes "" + mm redraw 1 await 1000/60 goto *main
という感じでしょうか。



アキアキノヒロロ

リンク

2025/2/28(Fri) 19:00:39|NO.103157

Drakujiさん、ありがとうございます。

やはり、躓くところなんですね。
ガイドをいくら読み返しても、分からず、とにかく試行錯誤のテストでした。

Drakujiさんの方法、参考にさせてもらいます。
プログラムが大きくなってくると、こういう方法も考えないといけないかもですね。



zakki

リンク

2025/2/28(Fri) 19:09:00|NO.103158

ローカルで動くウェブサーバー使うと確認は楽になります。
私はコマンドプロンプトでソースやhtmlを置いているディレクトリにcdして python -m http.server で確認することが多いです。

nginxやApacheや何かのWindows用のフリーソフト入れても良いかもしれません。
https://qiita.com/massie_g/items/2913066e596dae197539#windows-%E3%82%A2%E3%83%97%E3%83%AA%E7%B7%A8



zakki

リンク

2025/2/28(Fri) 21:27:23|NO.103159

ここから、 https://dev.onionsoft.net/trac/openhsp/browser/trunk/package/win32/hspsdk/hsp3dh?order=name
hsp3dh.hsp と mod_appconfig.as をダウンロードして、

hsp3dh.hspを2行変更すると、js内でもdataディレクトリ下にデータが配置されるようになるので、
resディレクトリのような挙動になります。

挙動が他の人と変わるので自分で何をやってるか把握したうえでやる必要あって特にお勧めってわけでもありませんが。


notesel s2 repeat notemax noteget ff,cnt tmp+=js_pack+"/"+ff+"\n" ; この行を変更 loop 〜 s1="" if js_gpmode { s1="Module['FS_createPath']('/', 'res', true, true);\nModule['FS_createPath']('/res', 'shaders', true, true);\n" } s1="Module['FS_createPath']('/', '"+js_pack+"', true, true);\n" ; この行を追加 strrep outbuf, "$$$mkdirrequest$$$", s1




ze-na

リンク

2025/2/28(Fri) 21:51:20|NO.103160

>アキアキノヒロロ さん

dataフォルダはパッケージ.dataファイルを作る準備となりますので、
実行時に利用するdataフォルダという意味ではないです。
ですので.htmlにてdataフォルダ構造は作成されません。

混乱しやすいのでスクリプト処理内にdataフォルダを利用するのはおすすめできません。
Webプログラムを始めたばかりなら2重管理となりますが
dataフォルダはパッケージ用と割り切るのが良いと思います。

hsp3dish.js (WebGL/html5版)プログラミングガイドの
「3.HSP3Dish Helperによる変換」の「データフォルダ」の項目を読んで頂くと分かりますが
https://www.onionsoft.net/hsp/v37/doclib/hsp3dish_js.htm

dataフォルダについて注意書きなどは記載されていないので
以下の記述内容などから理解するしか無いと思います。。

・データフォルダは「準備するためのもの」で実行時に利用するフォルダとすると
スクリプトにプラットフォーム分岐処理が必要となります。

>データフォルダは、picload命令やbload命令など、スクリプト中で読み込まれるファイル(画像データ、サウンドデータなども含む)を準備するためのものです。

・「ソーススクリプト」はあくまでもDish Helper画面の入力ボックスのことです。
スクリプトの処理内でフォルダ指定するようにも見えたりしますが。。

>「ソーススクリプト」で指定したフォルダ以下の「data」フォルダをデータフォルダとして認識します。
>スクリプトから読み込まれるファイルは、データフォルダにまとめて格納しておいてください。

・「サブフォルダは含まれません」とあるようにdataフォルダに
dataフォルダなどを作ってファイルを置いても.dataパッケージには
含まれずフォルダ構造もパッケージされません(変換時に無視されるようです)

ただし、オプションのHGIMG4についてはdataフォルダ以外の
resフォルダなどで別対応しています(「HGIMG4を使用する」の項目参照)

>また、指定されたデータフォルダのみが検索対象となり、サブフォルダは含まれません。データファイルが必要なし場合は、空欄にしておいて構いません。

-----
2重管理が気になるなどdataフォルダをhsp3dish.js変換以外に
WinDishの実行環境と共有させるには

#if、#else、#endifなどを利用する手動分岐か、
getreq var,SYSREQ_PLATFORMやsysinfo(0)を利用した
プラットフォームで条件分岐する方法があります。

SYSREQ_PLATFORMを使う方法(Drakujiさんの方法と同じ)

getreq pf, SYSREQ_PLATFORM if pf=PLATFORM_WEBGL : mm_dir="" if pf=PLATFORM_WINDOWS : mm_dir="data/" mm = mm_dir+"se_block2.wav"

sysinfo(0)を使う方法(過去の記事による引用)

info_os = sysinfo(0) if instr(info_os,0,"Emscripten")>=0 : mm_dir="" if instr(info_os,0,"Windows")>=0 : mm_dir="data/" mm = mm_dir+"se_block2.wav"

またzakkiさんがdataフォルダ構造を維持する改良方法を記載していますので
少し強引ですが、共通化するならhsp3dhそのものを改造しても良いと思います。



アキアキノヒロロ

リンク

2025/3/1(Sat) 00:32:51|NO.103162

zakkiさん、ze-naさん、ありがとうございます。

> ze-naさん
> dataフォルダはパッケージ.dataファイルを作る準備となりますので、
> 実行時に利用するdataフォルダという意味ではないです。
> ですので.htmlにてdataフォルダ構造は作成されません。

そうですね。私もそのように理解はしています。
変換で出来た3つのファイルをサイトにアップするのであって、
フォルダがサイトに出来る訳ではないですよね。

私の舌足らずの言葉で言えば、繰り返しになって恐縮ですが、

[hsp]スクリプトを実行するには、フォルダ構造通りの指定で実行されるので、
スクリプトの記述は、フォルダ構造通りに「data/〜〜」「res/〜〜」としなければならないが、
変換時は、その[hsp]スクリプトは実行のためのものではなく、
あくまでも、変換して、[data] [html] [hsp3dish.js] をつくるためのもの。

dataフォルダにセットした必要ファイルたちを、
一つのファイルにしてしまったものが、dataファイル。
だから、その記述の中で特定のものを指し示すのに、
「data/〜〜」とすることはおかしい。
ただ、[hgimg4] の場合、モデルデータ等は、[res]フォルダに入れなければいけないので、
上記のものと区別して、「res/〜〜」とするが、[res]フォルダが作られる訳ではなく、
あくまでも、記述に際して区別して記述されて、一つのdataファイルにしている。

だから、変換に際して、「data/〜〜」としておくことは、間違いになるが、
[hgimg4] では、「res/〜〜」となっていなければならない。

初心者然とした私は、こんなまどろっこしい言葉で
どうにか分かったつもりになっています。

みなさん、ありがとうございました。



MIZUSHIKI

リンク

2025/3/1(Sat) 02:37:53|NO.103166

> じゅんちゃんおじ さん

> 付記: こういう書き込みは開発側にとってとても有用な情報だと思います。
> だれかが実際につかってみて、それについて意見がでないとわからないことが多いから。

これは正にそうで、

> アキアキノヒロロ さん

> まずは エラーにならない hspファイル自体が出来て初めて、そのhspファイルを
> 変換に使えると思ってしまうからです。

> Drakuji さん

> 私もこの問題に直面してました。
> 色々と検証すると、ファイルパスの指定に"data/"を取り除くことで解決しました。

私も実は一番最初は「dataフォルダに入れたりしてファイルを重複させないといけないのか(?)」ということには困惑しながらもマニュアルを見て理解し、対応したことを思い出しました。
(Drakujiさん、ze-naさんの方法でファイル重複させなくても良くなりますね。)

でも事情が分かってしまうと「HSP3Dish helper は、ただのツールでしかないからdataフォルダなりに入れてもらうとかしないとパックしたいファイルかどうかなんて判別できないよなぁ。」と苦肉の策(?)であろうことも何となく察して、その後はそういうものだと疑問をあまり思わなかったんですが、、、

やっぱりみんな最初はそこに躓いて、なんなら初心者はそこで「自分には出来ない関係ないもの」として諦めてしまうことも考えられ、HSP3Dish.jsの敷居が高く感じる原因の1つになっているのではないかと思います。


では、どうすれば? ということになると思いますが、、、

通常HSP3のファイルのパックと同じような方法を取れるように、もう #pack,#packdir を強制してしまって、dataフォルダにファイルを分けないといけないなんてことはやめてしまうべきなのではないでしょうか。

HSP3Dish helperには、"何とかして" #pack,#packdir等 を読み込んでもらい(^ ^;; 、ファイルをパックしてもらう。 というのは難しいのでしょうか。
(やはり#include先の#packがネックだったりするのでしょうか?)


あとは、HGIMG4のためのresフォルダは今まで通りで良いのかどうかという問題もあったりしますか。
(#pack指定しないけど違和感は無いか、resの中身全部パックされても良いか、とか)


みなさまの意見も聞いてみたいです。



アキアキノヒロロ

リンク

2025/3/1(Sat) 05:40:20|NO.103167

サイトではエラーになる場合でも、その「変換だけなら、出来てしまう」のはなぜなのか。
この場合、変換に失敗するようになるのが本当のあり方じゃないのか。

「HSP3dish helper」で変換ボタンが押された際、[data/〜〜]等があった場合、
それを検知して、注意を促すダイアログを出して、変換を止めるようにできないのか。

実際、サイトではエラーになるような変換の場合でも、その際の「console」には
> #No error detected.
> データフォルダ追加 [data]
> file [se_block2.wav] packed.
などと記されます。hspファイル(スクリプト)に[data/〜〜]とあろうがなかろうが、
この表示は全く変わらず示されます。
「file [se_block2.wav] packed.」と表示されるのであって、
「file [data/se_block2.wav] packed.」と表示されることはない。
これでは、エラーにならず、サイトで成功する、と思ってしまう。
「データフォルダ追加 [data]」となっているので、まるでサイトでは[data]フォルダが
作られるかのごとく、誤解されやすい表示もある。

このあたりを改良して頂くと、躓きの原因にも気づきやすく、納得がいくのではないでしょうか。



Drakuji

リンク

2025/3/1(Sat) 15:26:29|NO.103168

サンプルプログラム等では、素材を使うもの使わないものいろいろありますが、
それぞれのプラットフォームで動作確認するデモがあります。
「あぁ同じプログラムが別のプラットフォームでも動いてる、すごい!」と思いました。

WindowsもLinuxも、デモやサンプルスクリプトは、
エディタからF5で実行して実際にローカルにあるディレクトリ構成から動いているので、
サンプルがそのまま手本にできます。

WebGLに関してはサンプルプログラムの動いている様だけは確認できても、
現時点で思い浮かぶのは
1「F5で実行しているわけではなくブラウザ上で動かす認識」
2「ブラウザで開けばいいのだとローカルディレクトリから直接開いてしまう」
3「WebGL向けにビルド(変換)するサンプルプログラムのプロジェクトディレクトリの構成例がなく
サンプルプロジェクトからの逆調べができない」
4「WebGLのサンプルプロジェクトがまだまだ少ない」
5「代表的サンプルのブロック崩しはリソースファイルを使っていない」
の壁を取り払えるアプローチがあればいいなと思います。

中でも2に関しては初心には大きな壁でしたが、MIZUSHIKI様のezlocal-dish-jsモジュールが
素晴らしく良いフォローをしていますので、あともう一歩惜しいところまで来てると思います。
WebGL版はAndroidやiOSアプリ変換よりシンプルですし、
公開方法も難しい手続きをいろいろ関与してくることもありませんので、
初心者が少し手を伸ばせば作ったプログラムを手軽に多くの方にPRできると思うので、
WebGL版HSPプロジェクトの魅力は積極的に応援していきたいです。



Drakuji

リンク

2025/3/1(Sat) 15:47:31|NO.103169

ちょっとDishHelperの要望・・・

DishHelperからhtmlファイルをジェネレートしているのであれば、
この説明中にある
・表示サイズのスケーリング値の指定とオートスケールオプションの指定
・画面下部のデバッグコンソールの表示有無
htmlファイルの中身の細かいオプションや値の変種が、
DishHelperツールから設定できるといいですね。

※#packopt xsizeやysize、hsp3dish.iniのwx,wy指定のサポート等は
"hsp3dish"キーワードで調べられるとおそらく混乱する情報になってきていると思うので、
WebGL版では改めて定義をリファレンスに明記するなど・・・



Drakuji

リンク

2025/3/1(Sat) 17:22:35|NO.103171

HSP3Dishのサンプルにある「珠音のジャンプアップ♪」を
WebGL版のプロジェクトフォルダにしてみたものを作ってみました。
リソースファイルの名前の変更とファイルパスの指定方法をこのトピックの方法に準ずる形で
改変したものになります。
●WebGL変換に対応した「珠音のジャンプアップ♪」のプロジェクトフォルダ
https://drakuji.main.jp/_test/caos_cms/images/bin/tamane_jump/tamane_jump_webgl.zip

●ブラウザ実行確認
https://drakuji.main.jp/_test/caos_cms/images/bin/tamane_jump/tamane_jump.html

「珠音のジャンプアップ♪」のスクリプトを改変するにあたり、
リソースファイルを読み込む命令でファイルパスが省略されており、
どこからファイルを読み込んでいるんだろうという迷いました。
(調べる行為自体をするのが勘と経験と傾向から察する力も時折必要で)

他のサンプルゲームのスクリプトでは、
dir_tvというhsptvフォルダのディレクトリを取得する命令が使われており、
そのディレクトリにある素材から取得しているという逆引きができましたが、
今回のスクリプトにはdir_tvがなく、代わりに#packが出てきており、
#packから得られる情報には具体的なパスが示されなかったために
暗黙的にファイルパスが通ってしまっていると初心者でなくとも
スクリプトを見るだけでは分からないですね。
※dialogでもlogmesでもいいのでファイルパスを出力して調べようとする手が
このスクリプトからは手段がとれなかったです・・・



アキアキノヒロロ

リンク

2025/3/2(Sun) 02:24:38|NO.103181

あゝ、またおかしいです。
下のこれ、[wav] [mp3] 両方とも、鳴らせることが出来ています。
「改変タマネちゃんボックス=5」
https://3dishjsaa.yu-yake.com/hgimg4_test_ac.html

なのに、ここのテストで『サウンド』成功を確認した簡単なものが、また
#Error 12 --> File I/O error
となって、ダメです。
最初に載せたスクリプトで、「hsptv」にはない一般の、wavファイルをテストしたものです。
前回の
#include "hsp3dish.as"
#pack "se_block2.wav" //音のデータを登録 mm = "data/se_block2.wav" mmload mm,0
この部分を別な"〜〜.wav"ファイルに置き換えて、前回成功した、その方法手順通りに
#include "hsp3dish.as"
//#pack "〜〜.wav" //音のデータを登録 mm = "〜〜.wav" mmload mm,0
として、変換したのに、
#Error 12 --> File I/O error
となってしまいました。

気になって、パソコンを再起動させたり、スーパーリロードしてみても、
やはり、ダメでした。

成功した時の手順通りに、一つ一つ確認しながらやっています。
何度、正確に慎重にテストし直しても、ダメでした。
#Error 12 --> File I/O error
となります。

この時点で、同じサイトにある成功している
「改変タマネちゃんボックス=5」 の方は、ちゃんと鳴るんですけど。

ここで、更に次のことを試してみました。
すなわち、「hsptv」にある"se_block2.wav"で変換を試したのです。
すると何故か、成功です。
ならばと、その後すぐに再び"〜〜.wav"で変換を試してみました。
あら、不思議、こちらも成功してしまいました。

もう訳が分からないです。



アキアキノヒロロ

リンク

2025/3/2(Sun) 08:00:18|NO.103183

追記です。

[mp3]もWebアプリに出来て鳴らせますが、
無限ループでの再生は設定しても、一度だけで終わってしまいます。



Drakuji

リンク

2025/3/2(Sun) 16:39:54|NO.103185

>アキアキノヒロロ 様
もしかすると、たまたまうまくいかなかったときは、
変換したファイルが偶然失敗していたか、
正しくアップロードできていなかったのかもしれないですね。
HTMLファイルの中身を見ると、".data"ファイルに集約されたリソースファイルを
ロードしている連続した「new DataRequest」という記述があり、
そこにはstart,endという.dataファイルからファイルを読み出すデリケートな値が
生成されていることから、
少しでもhtmlファイルの内容とdataフォルダ内の内容に差異があると、
File I/O Errorになるのではないかと思います。



アキアキノヒロロ

リンク

2025/3/2(Sun) 22:41:46|NO.103187

素人感覚で言うと、どうしても、「hsptv」にあるものとないものでは、
どこか違う感じがしてしまいます。
「HSP3dish helper」は「hsptv」にあるもので開発がすすめられたのではないか、
とも思ってしまいます。そのため、「hsptv」のものは成功しやすく、
そしてこの時点で成功した回路(?)が確立され、その後テストしたものは、
その回路を使うことで、成功するんじゃないか、などと妄想してしまいます。

私も、[html]ファイルを開いてみて、「new DataRequest」の箇所を見つけていて、
ここら辺が怪しいと思いました。
[hsp] で、[data/] を付けない形(Webアプリ=成功)の場合
> new DataRequest(0, 264, 0, 0).open('GET', 'bgm.ax');
> new DataRequest(264, 1669194, 0, 0).open('GET', 'bgm01.mp3');

> DataRequest.prototype.requests["bgm.ax"].onload();
> DataRequest.prototype.requests["bgm01.mp3"].onload();

[hsp] で、[data/] を付けた形(Webアプリ=エラー)の場合
> new DataRequest(0, 269, 0, 0).open('GET', 'bgm.ax');
> new DataRequest(269, 1669199, 0, 0).open('GET', 'bgm01.mp3');

> DataRequest.prototype.requests["bgm.ax"].onload();
> DataRequest.prototype.requests["bgm01.mp3"].onload();

[始まり]、[終わり]、の位置は違うが、[始まり〜終わり]、の大きさは同じなので、
どちらも同じ[mp3]ファイルであろうと思われます。
ただ、同じものであるにも関わらず、[data]ファイル内のその位置が違い、
[data/] を付けた方は、[始まり]が[5]後ろに行っているのは、
[data/] 文字の分増えたからでしょう。
ということは、[data/] を付けた方は、

> new DataRequest(269, 1669199, 0, 0).open('GET', 'bgm01.mp3');

ではなくて、本当は、

> new DataRequest(269, 1669199, 0, 0).open('GET', 'data/bgm01.mp3');

となるべきはずです。
なのに、'bgm01.mp3'として、そのデータを参照しよううとするため、
読み込めずにエラーになるのではないか。

こんなふうに考えました。

これは、変換時に出る「console」で、
hspファイル(スクリプト)に[data/〜〜]とあろうがなかろうが、
変わらず、[〜〜.wav] とか、[〜〜.mp3] とファイル名だけの表示で、
全く変わらず示されることからも、おかしい食い違いになっているように思います。



アキアキノヒロロ

リンク

2025/3/2(Sun) 22:58:21|NO.103188

追記

[data] ファイルを開いて、見ることができればいいですが。
方法を知りません。



Drakuji

リンク

2025/3/3(Mon) 00:27:41|NO.103189

アキアキノヒロロ様
いろいろ調査されていて素晴らしいです!!

なんとなく整理してみると、
DishHelper側での変換の仕組みとして
・HGIMG4を使う場合、"res"フォルダおよびその中に"shader"フォルダを作成し、モデルデータを入れる。
※HGIMG4を使用したことがないので実際のロードの仕方は存じませんが
・それと同じ要領でモデルデータ以外のリソースファイルは"data"フォルダを作成しそこに入れる。
・各種データやファイルの読込時のスクリプトに記述するファイルパスは共通ルールの相対パスで記述したい。
という感じでしょうか。

".data"ファイルの中身を見るのは単純ではなさそうですが、HTMLのnew DataRequestから見ると、
dataフォルダに入れられたファイル一式を1つのバイナリデータとして連結させたものと想像してます。
.dataファイルのバイナリ(バッファ)開始バイト数から終わりバイト数までのデータを
ファイル名.拡張子というファイルとして取り出すというような関数処理が、
new DataRequest(269, 1669199, 0, 0).open('GET', 'bgm01.mp3'); という形で
記述されているのかなと仮説します。

>[data/] を付けた方は、[始まり]が[5]後ろに行っているのは、[data/] 文字の分増えたからでしょう。
"data/"の文字列がつくつかないで「5」値の差が出るというのは
まさしく"data/"の文字列の差だと考えられそうですね。

これに関しての詳しい仕様はこの仕組みを作られたり決められた方以外が携わるのに
どこまで掘り下げていいものかわかりませんが、仕様と仕組みの理解と不都合調査のためで、
WebGL以外にAndroidやiOSの変換もDishHelperが共通して担っているので、
その互換性も併せて考える部分かもしれません。



アキアキノヒロロ

リンク

2025/3/3(Mon) 13:28:35|NO.103193

一応、成功している、[wav] [mp3] 付きWebアプリがあるので、その動画をXに載せました。
スマホでも大丈夫でした。

Xの動画ページ
https://x.com/akiakinohiroro/status/1896408116033675512

Webアプリのページ
https://3dishjsaa.yu-yake.com/index_2.html
ここの「改変タマネちゃんボックス=5」です。

みなさんの環境でも、上手く開くかどうか、試して頂けると、嬉しいです。



アキアキノヒロロ

リンク

2025/3/6(Thu) 08:00:00|NO.103222

解決としていますが、以前にも書いたことですが、気になったこととして、追記いたします。

[data]フォルダに入れるべき必要ファイルを [res]フォルダに入れ、
[hsp]スクリプトでは、[res/〜〜]と記述して取り込む。
メディアファイル以外のどの種類のファイルでもです。
こうすれば、[hsp]スクリプト自体の実行もでき、
かつ、そのままの[hsp]スクリプトでも、「HSP3dish helper」で変換できてしまいます。
もちろん、[#include "hgimg4.as"]の[hsp3dish-gp.js]の場合ですが。

ならばと、考えてしまうのです。
[res]フォルダで出来てしまうこのことと同様にして、
[data]フォルダでも、[data/〜〜]と記述しても、そのまま変換でき、
Webアプリでもエラーにならずに、成功するようにできるのではないのか。
できそうな気がするのですが、素人考えでしかないのでしょうか。
こうなるのが、自然な感覚だとも思いますし、躓くこともなくなるはずです。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.103147への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2023(c) All rights reserved.