皆様の音声再生環境はどうですか?

なおぼう

ユーザー
技術的なことが関係してくると思うのでこちらに書きます。
自分はPCで音楽鑑賞もするので、USB-DACをつないでPCの音声はこちらから出力するようにしていたのですが、MZでBGMの演奏をおこなうと、イベントコマンド実行から1秒近く遅延する状態でした。戦闘時も勝利時の経験値獲得のメッセージ表示からMEが鳴るまでかなり遅延がありました。
ツクマテにもBGMの遅延対策について相談した方がおり、そういうものだと思っていたのですが、たまたま出力デバイス(タスクバーのスピーカーのアイコンを右クリック→サウンドの設定を開く→出力デバイスを選択してくださいのプルダウン)をオンボードサウンドに変えてみたところ、遅延なく再生されました。
もちろんMZ以外のアプリ、動画サイトやメディアプレイヤーでの再生では元々遅延はありません。
外部DACにはUSB以外にも光ケーブルで接続するタイプもありますが、BGMが遅延するという方でもし外部DAC特にUSB接続のものを使っている場合は、オンボードサウンドに切り替えることで解決するかもしれません。
 

温州みかん

ユーザー
処理がかさむと重くなり、特にマップ移動時にBGMが切り替わるとき1秒弱の遅延が発生するのは、そんなものだ と割り切っていました。
環境の確認は大切なのだと思い知らされます。

対策的なもの
MVでは顕著でしたで、読み込みを高速化するプラグインを紹介します。
モデレーター スタッフ くらむぼん氏に感謝!

MZでは上記読み込みシステムがデフォルトで備わっているっぽい気がしましたが、それでも、若干のラグがあるようです。
原則、使用時/直前 に対象ファイルを読み込む仕様だと聞きました。
なので、ユーザー端末の能力や設定に大きく左右されるとしても驚きません。

対処療法としてスクリプトを活用して疑似的にプリロードし、再生のタイミングを制御することは可能です。
使用するスクリプト AudioManager._bgmBuffer.stop()  (バッファ領域にある)BGMを止める
AudioManager._bgmBuffer.play() (バッファ領域にある)BGMを演奏する

イベントコマンド「BGMの演奏」のすぐ後にスクリプトAudioManager._bgmBuffer.stop(); でBGMを止める
任意のタイミングでスクリプトAudioManager._bgmBuffer.play();により読み込み済みのBGMを演奏する
といた手順です。
感覚として、一度読み込んだらしらばらくキャッシュ内に留まるように感じているのですが、そのあたりの仕様に明るくないため、詳しい方は補足をお願いします。
 

Attachments

  • プリロード.png
    プリロード.png
    48.7 KB · 閲覧: 4

なおぼう

ユーザー
どうもです。自分も、Javascriptで動いているのだからサウンドデバイスの差異はブラウザやOSが吸収してしまうだろうと思い込んでいたので気づいた時は正直かなり驚きました。
MZのBGMファイルはMVよりもかなり軽量化されていますが、どうやら読み込み自体はMVレベルのファイルサイズ(1曲あたり数MB)でも一瞬で完了しており、その後の展開処理?が問題のようです。MZのデフォルトBGMには少ないですが、MVのエッセンシャルセットなどではループ開始までが非常に長い曲(LOOPSTARTタグの値が100万以上)があり、それらは他の曲に比べて特に遅延が大きいと感じました。
 

なおぼう

ユーザー
MVエッセンシャルセットの中でも特に重い「Town Theme」ですが、こいつはLOOPSTART:1513175、LOOPLENGTH:4032014となっており
AudioManager._bgmBufferを使っても演奏し始めが途切れるほどですが、
Audacityでループ箇所を調整し、LOOPSTART:1039、LOOPLENGTH:3528112としてみたところ明らかに遅延は減りました。
やはりファイルサイズではなくループの長さが決定的なようです。
 

なおぼう

ユーザー
処理がかさむと重くなり、特にマップ移動時にBGMが切り替わるとき1秒弱の遅延が発生するのは、そんなものだ と割り切っていました。
環境の確認は大切なのだと思い知らされます。

対策的なもの
MVでは顕著でしたで、読み込みを高速化するプラグインを紹介します。
モデレーター スタッフ くらむぼん氏に感謝!

MZでは上記読み込みシステムがデフォルトで備わっているっぽい気がしましたが、それでも、若干のラグがあるようです。
原則、使用時/直前 に対象ファイルを読み込む仕様だと聞きました。
なので、ユーザー端末の能力や設定に大きく左右されるとしても驚きません。

対処療法としてスクリプトを活用して疑似的にプリロードし、再生のタイミングを制御することは可能です。
使用するスクリプト AudioManager._bgmBuffer.stop()  (バッファ領域にある)BGMを止める
AudioManager._bgmBuffer.play() (バッファ領域にある)BGMを演奏する

イベントコマンド「BGMの演奏」のすぐ後にスクリプトAudioManager._bgmBuffer.stop(); でBGMを止める
任意のタイミングでスクリプトAudioManager._bgmBuffer.play();により読み込み済みのBGMを演奏する
といた手順です。
感覚として、一度読み込んだらしらばらくキャッシュ内に留まるように感じているのですが、そのあたりの仕様に明るくないため、詳しい方は補足をお願いします。
すみません、もし差し支えなければDACの機種名をお教えいただけますでしょうか?
自分が使ってるのはSabaj A10dという中国メーカーのやつです
 

温州みかん

ユーザー
すみません、もし差し支えなければDACの機種名をお教えいただけますでしょうか?
自分が使ってるのはSabaj A10dという中国メーカーのやつです
プロフィールのとおり、一応、ボカロPやっていますが、外部機器はほとんど使っていません。
DAC(デジタル to アナログ コンバータ)は持っていません。 PCのサウンドデバイスはデフォルトのままです。
(Realtek High Definition Audio という名前のドライバーです)
出力や拡張機能の設定が可能なのですが、なおぼうさんの投稿まで触ってみようとは思いませんでした。

MIDIケーブル? キーボード? キーボードくらいあるよ、文字入力たいへんじゃん?
 
トップ