バグ?ogg形式効果音が正常に再生されない

Issue #320 resolved
カニ風味 created an issue

Classicスキンの詠唱、電撃、引掻、水中、犬、絞付やJUDGMENTスキンの本、絞付などのogg効果音をエディタ上で指定して再生したところザーっというノイズしか再生されませんでした。保存してシナリオとしてプレーする時やoggファイル単体を再生した場合は正常に再生されており、また1.50やBloodWirthのようにwav形式なら同名効果音も正常に再生されるようです。

Comments (34)

  1. k4nagatsuki repo owner

    ご報告ありがとうございます。

    cwxeditorでは、CWPyの場所が分かっている場合、CWPyに付属しているbass.dllによって音声を鳴らそうとします。そうでない場合はx86ないしx64フォルダ内にあるSDL_mixerのDLLを使おうとし、それにも失敗した場合はWindows付属のWinMMというライブラリを使用します。このWinMMはOgg Vorbisに対応していません。

    上記の音声再生の優先順位は、設定によって変更する事ができます。

    以上の事を踏まえて、下記の事を確認していただけないでしょうか。

    1. 設定の「CardWirthPy.exeの場所」が正しく設定されているか。
    2. 設定の「その他」タブにある効果音再生方式が「BGM再生方式に合わせる」「自動選択」以外になっているか、あるいは「BGM再生方式に合わせる」の状態でBGMが「自動選択」以外になっているか。

    また、私の環境で一度だけ、bass.dllによる音声再生ができなくなる場合がありました。たぶんデバイスドライバの問題で、マシンを再起動するとよくなりました。これも試していただけないでしょうか。

    ただ、私の環境で起きた問題では、エンジンを含む他の全ての音声再生も失敗する状況になっていたので、今回の問題には当てはまらないかもしれません。

  2. カニ風味 reporter

    ありがとうございます。早速確認してみました。
    CardWirthPy.exeの場所は正しく設定されており、再生方式はBGM効果音ともに自動選択に設定されていました。
    再起動後も改善されなかったので、試しに効果音再生方式をWinMMにしてみたところ、前述の効果音で同じノイズが再生されたため、自分の環境では初めからWinMMで再生されてるようです。
    WinMMはogg未対応とのことですが、前述の効果音以外のoggファイルは正常に再生されているのですが、そういうものなのでしょうか?

    自分だけの環境で発生してる現象な気がしてきたのですが、もしかしたら再現性があるかもしれないので、順を追って書きますと
    テーブル→シナリオ設定→スキンを指定→Classic(MedievalFantasy)→スキン付属の(詠唱)ogg効果音をエディタ上で再生したところノイズという流れでした。

  3. k4nagatsuki repo owner

    ご確認ありがとうございます。

    WinMMはogg未対応とのことですが、前述の効果音以外のoggファイルは正常に再生されているのですが、そういうものなのでしょうか?

    音声や動画については、OSに含まれるデコーダの都合もあるので、これはよく分からないというのが正直なところです。

    cwxeditorの動作として、再生に失敗するごとにBASS→SDL_mixer→WinMMの順で再生できるか試すので、問題の起きる効果音以外はWinMMへ行くまでに再生に成功しているという事なのかもしれません。

    BASSがうまく使えていないとなると、DLLが正常に読み込めていないという可能性があります。CardWirthPy.exeのあるフォルダに以下のファイルがあるか確認していただけないでしょうか。

    bass.dll,bass_fx.dll,bass_midi.dll … 32-bit版のcwxeditorを使っている場合

    x64\bass.dll,x64\bass_fx.dll,x64\bass_midi.dll … 64-bit版のcwxeditorを使っている場合

  4. カニ風味 reporter

    使わせて頂いているのは64-bit版です。確認したところ、それらのファイルは全て所定の位置にありました。

    再生が上手く行かないoggファイルをオンラインアプリで再度ogg変換してみたところ、エディタでも問題なく再生できるようになったので、エディタではなくスキン同梱のogg効果音が自分の環境と相性が悪かったようです。

  5. k4nagatsuki repo owner

    SDL_mixerで再生した時に問題のノイズが発生する事を確認しました。となると、やはりBASSでの再生に失敗していると考えてよさそうです。

    考えられる要因は、とりあえず2つ思いついています。

    1. やはりCWPyの場所が正しくないか(この場合はスキンも読み取れないので考えにくい)、指定されたCWPyが持っているDLLが正しくない。
    2. 間違ってクラシックなエンジンのbass.dllが読み込まれている。クラシックなシナリオを編集している時など、それが適当と考えられる時は、対象となるクラシックエンジンに付属するbass.dllを使用するようになっています。ただ、クラシックエンジンに付属しているbass.dllは32-bit版なので、64-bit版のエディタからは使用できません。

    2.について確認したところ、CWPyの場所で指定されたCardWirthPy.exeがあるフォルダにx64フォルダが存在する場合には、必ずその中のbass.dllが使用されるはずですが、その判定に失敗するケースがあるのかもしれません。

    もしこの判定に失敗するようでも、32-bit版のcwxeditorなら再生に成功するはずです。

  6. k4nagatsuki repo owner

    もう少し確認してみましたが、クラシックなエンジンのあるフォルダにx64フォルダがあり、その中にbass.dllが入っていた場合に、そのDLLを使用しようとして失敗する可能性があります。

    ありそうもない事ですが、一応ご確認いただけないでしょうか。

  7. カニ風味 reporter

    確認してみたところクラシックエンジンのフォルダ内にはx64フォルダは無いようです。

  8. k4nagatsuki repo owner

    32-bit版のcwxeditorでは正常に再生できるでしょうか?

    そうだとしたらCWPyに付属しているbass.dllが使用されていない事はほぼ確定なのですが、どうしてそうなるかとなると、正直見当がつきません。

  9. カニ風味 reporter

    32-bit版のcwxeditorを試してみたのですが、こちらならノイズは発生しないようですが、元のwavと音程が変わっているようです。これは32-bit版と64-bit版の差異なのでしょうか?

  10. k4nagatsuki repo owner

    SDL_mixerで再生すると一部の音声が変化して聞こえる事が分かっているので、それかもしれません。

    どうもCWPyに付属しているものであろうとクラシックエンジンに付属しているものであろうと常にbass.dllの使用に失敗しているとしか思えませんが、どうしてそういう事になるのか分かりません。

    アンチウィルスソフトか何かによってDLLのリンクが妨害されているのでしょうか?

    その場合、CWPy側からは同じDLLをリンクできている(そうでないと音声が再生できない)というのも不可解です。

    すみません、今の所原因に見当がつきません。

  11. k4nagatsuki repo owner

    クラシックなエンジンやCardWirthPyで正しいサウンドフォントが指定されていない(存在しないファイルが指定されていたりする)という事はないでしょうか?

  12. カニ風味 reporter

    スキンの効果音をwavに差し替えるかエンコードし直せば正常に音が出るので、それで凌ごうと思います。連日の対応ありがとうございました。

  13. カニ風味 reporter

    pyのサウンドフォントは005.6mg_Aspirin_Stereo_V1.2というものに設定されていてDATA/SoundFontフォルダに同名のファイルがありました。

    クラシックエンジンに設定していたCardWirth1.50では使用するサウンドフォントにDefault.sf2というものが設定されていてこちらも同名ファイルがフォルダ内にあります。

  14. k4nagatsuki repo owner

    お役に立てず申し訳ありません。

    どこかにbass.dllが使えない原因はあるはずなので、何か状況の変化や気づいた事等あればお知らせください。

  15. k4nagatsuki repo owner

    もしよろしければ、もう少し調査にお付き合いください。

    cwxeditorは、何らかのエラーが発生した時に、設定やログを出力するフォルダ(エクスプローラのアドレスバーに%appdata%\cwxeditorと入力すると開けます)にエラーログcwxeditor_error.logを出力します。

    今回、BASSの初期化のプロセスをエラーログとして出すよう改造したバージョンを用意しました。

    https://bitbucket.org/k4nagatsuki/cwxeditor-k4nagatsuki/downloads/cwxeditor_test_20190822.zip

    もしよろしければ、このバージョンを使って現象を再現していただき、エラーログのBASS Initialize Start -------------------------------------------------という行以下に出力された内容を教えていただけないでしょうか。

    ログ内にあるパスにユーザ名が含まれている等、見せたくない情報が含まれている場合は、その部分を隠していただいても構いません。

  16. k4nagatsuki repo owner

    書き忘れていましたが、サウンドフォントの場所は問題無さそうです。そもそもサウンドフォントの設定がおかしければCWPyでも音が鳴らないはずです。

  17. カニ風味 reporter

    すみません。書き込みしてくださった事に今気がついたので早速試してみました。

    テスト版が32-bit版なため問題のノイズは発生していないのですが、

    cwx\editor\gui\dwt\mainwindow.d:2374 BGM Type: 2, SE Type: 2 

    とだけ出力されていました。

  18. k4nagatsuki repo owner

    ありがとうございます。

    どうも再生方式を自動選択した結果としてBASSが選択されていないようです。クラシックなエンジンの音声再生タイプの指定が利いているような感じがします。

    cwxeditorが参照するCWの設定ファイルは、CardWirth Extenderが生成するcwex.ini、CW 1.30~1.60が生成するCardWirth.cfg(実行ファイルによってファイル名は変化する)です。

    このどちらかがクラシックエンジンのフォルダにあった場合、内容をテキストエディタで開いてみて、以下のような行がないか確認していただけないでしょうか。

    MusicAPI=mci
    SoundAPI=mci
    

    たぶんこの行が原因で、自動的に音声再生方式にMCI(WinMM)が選択され、WinMMではOgg Vorbisの再生ができないのでSDL_mixerにバトンタッチし、ノイズが鳴る、という結果になっているのだと思います。

    上記の行を消すか、以下のようにすれば解決できるはずです。

    MusicAPI=bass
    SoundAPI=bass
    
  19. カニ風味 reporter

    ありがとうございます。クラシックエンジンに設定しているフォルダを見てみました。

    cwex.iniというファイルは見当たらず、CardWirth.cfgとCardWirthNext.cfgはあったのですが、テキストエディタで開いて検索してもMusicAPISoundAPIという行は無いようです。

  20. k4nagatsuki repo owner

    もしかしてCardWirthの設定のサウンドフォントで「使用するサウンドフォント」が空欄になっているという事はないでしょうか。

    その場合、*.cfgSoundFont=という行が含まれているはずです。

  21. カニ風味 reporter

    何度もお手を煩わせてしまい大変申し訳ございません。

    BASS Initialize Start ----------以下

    cwx\editor\gui\dwt\mainwindow.d:2315 BGM Type: 0, SE Type: 0

    cwx\editor\gui\dwt\mainwindow.d:2366 C:\CardWirth\CardWirthPy

    cwx\editor\gui\dwt\mainwindow.d:2367 []

    cwx\editor\gui\dwt\mainwindow.d:2378 BGM Type: 2, SE Type: 2

    と表示されていました。

  22. k4nagatsuki repo owner

    この出力を見る限り、CWPyのサウンドフォントが一つも設定されていない状態になっています。

    以下の点を確認していただけないでしょうか。

    • CWPyの詳細設定→音声→MIDIサウンドフォントのリストになんらかのアイテムがある。
    • リスト内のアイテムに警告アイコンが表示されていない。
    • リスト内のアイコンのどれか一つ以上の「使用」欄にチェックが入っている。
  23. カニ風味 reporter

    CWPyの詳細設定→音声→MIDIサウンドフォントのリスト
    → 005.6mg_Aspirin_Stereo_V1.2_Bank.sf2一つだけしかなく、チェックが入っている状況です。
    リスト内のアイテムに警告アイコンが表示されていない。
    → 警告のアイコンらしきものは表示されていません。
    リスト内のアイコンのどれか一つ以上の「使用」欄にチェックが入っている。
    → 005.6mg_Aspirin_Stereo_V1.2_Bank.sf2のみです。

  24. カニ風味 reporter

    cwx\editor\gui\dwt\mainwindow.d:2312 BASS Initialize Start ----------以下
    cwx\editor\gui\dwt\mainwindow.d:2315 BGM Type: 0, SE Type: 0
    cwx\editor\gui\dwt\mainwindow.d:2366 C:\CardWirth\CardWirthPy
    cwx\editor\gui\dwt\mainwindow.d:2367 []
    2019-08-25 02:53:32 [Build: 2019-08-25 01:51:47 Debug / Console (32-bit)]

    と表示されています。

  25. カニ風味 reporter

    cwx\editor\gui\dwt\mainwindow.d:2312 BASS Initialize Start ---- 以下

    2cwx\editor\gui\dwt\mainwindow.d:2315 BGM Type: 0, SE Type: 0
    cwx\skin.d:807 EnginePath: C:\CardWirth\CardWirthPy\CardWirthPy.exe
    cwx\skin.d:810 Settings.xml: C:\CardWirth\CardWirthPy\Settings.xml
    cwx\skin.d:826 SoundFonts: []
    cwx\editor\gui\dwt\mainwindow.d:2366 C:\CardWirth\CardWirthPy
    cwx\editor\gui\dwt\mainwindow.d:2367 []
    cwx\editor\gui\dwt\mainwindow.d:2378 BGM Type: 2, SE Type: 2

    と表示されています。

  26. k4nagatsuki repo owner

    分かりました。CWPyの設定ファイルの仕様とcwxeditorの仕様との兼ね合いで発生した不具合です。

    CWPyでは、ある設定が初期値と同じであれば、設定ファイルであるSettings.xmlに書き出しません。これは設定ファイルのサイズの削減と、将来初期値が変更された時に対応するための仕様です。これにより、サウンドフォントの設定がデフォルトのサウンドフォント設定のままであれば、設定ファイルにサウンドフォントのリストが書き出されません。

    一方cwxeditorは素直にSettings.xmlからサウンドフォントのリストを取得しようとしますが、書き出されていないので取得できず、結果としてBASSが使用できなくなります。

    サウンドフォントリストを設定に書き出すかどうかは比較的遅い時期に作られた仕様で、その時にこの組み合わせの不具合が発生したのだと思います。手持ちの環境ではデフォルトのサウンドフォント設定を使用していないので気づきませんでした。

    これからエディタの方を修正します。

  27. k4nagatsuki repo owner

    pull request #570

    対応しました。最新のテスト版をお試しください。

  28. カニ風味 reporter

    課題作成時にノイズの走っていた全てのogg効果音が正常に再生されるのを確認しました。

    週末とはいえこのような時間まで対応していただき本当にありがとうございました。感謝しかありません。

  29. k4nagatsuki repo owner

    ご確認ありがとうございます。

    週末とはいえこのような時間まで対応していただき本当にありがとうございました。感謝しかありません。

    いえ、こちらこそ感謝しなければなりません。

    ここまでお付き合いいただけなければ、おそらくこの問題は発見も修正もする事ができなかったでしょう。幾度も検証していただきありがとうございました。

  30. Log in to comment