音が鳴らない
CardWirthPyのバージョン:0.12.1/0.12.2 OS:Windows7 Home Edition SP1 (64bit) 再現:常に
exeを起動しても、BGMと効果音が一切鳴りません。 DL、解凍したのみの状態で既にこの状態です。 私の環境が特殊だとも思えないのですが……。
Comments (51)
-
repo owner -
Account Deleted 返答をありがとうございます。各項目について確認しました。
- この環境で使用しているアプリケーションすべて、音声再生に異常はありません。CW1.50でも正常に鳴ります。
- 「bass.dll」「bassmidi.dll」は存在します。
- 当該フォルダに「.mid」「.ogg」ファイルは存在します。
- 当該フォルダに「TimGM6mb.sf2」ファイルは存在します。
- 「音楽を再生する」「効果音を再生する」にチェックは入っており、音量は0ではありません。
- 「MIDIサウンドフォント」は空でなく、チェックは入っています。
- 「MIDIサウンドフォント」のチェックをすべて外すと、BGM、効果音ともに鳴ります。
- Windowsの「ミキサー」で、CWPyの音量は変更されていません。
-
repo owner ご確認ありがとうございます。
7.が成り立つということは、BASSという音声再生用ライブラリと使用されているPCのサウンドドライバの間でトラブルが起きているのかもしれません(全てチェックを外した場合はBASSを使わなくなる)。
BASS関係のファイル2点(
bass.dll
とbassmidi.dll
)は、現在同梱しているバージョンより新しいものが出ているようなので、それを入れて試していただけないでしょうか。このファイルを解凍してそのまま上書きすればDLLファイルが更新されます。それで一度音が鳴るかお試しください。
特定のアプリケーションで音が鳴らないようなトラブルについて検索してみた結果、数点出てきました。やはりサウンドドライバ周りをつつくような回答があるようなのですが、下手にいじるとPCの音声全体が鳴らないようなトラブルにもなりかねないので少し慎重になる必要があると思います。
-
Account Deleted 返答をありがとうございます。試してみましたが、残念ながらdllの更新では改善されませんでした。
-
repo owner ご確認ありがとうございます。だめでしたか。そうなると、今すぐ試せる対処としては、例えば
CardWirthPy.exe
を右クリックし、「互換性」タブを選択してWinXPやVistaのモードにして動かしてみる等でしょうか。とはいえそれで改善する可能性は少なそうです。CW 1.50もBASSを使用しているはずなので(設定にもよりますが)、やはりCWPyの方に問題がある可能性もあります。しかしそうなると調査に手間がかかりそうです(例えば何度もテスト用のプログラムを実行していただくような事態になるかもしれません)。
1.50に付属している
bass.dll
とbassmidi.dll
をCWPyの側に上書きして試すこともした方がいいかもしれません。
場合によっては、サウンドドライバの名前から手懸りを掴めるかもしれません。コントロールパネルの「システムとセキュリティ」から「デバイス マネージャー」を開き、「サウンド、ビデオ、およびゲーム コントローラー」のところにどのような項目があるか見ていただけないでしょうか。
また、そこで各項目を右クリックすると「ドライバーソフトウェアの更新」を行えるのですが、それを実施すると症状が改善する可能性もあります。
-
repo owner どこかでDLLの実行に失敗していて、Windowsがエラーログを出している可能性があります。
スタートメニューの「コンピュター」を右クリックし、「管理」→「イベントビューアー」→「Windowsログ」→「アプリケーション」のところに
CardWirthPy.exe
やbass.dll
のエラーログが出ていないかも確認していただけないでしょうか。 -
Account Deleted 互換モードでの起動、CW1.50付属のdllで上書き、ともに試しましたが、変化はありませんでした。
デバイスマネージャーにあるのは、以下の7つで、いずれも最新の状態である様子です。
- Bluetooth Audio
- IDT High Definition Audio CODEC
- NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
- teVirtualMIDI - Virtual MIDI Driver x64
- USB PnP Sound Device
- Yamaha NETDUETTO Driver (WDM)
- インテル(R) ディスプレイ用オーディオ
Windowsログのアプリケーションも確かめましたが、CardWirth.exeがbassmidi.dllで稀にエラーを吐いているのを見つけましたが、それ以外でのbass系のエラーや、CardWirthPy.exeでのエラーはありませんでした。
テスト用のプログラムを何度も実行することになっても、こちらは問題ありません。ただ、ゲームを遊ぶ分には、現状CW1.50が正常に動作していますし、障りは(CWPyで遊びたいという私の心情以外には)ありませんので、タスクの優先順位は低く設定して頂いて構いません。
-
repo owner サウンドドライバがずいぶんたくさんありますね。その中のスピーカーに通じていない一つがなぜか選択されているとかでしょうか。うーん……。
その中のどれかを無効にすると急に鳴り出したりするかもしれませんね。特にVirtual MIDI Driverは怪しそうな感じがします。ただ、デバイスドライバの有効・無効切替を行うと再起動が必要になるかもしれません。
テスト用のプログラムを何度も実行することになっても、こちらは問題ありません。ただ、ゲームを遊ぶ分には、現状CW1.50が正常に動作していますし、障りは(CWPyで遊びたいという私の心情以外には)ありませんので、タスクの優先順位は低く設定して頂いて構いません。
そう思っていただけるのが本当にありがたいので、できる限り対応させていただきます。他に着手進行中のタスクは今のところ無いので、その点は大丈夫です。
とりあえず明日にもテスト用のプログラムの作成を試みます。しばらくお待ちください。
-
repo owner テストプログラムを作成しました。次のファイルが含まれています。
- CardWirthPy Sound Test.exe
- soundtest_dlang.exe
1.は、CardWirthPyと同じやり方でMIDI音声を15秒間鳴らすものです。理屈の上では、これで音が鳴るならCardWirthPyでも鳴るはずです。
2.は、同じようにBASSを使ってMIDI音声を鳴らしますが、使用しているプログラミング言語が違います。
2.が鳴って1.が鳴らないようなら、CWPyでのBASSの使い方に問題がある可能性があります。両方とも鳴らないようなら、BASSとサウンドドライバの間に問題があるか、両方のプログラムに共通した使い方の誤りがある可能性があります。両方とも鳴ったり、1.が鳴って2.が鳴らないようなことはまず無いと思います。もしそうなったらまた別のことを考えなくてはなりません(例えばWindowsがCardWirthPy.exeの場所を覚えていて毎回特定のサウンドドライバと関連付けているとか……仕組みもよく知らずに言っていますが)。
お手数をお掛けして申し訳ありませんが、お試しください。
-
repo owner たった今もう一つ可能性を思いついたのですが、、例えばCardWirthPyの場所をCドライブ直下などにすると音は鳴るでしょうか。具体的に調べたわけではないのではっきり言える事ではありませんが、CardWirthPy.exeに至るパスに特殊な文字が使われていると音が鳴らない(その他色々不具合が出る)可能性があるかもしれません。
-
Account Deleted ありがとうございます。早速試してみたところ、1,2ともに音は鳴りました。CWPyでは依然として鳴りません。
ということはプログラムに問題はない様子でしょうか、ちょっと時間を作ってドライバ周りに手を加えてみようと思います。また、ドライブ直下でもそれ以外でも、変化はないようです。
-
repo owner ご確認ありがとうございます。なんと、両方とも鳴ってしまいましたか……。
同じ仕組で鳴らしてはいますが、そこに至るまでのプロセスに問題があるという事になりますね。どこが違うのか確認してみます。
C直下でも鳴らない場合、パスの問題である可能性も低そうですが、試しにテストプログラムのファイルをCardWirthPy本体と同じフォルダに入れた場合、音は鳴るでしょうか。鳴る場合、パスの問題である可能性がわずかながら残ります。
-
repo owner 音声の再生に至るまでのプロセスをログに出すような改造版を作成してみました。
これをCardWirthPy 0.12.2などに上書きし、起動→オープニング画面でクリック→終了カードをクリック、とすると、正常に動けば次のログが出力されるはずです。逆に異なるログが出た場合は、具体的にどこで不具合が出たのか分かるかもしれません。
win32 init_bass() begin: ['Data/SoundFont/TimGM6mb.sf2'] init_bass() end: 132, True is_alivablewithpath() begin: Data/Skin/Classic/Bgm/DefReset.mid is_alivablemidi() begin is_alivablemidi() end: True is_alivablewithpath() end: True is_alivablewithpath() begin: Data/Skin/Classic/Bgm/DefReset.mid is_alivablemidi() begin is_alivablemidi() end: True is_alivablewithpath() end: True is_alivablewithpath() begin: Data/Skin/Classic/Bgm/DefOpen.mid is_alivablemidi() begin is_alivablemidi() end: True is_alivablewithpath() end: True play_bgm() begin: Data/Skin/Classic/Bgm/DefOpen.mid, 0.8 is_alivable() begin is_alivable() end: True stop_bgm() begin is_alivable() begin is_alivable() end: True _play() begin: Data/Skin/Classic/Bgm/DefOpen.mid, 0.8, True _play() encoding: mbcs is_alivablemidi() begin is_alivablemidi() end: True _play() end: 187 play_bgm() end: 223, True is_alivablewithpath() begin: Bgm/DefOpen.mid is_alivablemidi() begin is_alivablemidi() end: True is_alivablewithpath() end: True stop_bgm() begin is_alivable() begin is_alivable() end: True stop_bgm() end: 258 is_alivablewithpath() begin: Data/Skin/Classic/Bgm/DefReset.mid is_alivablemidi() begin is_alivablemidi() end: True is_alivablewithpath() end: True
-
Account Deleted テストプログラムをCWPyと同じディレクトリで実行した場合も、音は鳴りました。 また、サウンドドライバを必須のもの(IDT)以外停止して実行してもみたのですが、変化ないようです。
改造版のほうも試してみました。出力されたログは、以下になります。
#! win32 init_bass() begin: [u'Data/SoundFont/TimGM6mb.sf2'] init_bass() end: 132, True is_alivablewithpath() begin: Data/Skin/Classic/Bgm/DefReset.mid is_alivablemidi() begin is_alivablemidi() end: True is_alivablewithpath() end: True is_alivablewithpath() begin: Data/Skin/Classic/Bgm/DefReset.mid is_alivablemidi() begin is_alivablemidi() end: True is_alivablewithpath() end: True is_alivablewithpath() begin: Data/Skin/Classic/Bgm/DefOpen.mid is_alivablemidi() begin is_alivablemidi() end: True is_alivablewithpath() end: True play_bgm() begin: Data/Skin/Classic/Bgm/DefOpen.mid, 1.0 is_alivable() begin is_alivable() end: True stop_bgm() begin is_alivable() begin is_alivable() end: True _play() begin: Data/Skin/Classic/Bgm/DefOpen.mid, 1.0, True _play() encoding: mbcs is_alivablemidi() begin is_alivablemidi() end: True is_alivablewithpath() begin: Data/Skin/Classic/Bgm/DefReset.mid is_alivablemidi() begin is_alivablemidi() end: True is_alivablewithpath() end: True
-
repo owner ありがとうございます。どうもDefOpen.midを見つけてから実際に再生するまでの間のどこかでエラーが発生しているように見えます。その辺りにもう少しログを増やしみたバージョンを作りました。何度もお手数をおかけして申し訳ありませんが、これでもう一度試していただけないでしょうか。
-
Account Deleted 実行してみました。
#! win32 init_bass() begin: ['Data/SoundFont/TimGM6mb.sf2'] init_bass() end: 132, True is_alivablewithpath() begin: Data/Skin/Classic/Bgm/DefReset.mid is_alivablemidi() begin is_alivablemidi() end: True is_alivablewithpath() end: True is_alivablewithpath() begin: Data/Skin/Classic/Bgm/DefReset.mid is_alivablemidi() begin is_alivablemidi() end: True is_alivablewithpath() end: True is_alivablewithpath() begin: Data/Skin/Classic/Bgm/DefOpen.mid is_alivablemidi() begin is_alivablemidi() end: True is_alivablewithpath() end: True play_bgm() begin: Data/Skin/Classic/Bgm/DefOpen.mid, 1.0 is_alivable() begin is_alivable() end: True stop_bgm() begin is_alivable() begin is_alivable() end: True _play() begin: Data/Skin/Classic/Bgm/DefOpen.mid, 1.0, True _play() encoding: mbcs is_alivablemidi() begin is_alivablemidi() end: True _play() failure 1: Data/Skin/Classic/Bgm/DefOpen.mid is_alivablewithpath() begin: Data/Skin/Classic/Bgm/DefReset.mid is_alivablemidi() begin is_alivablemidi() end: True is_alivablewithpath() end: True
-
repo owner ありがとうございます。BASSがファイルを読み込むところでエラーが発生している事が分かりました。とはいえそれなら同じことをしているテストプログラムも同じ所でエラーになるはずなので、まだ何か違いがあるはずです。
もしかすると実行時のプログラム内部の文字コードが違うなどという事があるのかもしれません。確認のため、次の改造版を実行していただけないでしょうか。同じようなログが出るはずですが、異なるのは最初の3行ほどだけになると思います。そこだけ貼り付けていただけるとありがたいです。
-
Account Deleted 実行してみました。
#! win32 ascii init_bass() begin: ['Data/SoundFont/TimGM6mb.sf2']
CWPyとテストプログラムの差異というと、CWPyはexeより深い階層に、テストプログラムは同一ディレクトリに、ファイルが存在することくらいでしょうか。ソースを読んでいないので推量ですが、ディレクトリ区切り文字の問題等?
-
repo owner ご確認ありがとうございます。文字コードの問題はなさそうです。
なるほど、区切り文字が'\'でないといけないということはありえるかもしれません。BASSの内部で使用している仕組みが環境によって異なり、その仕組次第で'/'も受け付ける場合と'\'でないといけない場合があるのかも。その線で少し改造してみます。
-
repo owner 区切り文字を'\'にして再生するテスト版です。またお手数をおかけしますが、ご確認ください。
-
Account Deleted 実行してみましたが、変化ありませんでした。区切り文字でもなかったようです。
-
repo owner ありがとうございます。うーん、不可解……。
後は
DefReset.mid
が再生されているかでしょうか。試しにCardWirthPy\Data\Skin\Classic\Bgm\DefReset.mid
の名前を変えるか削除するかしてみた場合はどうでしょう。 -
Account Deleted DefReset.midをDefReset_.midにリネームして実行してみました。
#! win32 ascii init_bass() begin: ['Data/SoundFont/TimGM6mb.sf2'] init_bass() end: 132, True is_alivablewithpath() begin: Data\Skin\Classic\Bgm\DefOpen.mid is_alivablemidi() begin is_alivablemidi() end: True is_alivablewithpath() end: True play_bgm() begin: Data\Skin\Classic\Bgm\DefOpen.mid, 1.0 is_alivable() begin is_alivable() end: True stop_bgm() begin is_alivable() begin is_alivable() end: True _play() begin: Data\Skin\Classic\Bgm\DefOpen.mid, 1.0, True _play() encoding: mbcs is_alivablemidi() begin is_alivablemidi() end: True _play() failure 1: Data\Skin\Classic\Bgm\DefOpen.mid
存在しないファイルとして無視されているように見えますね……。
-
repo owner そして依然として
DefOpen.mid
の再生には失敗していますね。本当に何が違うんだろう? ちょっと何が違うのか見当がつきません……。テストプログラムの方を改造して、再生するファイルのパスが実際のものと合うようにしてみます。
-
repo owner Dataフォルダ以下の構造をCWPy本体に合わせたテスト版です。これで音が鳴るか試していただけないでしょうか。もし鳴らないとしたらなんらかのパスの問題だということになります(そうだとしても不可解なのですが)。
-
Account Deleted 実行してみたところ、正常に再生されてしまいました。パスの問題ではない……?
-
repo owner ありがとうございます。後は、BASSでないもう一つの仕組みがCWPyには入っているという辺りですかね……。
試しにそれを無効にしたバージョンを作ってみます。
-
repo owner もう一つの音声再生の仕組み(サウンドフォントのチェックを全て外した時に使われるもの)を無効にしたバージョンです。何度も申し訳ありませんが、お試しください。
-
Account Deleted 試してみました。
#! win32 ascii init_bass() begin: ['Data/SoundFont/TimGM6mb.sf2'] init_bass() end: 132, True play_bgm() begin: Data\Skin\Classic\Bgm\DefOpen.mid, 1.0 stop_bgm() begin _play() begin: Data\Skin\Classic\Bgm\DefOpen.mid, 1.0, True _play() encoding: mbcs error code: 37 _play() failure 1: Data\Skin\Classic\Bgm\DefOpen.mid stop_sound() begin: False stop_bgm() end: 277
依然、鳴らないままですね。何が悪いのか……。
-
repo owner ありがとうございます。再生の仕組の競合でもありませんでしたか。
BASSのエラーコードとマニュアルを照らし合わせると
Requested data is not available.
、要求されたデータが使用できません、というような事を言っているようなのですが、これだけだとちょっと意味が分かりません。どういう場合にこのエラーが出るか調べてみます。もしかしたら本当にDefOpen.midが使用できないのかもしれません。試しにテストプログラムに入っているDefOpen.midを
Data\Skin\Classic\Bgm\DefOpen.mid
に上書きしてみた場合、再生できたりしないでしょうか。 -
Account Deleted やってみましたが、変化ありませんでした。ファイルが壊れているわけでもないようです。
また、鳴らないのはMIDIだけでなく、すべての効果音も(そしておそらくMIDI以外のBGMも)なので、個別ファイルに問題があるということはなさそうです。シナリオを入れてプレイしてみても、一切の音が鳴らないことも、ファイルに問題がないことの裏付けになっているかと。
-
repo owner 仰るとおりです。ファイルではなく再生機構そのものの問題であることは明白です。
もう少し丁寧にBASS以外の仕組みを潰す必要があるのかもしれません(今はその仕組が初期化された後で強制終了してからBASSの初期化を行っている)。少し作業してみます。
-
repo owner どうも初期化しないというのが容易ではなさそうなので、逆にテストプログラムの方にその仕組(SDL_mixerというのですが)を入れてみました。
もしこれで音が鳴らなくなれば、それが原因と見て間違いないと思います。
-
Account Deleted 実行してみたところ、音が鳴りませんでした!
-
repo owner あ、そうするとBASSとSDL_mixerの競合ですね。ついに原因を突き止めた! ありがとうございます。
さて、そうすると、どうやって回避したものか。BASSを先に初期化すればよくなるのかもしれません。まずテストプログラムを改造して試行版を作ってみます。
-
repo owner BASS→SDL_mixerの順で初期化を行うテスト版です。お試しください。
-
Account Deleted 実行してみました。問題なく再生されて鳴りました。
-
repo owner ありがとうございます。ようやく光が見えました。
今からテスト版に施したのと同じ変更をCWPy本体に施します。それを実行して音が鳴るようなら、解決になるかと思います。
-
Account Deleted あ、ただ、終了時に「CardWirthPy Sound Test は動作を停止しました」となりました。これは問題あるでしょうか。
-
repo owner おっと、それは問題ですね……。今度はSDL_mixerの方に問題が起きたのかもしれません。
もう一度テスト版を改造してみます。
-
repo owner 問題を回避しようとしたバージョンです。これで音が鳴り、終了時にも問題がおきなければ、これにそって本体を改造してみます。
-
Account Deleted 再生、終了とも問題ありませんでした。よろしくお願いします。CWPyで遊べるのが楽しみです。
-
repo owner ありがとうございます。今から改造します。
単純な改造では問題が出るようなのでちょっと時間がかかるかもしれないのですが、今日中には終わらせますので、今しばらくお待ちください。
-
repo owner ここまでの検証結果を反映したテスト版です。0.12.2か現在ご使用中のエンジンに上書きしてお試しください。
これで無事にBGMと効果音が鳴り、終了時にもエラー等出ないようであれば、問題は解決したと考えられます。
-
Account Deleted ありがとうございます。0.12.2に上書きし、実行してみました。BGM、効果音ともに正常に鳴り、サウンドフォントの変更もできました。
新たな問題として、サウンドフォントのチェックを全て外してしまうと、ビジー状態になり、強制終了するしかないようです。
-
repo owner ご確認ありがとうございます。ようやく動くようになりましたね。
サウンドフォントのチェック全解除時の問題なのですが、その時の内部の挙動は、(1)BASSが初期化された後で、(2)設定が変更されたのでBASSを終了し、(3)SDL_mixerを初期化する、というものになるのですが、どうしてBASSを終了し解放したにも関わらずSDL_mixerと競合してしまうのかが分かりません。
これを解決しようとすると、ライブラリやサウンドドライバの奥深いところまで立ち入らなければならなそうです。一朝一夕にはいかないと思います。ライブラリのバージョンアップなどで直る可能性もあります。
CWPyは、基本的にはサウンドフォントを使用せずに動かすということはないので、そのような設定を避けるという事で回避していただけないでしょうか。完全な解決にならないので本当に申し訳ないのですが……。
-
Account Deleted いえ、言葉足らずになりましてこちらこそ申し訳ありません。解決のお願いというよりは、そういう現象が発生してしまうという、報告のみのつもりでした。幸いというか、現象が発生しても、起動できなくなるようなことはなさそうですので、ひとまずは気にする必要はないと思います。
本当に、対応有難うございます。
-
repo owner こちらこそ、本当にありがとうございます。不具合でご迷惑をおかけした上、丸一日以上お手間を取らせてしまって申し訳ありませんでした。一定の解決までいけたのは全面的なご協力をいただけたおかげです。
では、これで一区切りということで、ReadMe.txtに既知の問題として記した上で、優先度を下げさせていただきます。いつか本当に解決済みにできればいいのですが。
-
repo owner 今回の最終的なテスト版。今回の改造で他に影響が出ていないかの調査中に見つけたエフェクトブースターの不具合を修正しています。
CWPyは日々開発が進んでいて、大抵はテスト版がDownloadsのページに上がっています(
cardwirthpy_<日付8桁>.zip
というのがそうです)。もし他に不具合を見つけた場合、最新のテスト版では直っている可能性があるので、一度そちらでお試しいただけると助かります。それでも存在する不具合を見つけた場合は、ぜひまたお知らせください。できる限り対応させていただきます。
ありがとうございました。
-
repo owner - marked as minor
-
repo owner - changed status to resolved
競合の問題は解決しているので、完了にします。
- Log in to comment
ご迷惑をおかけして申し訳ありません。
ごく当たり前のWindows 7環境で音が出ないというのは明らかにおかしいですね。サウンドドライバとの相性の問題などでしょうか?
私個人としては、Bluetoothのヘッドフォンで時折何度起動しても音が鳴らなくなったような経験があります。また、これはCWPyでなく別のソフトの話なのですが、VirtualMIDISynthのような音声周りに手を加えるソフトがインストールされている環境で正しく音が鳴らなくなった事があります。
お手数をおかけしますが、次の事を確認していただけないでしょうか。
CardWirthPy.exe
のあるフォルダに「bass.dll
」「bassmidi.dll
」の2つのファイルが入っているか。CardWirthPy/Data/Skin/Classic/Bgm
及びCardWirthPy/Data/Skin/Classic/Sound
の各フォルダに、音声ファイル(*.mid
,*.ogg
)が入っているか。CardWirthPy/Data/SoundFont
のフォルダ内にTimGM6mb.sf2
ファイルが入っているか。ファイルがあるかといった事柄については、普通にダウンロードして普通に解凍した場合には入っているはずなのですが、解凍時にアンチウィルスソフトに
bass.dll
のようなファイルが消されてしまうというような事も考えられるかもしれませんので、お手数ですがご確認いただけないでしょうか。