音声を高速に読み込むプラグイン

くらむぼん

モデレーター
スタッフ
モデレーター
こちらでもBGMが1回で止まってしまう場合があって検証していたのですが、
ループタグ位置のloopstart + lengthが実際の再生時間より大きい場合に発生しました。

追記
loopstartのみの場合も、挙動が変わってますね。
くらむぼん様へ、平素より大変お世話になっております。
こちらのプラグインを導入した所、
目に見えて読込みが高速になりました。感謝で頭が上がりません。

ただ1点、私の環境でもツクールMVデフォルトBGMのいくつかが
BGMのループ1回で無音になる現象を確認しました。

一例としてデフォルトBGM「Battle6」を挙げますが
こちらは63.085msの曲に対し、ループ開始が5.486ms、
ループ終点が63.086msとなっております。

これをループ終点63.085msに修正した所、
正常にループされるようになりました。

ループタグの件、いろいろ想定を超える数値をぶちこむファイルが多いですね><
特にloopstartのみの場合に至っては、そもそもループタグを入れた人の意図が不明になってしまうのでどうしよう、という感じもします…
とはいえ、元の挙動に合わせますが…loopstartのみの場合の元の挙動って、いつもloopLength=曲の終端まで、でしたでしょうか?
そして確かに、ループ終点が終わりを超えるパターンは想像もしていませんでした!
デフォルトBGMにその事例があるのはあまりにも、悲しすぎますが…><

こうして再現条件までご報告いただけたので、すぐ修正に取りかかれそうです!
ありがとうございます!!
 

くらむぼん

モデレーター
スタッフ
モデレーター
くらむぼんさん

非常に革新的かつ意欲的なプラグインで、頭が下がります。
ありがとうございます。
早速使用しています。

2点、このプラグインを適応した際、下記の症状に出くわしたので、報告しておきます。
今後の参考になれば幸いです。

1点目は、
・マップに指定したBGSが、正常にループされない(例えばBGS「Wind.ogg」が1回の再生で止まってしまう)
です。

なお、この症状は、自分のプロジェクト(ver1.6.1)でのみ確認し、新規プロジェクト(ver1.6.1)では起こりませんでした。
OggOnly.js適応時では発生しません。AudioStreaming.jsを適応した際に発生します。
また、自分のプロジェクトで、これ以外のプラグインを全てOFFにしてみましたが、症状は治りませんでした。
コアスクリプトversionは同じなので、原因に確証が持てませんが、プラグインの競合以外の、何か別の原因が考えられます。


もう1点は、
・短いSEの音が薄っぺらく聞こえる(低周波数フィルターがかかったような音になる)
です。

この症状は、自分のプロジェクトと、新規プロジェクトの両方で確認しました。
OggOnly.js適応時では発生しません。AudioStreaming.jsを適応した際に発生します。
スマホなどで聞いていればわからないレベルですが、ヘッドフォンなどで聞いてみると、音にこだわるくらむぼんさんなら明らかにわかる違いだと思います。
聞き分けるサンプルは、「Coin.ogg」などがわかりやすかったです。
「Coin.ogg」を決定音に設定した状態で、AudioStreaming.jsをOFF時、ON時で、聞き比べてみてください。
原因は見当が付きません……1回目の再生なら読み込み途中かもしれないですが、2回目以降の再生でも薄っぺらくなるので……すみません。。。

あとこれは、プラグインの機能と関係がありませんが、プラグインの管理しやすさを考えると、
このプラグインと一緒に必要はファイル名の
stbvorbis_stream.jsとstbvorbis_stream_asm.js
の名前は、プラグイン選択リストの下に2つ並ぶように、
AudioStream_stbvorbis.jsやAudioStream_stbvorbis_asm.js
などとしたほうが、管理しやすいかもしれない、と思いました。(あくまで一例なので、ご参考まででお願いします)

このプラグインが将来のツクールMVのデフォルトになり、コアスクリプトに使われるほど安定して、
より多くの人に使ってもらえることを、切に祈ります。

そしてこちらの報告ですね。
正直なところ…この2点が一番難易度が高い気がしていて震えています><

まず1点目ですが、ゲームをアップロードしていただければ調査できるかと思います。
ただ、同じ条件でプロジェクト新規作成しても再生できるということで、
本当に本プラグインが問題を引き起こしているかも含め全く予想がつかなくなっており、大変かも!

そして2点目ですが、こちらは音そのものへの問題ということで直せたか判定しづらいやつですね><
一応、Coin.oggを聴き比べたら、違う感じがする…?
と私も思うのですが、言われると思い込みやすいというのもあるので
他の方にも聞いてもらいつつ調査に入りたいと思います!
 
くらむぼんさん
良かれと思って報告したことで、負荷をかけてしまい、申し訳ありません><。。。
あまり無理をしないで、まずは心身ともにゆっくり休養してください。
音声のストリーミング配信なんて、「超!」が付くほど画期的過ぎるサービスなので、不具合が出ることがあるのは皆さん重々に承知しているかと思います。
こんな素晴らしいプラグインを開発してくれたくらむぼんさんに対する喜びの声の方が大きいと思いますので、
くらむぼんさんの体調面も考えると、修正に入るのは、いったん2~3日お休みになってから、でいいと思います。

以下は、報告した不具合の原因を探るための情報です。ゆっくり休養を取ってから、作業を進めていただけるとうれしいです。

検証環境の一例として、私のゲームプロジェクトのアツマール版アップロードのURLを送ります。
アツマール版の動作品質は特にこだわっていません(ただでさえ他の原因で挙動が不安定…)ので、AudioStreaming.jsを適応した環境をそのままアップロードしています。
煮るなり焼くなり、好きにしてください。
https://game.nicovideo.jp/atsumaru/games/gm10558
プロジェクトファイルも添付しておきます。こちらが必要であれば、煮るなり焼くなり…以下同文です。
https://38.gigafile.nu/0627-mf2fa9961d5ee599b245159359965c6e1
(ギガファイル便で250MBあるので少々時間がかかります。30日限定です。6/27まで)。


1点目の件、TagScannerで、私のゲームプロジェクト内で、正常にループ再生ができないBattle6.ogg、Wind.oggのタグを調べてみました。
43acb36a2a89c63893553c81f93142ba.png
なお、Audacityでサンプル数を調べた所、Wind.oggのサンプル数は120254、Battle6.oogは1391041でした。
どちらも、明らかにLOOPSTART+LOOPLENGTHはサンプル数を超過しています。
アストラルさんがおっしゃっているように、正常なループ再生ができない原因は、これが事件の発端になっている気がします。

なお、正常にループ再生ができる、他BGSの音声ファイルは、ループタグが空白(設定されていない状態、上画面のCoin.oggと同じ)でした。
ループタグが空白の場合は、AudioStreaming.jsを適応しても、きちんと正常に最初から最後までループ再生できているものと思われます。

【追記】同じく、v1.6.1の新規プロジェクトのWind.oggもTagScannerで調べてみましたが、
LOOPSTARTとLOOPLENGTHとサンプル数は同じで、ビットレートが65kbps、ファイルサイズが37KBでした。
そして、私のゲームプロジェクト内で、Wind.ogg(44kbps、30KB)を新規プロジェクトのものに上書きして置き換えてみると、
【正常にループ】されました。
つまり、原因は、プロジェクトファイルのものではなく、oggファイルの中身の違いだったようです。
この原因として考えられるのは、古いv1.3.3等で公式配布された64bpkのogg変換処理の際に、何かしら情報が欠損した可能性が考えられます。
v1.6.1の新規プロジェクトで生成されるoggはそれよりもバージョンアップされており、その欠損情報がきちんと保管されている可能性があります。

ツクールMVデフォルトのoggファイルが正常にループできない方は、新規プロジェクトの同ファイルに置き換えてみるといいかもしれません。

2点目のCoin.oggなどの音声が薄っぺらく感じる件と、3点目のstbvorbis_stream.jsとstbvorbis_stream_asm.jsのファイル名についてですが、
これは後回しでいいと思います。
薄っぺらさもスマホやPCスピーカーなどで聞くにはそこまでわかりませんし、特に音にこだわる人と、UIにこだわる人向けの話です。
耳のことなので聞き間違えもあるかもしれませんし、こちらも数日程ゆっくり時間を取って確認してみるので、
しばらくお待ちいただけるとうれしいです。
 

Attachments

  • 43acb36a2a89c63893553c81f93142ba.png
    43acb36a2a89c63893553c81f93142ba.png
    18.9 KB · 閲覧: 2
  • 1ed2b380b79dc632d765d3907567e945.png
    1ed2b380b79dc632d765d3907567e945.png
    47.8 KB · 閲覧: 2
最後に編集:
対応ありがとうございます。
ストリーミング再生は画期的なのでとてもありがたいです。

loopstartのみは設定ミスやスペルミスの類で発生すると思います。
コアスクリプトのloopstartのみの場合は、loopstart = 0 loopLength=曲の終端(totalTime)でした。
AudioStreaming.jsの場合には、loopstartはタグ上のままで、loopLength=曲の終端(totalTime)となっていたので、実時間を超えてました。
 

火筒さしゃ

ユーザー
こちらについてはすみません、現状は不具合の手がかりを推察できないので、
前回同様にエラーが出る方のものを限定公開していただけると大変助かります。

くらむぼん様へ、
他プラグインとの兼ね合いや影響を考慮せぬまま投稿し
余計な手間と負担を掛けさせてしまい申し訳有りません。

前回同様 拙作「金のなる木」の
AudioStreaming.js導入Verを作成致しました。
https://game.nicovideo.jp/atsumaru/games/gm11060?key=b14031fd843a
もしプロジェクト一式が必要であれば別途ご連絡下さい。

確率で発生する不具合なので手順が確立しておりませんが
音源再生全般の一定確率で発生するので、
数分ほど操作するとエラーに遭遇すると思います。

現在音源再生に影響しそうな心当たりのある他のプラグインは以下の通りです。
ロード失敗エラーのすり抜けプラグイン(ThroughFailedToLoad.js)
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/ThroughFailedToLoad.js
Android Chromeで音が鳴らない問題を解決するプラグイン(dwango_androidpatch.js)
https://ch.nicovideo.jp/indies-game/blomaga/ar1156958

後ほど、これらをOFFにして検証してみようと思います。
そしてAudioStreaming.jsはプラグイン管理画面にて最下部に配置しておりますが、
もし適切な配置が御座いましたらご教授をお願いします。

以上、宜しくお願い致します。
 

Attachments

  • AudioErr.png
    AudioErr.png
    139.2 KB · 閲覧: 8

くらむぼん

モデレーター
スタッフ
モデレーター
くらむぼんさん
良かれと思って報告したことで、負荷をかけてしまい、申し訳ありません><。。。
あまり無理をしないで、まずは心身ともにゆっくり休養してください。
音声のストリーミング配信なんて、「超!」が付くほど画期的過ぎるサービスなので、不具合が出ることがあるのは皆さん重々に承知しているかと思います。
こんな素晴らしいプラグインを開発してくれたくらむぼんさんに対する喜びの声の方が大きいと思いますので、
くらむぼんさんの体調面も考えると、修正に入るのは、いったん2~3日お休みになってから、でいいと思います。

以下は、報告した不具合の原因を探るための情報です。ゆっくり休養を取ってから、作業を進めていただけるとうれしいです。

1点目のBGSが正常にループ再生されない件、私のゲームプロジェクトのアツマール版アップロードのURLを送ります。
アツマール版の動作品質は特にこだわっていません(ただでさえ他の原因で挙動が不安定…)ので、AudioStreaming.jsを適応した環境をそのままアップロードしています。
煮るなり焼くなり、好きにしてください。
https://game.nicovideo.jp/atsumaru/games/gm10558
プロジェクトファイルも添付しておきます。こちらが必要であれば、煮るなり焼くなり…以下同文です。
https://38.gigafile.nu/0627-mf2fa9961d5ee599b245159359965c6e1
(ギガファイル便で250MBあるので少々時間がかかります。30日限定です。6/27まで)。


TagScannerで、私のゲームプロジェクト内で、正常にループ再生ができないBattle6.ogg、Wind.oggのタグを調べてみました。
View attachment 5737
なお、Audacityでサンプル数を調べた所、Wind.oggのサンプル数は120254、Battle6.oogは1391041でした。
どちらも、明らかにLOOPSTART+LOOPLENGTHはサンプル数を超過しています。
アストラルさんがおっしゃっているように、正常なループ再生ができない原因は、これが事件の発端になっている気がします。

なお、正常にループ再生ができる、他BGSの音声ファイルは、ループタグが空白(設定されていない状態、上画面のCoin.oggと同じ)でした。
ループタグが空白の場合は、AudioStreaming.jsを適応しても、きちんと正常に最初から最後までループ再生できているものと思われます。

【追記】同じく、v1.6.1の新規プロジェクトのWind.oggもTagScannerで調べてみましたが、
LOOPSTARTとLOOPLENGTHとサンプル数は同じで、ビットレートが65kbps、ファイルサイズが37KBでした。
そして、私のゲームプロジェクト内で、Wind.ogg(44kbps、30KB)を新規プロジェクトのものに上書きして置き換えてみると、
【正常にループ】されました。
つまり、原因は、プロジェクトファイルのものではなく、oggファイルの中身の違いだったようです。
この原因として考えられるのは、古いv1.3.3等で公式配布された64bpkのogg変換処理の際に、何かしら情報が欠損した可能性が考えられます。
v1.6.1の新規プロジェクトで生成されるoggはそれよりもバージョンアップされており、その欠損情報がきちんと保管されている可能性があります。

ツクールMVデフォルトのoggファイルが正常にループできない方は、新規プロジェクトの同ファイルに置き換えてみるといいかもしれません。

2点目のCoin.oggなどの音声が薄っぺらく感じる件と、3点目のstbvorbis_stream.jsとstbvorbis_stream_asm.jsのファイル名についてですが、
これは後回しでいいと思います。
薄っぺらさもスマホやPCスピーカーなどで聞くにはそこまでわかりませんし、特に音にこだわる人と、UIにこだわる人向けの話です。
耳のことなので聞き間違えもあるかもしれませんし、こちらも数日程ゆっくり時間を取って確認してみるので、
しばらくお待ちいただけるとうれしいです。
対応ありがとうございます。
ストリーミング再生は画期的なのでとてもありがたいです。

loopstartのみは設定ミスやスペルミスの類で発生すると思います。
コアスクリプトのloopstartのみの場合は、loopstart = 0 loopLength=曲の終端(totalTime)でした。
AudioStreaming.jsの場合には、loopstartはタグ上のままで、loopLength=曲の終端(totalTime)となっていたので、実時間を超えてました。
くらむぼん様へ、
他プラグインとの兼ね合いや影響を考慮せぬまま投稿し
余計な手間と負担を掛けさせてしまい申し訳有りません。

前回同様 拙作「金のなる木」の
AudioStreaming.js導入Verを作成致しました。
https://game.nicovideo.jp/atsumaru/games/gm11060?key=b14031fd843a
もしプロジェクト一式が必要であれば別途ご連絡下さい。

確率で発生する不具合なので手順が確立しておりませんが
音源再生全般の一定確率で発生するので、
数分ほど操作するとエラーに遭遇すると思います。

現在音源再生に影響しそうな心当たりのある他のプラグインは以下の通りです。
ロード失敗エラーのすり抜けプラグイン(ThroughFailedToLoad.js)
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/ThroughFailedToLoad.js
Android Chromeで音が鳴らない問題を解決するプラグイン(dwango_androidpatch.js)
https://ch.nicovideo.jp/indies-game/blomaga/ar1156958

後ほど、これらをOFFにして検証してみようと思います。
そしてAudioStreaming.jsはプラグイン管理画面にて最下部に配置しておりますが、
もし適切な配置が御座いましたらご教授をお願いします。

以上、宜しくお願い致します。


メルサイアさん、アストラルさん、火筒さしゃさん、ご報告ありがとうございます!
特にいずれのご報告も調査検証をして頂いて原因究明まで手伝ってくださり、本当に助かります!

>ループタグが終点を超えている場合
>コアスクリプトのloopstartのみの場合

こちら、修正いたしました!
記事トップよりAudioStreaming.jsプラグインの再入手をよろしくお願いします~。

>Wind.oggの件

これは調査していただいたとおりで、ツクールMVの古いバージョンではbgsへのループタグ付を失敗しているようです。
(ツクールMVのSteam版更新履歴に記載されていました)
そのため上の「ループタグが終点を超えている場合」の条件を満たしてしまったようです…!
この件については正しい方のbgsを使うか、
または終点を超えているバグが直った最新版プラグインを使っていただけば直りそうですね~

>音質

こちら、調査続行中です。

>ファイル名

すみません、これについては人による好みが表れそうですので気になる場合ご自身で直してもらえるとありがたいです…!

>NotSupportedError: Operation is not supported

こちら、解決策をご提示いただきありがとうございます!
ただ提示いただいたreturn文さえあればエラーは回避できますが、
もしこの際に必要な分の音声データが失われているのだとしたらちょっと困りますので、
できれば原因の根本究明と解決までいきたいところです。

限定公開のゲームでは、数分遊べば現れるということでしたが
私はWindowsのPCからChromeで数分遊んでも(木に突撃しては全滅しているだけです)同じ現象になりませんでした…
特定の楽曲でいつもなるというわけではないんですよね?どういうことなんだろう…

さらに協力を求めることになってしまいますので、良かったらで構わないのですが、
もし再現手順などのパターンがございましたら教えてもらえると大変ありがたいです…><
どうぞよろしくお願いします。
 

くらむぼん

モデレーター
スタッフ
モデレーター
>音質

こちらの件、もう一度Coin.oggを中心に聞き直してみたのですが
私も最初は音が違うように感じていたのですが「違いがわかりません」という方もおり、
またそれとは別に「心なしか音質がよくなった気がする」と指摘する方もいらっしゃいました。
それらの意見を目にしながら聴き比べていると今度は私も音の違いがわからなくなってしまい…><

思うに音声の問題は評価しづらく、気分などによって聞こえ方がやや左右されがちなのかもしれません。
一応音質の件については、普通のスピーカーの範囲では違いを感じられないことと、
明らかにこちらのプラグインの音質のほうが悪いという見解が複数出ていないことから、
新たなご意見があるまでしばらく様子見させていただきたいと思います。
ご期待に添えずすみませんが、どうぞよろしくお願いします><

こちら評価情報です。

・宅内wifi
・VSCode + Live Server
・iPhone XR (iOS12.2)
・Safari

AudioStreaming.jsを検証したのですが音源(Cursor1.ogg,Cursor2.ogg,Battle1.ogg)が再生されず。
前作のogg.only+stbvorbis.js+stbvorbis_asm.jsでは再生可能でした。

ほかにiPhone XR (iOS12.2) で検証された方がいらっしゃればお寄せ頂けると幸いです。
(端末の問題なのか、それ以外なのかが分かりそう)。

だいぶ過去の話になりますが、ひょっとしてここまでの不具合修正の結果、
こちらの問題も解決していたりしませんか?
もしよければ、試していただければ幸いです。
(一応これが本スレ不具合報告で最後に残ったやつのはずなので)

・追記
ツイッターにて、上記の件不具合が直った報告いただきました!
これで不具合報告に対する対応がすべて済んだと思います~。
 
最後に編集:
>くらむぼんさん
お疲れ様です。

原因が難しいものが多い中、丁寧に究明くださり、ありがとうございます。
これだけの難解なものをたった数日で解決してしまうなんて、本当にすごいと思います。

ファイル名の件と、音質の件、了解しました。
どちらも好みの問題ですので、様子見でOKです。
 
最後に編集:

火筒さしゃ

ユーザー
くらむぼん様へ、対応誠にありがとうございます。
先日のAudioStreaming.js検証環境を最新jsに更新し、ざっくり動作確認致しました。
https://game.nicovideo.jp/atsumaru/games/gm11060?key=b14031fd843a

ループで無音になる件、謎の進行不能エラーが無事解消され
特に問題点は見当たらなかった為、
次回アップデートにて本番環境へ導入したいと思います。

本件に尽力頂き、心の底から感謝しております。
 

kuro

フォーラムスタッフ
以前投稿した件ですが、2019/6/4時点の最新版で再生できることを確認しました。
共有まで。

>こちら評価情報です。
>
>・宅内wifi
>・VSCode + Live Server
>・iPhone XR (iOS12.2)
>・Safari
>
>AudioStreaming.jsを検証したのですが音源(Cursor1.ogg,Cursor2.ogg,Battle1.ogg)が再生されず。
>前作のogg.only+stbvorbis.js+stbvorbis_asm.jsでは再生可能でした。
>
>ほかにiPhone XR (iOS12.2) で検証された方がいらっしゃればお寄せ頂けると幸いです。
>(端末の問題なのか、それ以外なのかが分かりそう)。
 

RyanBram

ユーザー
こんにちは "くらむぼん"。
この便利なプラグインを作成していただきありがとうございます。

グーグル翻訳の助けを借りて話しているので、私が日本語で正しく話していないのは本当に残念です。

私はあなたがEMSCRIPTENを使ってOGGをサポートしていないプラットフォームをサポートしているのを見ました。 今、私は「RPGツール」で同様のテクニックがMIDIサポートの機会を開くことができるかどうか本当に興味があります。 私はMIDIとサウンドフォントを再生できるJAVASCRIPTライブラリを見つけました。 あなたはここでそれをチェックすることができますhttps://schellingb.github.io/TinySoundFont/CustomSoundFont.html。ソースコードはhttps://github.com/schellingb/TinySoundFont/archive/gh-pages.zip からダウンロードできます。 そしてこれがメインのリポジトリhttps://github.com/schellingb/TinySoundFont/tree/masterです。

ご清聴ありがとうございました。
 
最後に編集:

くらむぼん

モデレーター
スタッフ
モデレーター
こんにちは "くらむぼん"。
この便利なプラグインを作成していただきありがとうございます。

グーグル翻訳の助けを借りて話しているので、私が日本語で正しく話していないのは本当に残念です。

私はあなたがEMSCRIPTENを使ってOGGをサポートしていないプラットフォームをサポートしているのを見ました。 今、私は「RPGツール」で同様のテクニックがMIDIサポートの機会を開くことができるかどうか本当に興味があります。 私はMIDIとサウンドフォントを再生できるJAVASCRIPTライブラリを見つけました。 あなたはここでそれをチェックすることができますhttps://schellingb.github.io/TinySoundFont/CustomSoundFont.html。 ソースコードはhttps://github.com/schellingb/TinySoundFont/archive/gh-pages.zipからダウンロードできます。 そしてこれがメインのリポジトリhttps://github.com/schellingb/TinySoundFont/tree/masterです。

ご清聴ありがとうございました。

こんにちは、RyanBramさん。
お褒めいただきありがとうございます。
海外でもこのプラグインがたくさん利用されるとうれしいので、ご面倒でなければ他人にもプラグインを勧めてください ;->

EmscriptenとTinySoundFontを併用して、ブラウザ上でMIDIを演奏できるのは非常に興味深いです。
ただ私が試したところ、それはMicrosoft Edgeブラウザでは正常に動作しませんでした。
より多くのブラウザ上で安定的に動作するようになれば、より注目されるようになると思います。

あなたの研究は素晴らしいと思います。
幸運を祈っています!
 

くらむぼん

モデレーター
スタッフ
モデレーター
暗号化した際、うまく音声が再生されないのは仕様ですか?

おや、特にそんな仕様にはしてないですが…と思って実際に動作させてみたら、確かに動きませんでした><
暗号化でも再生されるように修正しました!最上部のリンクからAudioStreaming.jsを再入手してください~
 

RyanBram

ユーザー
こんにちは、くらむぼん。

TinySoundfotがMicrosoft Edgeでうまく機能しないかどうかはわかりません。 私はTinySoundfontの作者がMicrosoft Edgeの問題を解決するためにソフトウェアをアップデートして、MIDIをできるだけ多くのブラウザでサポートできるようにしたいと思います。

WebAssemblyをサポートするように素材を更新して、パフォーマンスがさらに向上する可能性はありますか

ソフトウェアを共有する許可をいただきありがとうございます。 私はこの素晴らしいニュースをできるだけ多くの人々に伝えたいと思います。

宜しくお願いします
 
最後に編集:
トップ