トップページ > 過去ログ > 記事閲覧
先日修正されSetLoopPosSoundMem()について
名前:唐須大海 日時: 2013/03/03 20:08

こんにちは、唐須大海です。 日頃よりお世話になっております。 先日、SetLoopPosSoundMem()の不具合が修正された事を知り、修正版をダウンロードしてリビルドを行いました。 その結果、突然中断することは無くなったのですが、SetLoopPosSoundMem()を利用した際にPlaySoundMem()で音が鳴らなくなってしまいました。 (小さくぶつ切りのノイズのような音は鳴っていました。) なお、SetLoopPosSoundMem()を使わない場合は正常に再生される模様です。 ほぼサンプルそのままですが、以下が実際に動かしたプログラムです。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int SoundHandle ; // DXライブラリ初期化処理 ChangeWindowMode( TRUE ); if( DxLib_Init() == -1 ) return -1; // 音声をロードする SoundHandle = LoadSoundMem( "test.wav" ) ; // ループ位置を音声の先頭から20秒後にセットする SetLoopPosSoundMem( 20000, SoundHandle ) ; // 音声をループ再生する PlaySoundMem( SoundHandle, DX_PLAYTYPE_LOOP ) ; // キーの入力待ち WaitKey() ; // DXライブラリ使用の終了処理 DxLib_End() ; // ソフトの終了 return 0 ; } どうかご確認ください。

Page: 1 |

Re: 先日修正されSetLoopPosSoundMem()について ( No.1 )
名前:管理人 日時:2013/03/03 21:48

載せて頂いたプログラムを手元の環境( Win7 64bit )で実行してみましたが、 問題なく再生されました( test.wav は 20秒以上の長さがある音ファイルですよね? ) 少し前に3Dサウンド機能を導入するための XAudio2 が使用できる場合は XAudio2 を 使用するようにサウンドの処理を変更しましたので、その辺りに原因があると思います よろしければ不具合が発生した際の Log.txt をこちらの掲示板に貼り付けて頂けないでしょうか? あと、DxLib_Init の前に SetEnableXAudioFlag( FALSE ) ; という記述を追加することで 従来通りの DirectSound によるサウンド処理を行うようになりますので、よろしければ お試しになってみてください m(_ _)m あと、一応現在の最新版ライブラリのURLを貼っておきます( サウンドの変更はありませんが本日も更新がありました ) http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
Re: 先日修正されSetLoopPosSoundMem()について ( No.2 )
名前:唐須大海 日時:2013/03/04 23:24

お返事を頂きありがとうございます。 先ほどSetEnableXAudioFlag( FALSE )を呼び出したところ、正常にループ再生されることを確認しました。 test.wavは1分以上の長さがあるファイルでした。 完全な無音と言うよりも、ノイズのようなブツブツ音が鳴っていたように感じます。 なお、こちらの環境はWindows8 64bitで、VisualStudioは2012を利用しております。 また、別の環境でビルドした知人のプログラムは、ループ再生に支障が出ていなかったことも追記させていただきます。 それでは、以下に不具合発生時点のログを張り付けておきます。 0:システムの情報を出力します 0: DXライブラリ Ver3.10b 15: 論理プロセッサの数 : 8 15: OS Windows ( Build 9200 ) 115: CPU動作速度:大体2.06GHz 140: MMX命令を使用します 141: SSE命令が使用可能です 142: SSE2命令が使用可能です 144: CPUベンダ:GenuineIntel 151: CPU名: Intel(R) Core(TM) i7-3632QM CPU @ 2.20GHz 152:COMの初期化... 成功しました 156:メモリ総量:4096.00MB 空きメモリ領域:4096.00MB 159:タイマーの精度を検査します 160:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 162: パフォーマンスカウンターを使用します タイマー精度 : 2143.569000 KHz 164: ソフトの二重起動検査... 二重起動はされていませんでした 168:ウインドウクラスを登録します... 登録に成功しました 171:ウインドウモード起動用のウインドウを作成します 174:ウインドウの作成に成功しました 175:ウインドウを表示します 183:IMEを無効にしました 185:ウインドウスタイルをウインドウモード用に変更します... 完了 210:DirectInput関係初期化処理 212: XInput DLL の読み込み中... 成功 219: DirectInput7 の取得中... 成功 245: 引き続き初期化処理... 初期化成功 248: ジョイパッドの初期化... 254: ジョイパッドの初期化は正常に終了しました 256: マウスデバイスの初期化... 初期化成功 259: キーボードデバイスの初期化... 初期化成功 263:DirectInput 関連の初期化は正常に終了しました 265:XAudio2 の初期化を行います 269: XAudio2_8.dll を使用します 270: XAudio2 インターフェースの取得と初期化を行います.... 成功 Ver2.8 296:XAudio2 の初期化は正常に終了しました 301:DirectDraw オブジェクトの取得を行います.... 成功 308:引き続き初期化処理... 初期化に成功しました 354:IDirect3D9Ex オブジェクトを取得します.... 成功 361:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します 645:成功 648:Driver:nvumdshim.dll Description:Intel(R) HD Graphics 4000 650:画面のフォーマットは D3DFMT_X8R8G8B8 です 651:Zバッファのフォーマットは D3DFMT_D16 です 653:16bit カラーフォーマットは D3DFMT_R5G6B5 です 655:32bit カラーフォーマットは D3DFMT_X8R8G8B8 です 656:アルファ付き 16bit カラーフォーマットは D3DFMT_A4R4G4B4 です 658:アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 660:アルファテスト用 16bit カラーフォーマットは D3DFMT_A1R5G5B5 です 662:アルファテスト用 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 664:DXT1テクスチャフォーマットはD3DFMT_DXT1 です 665:DXT2テクスチャフォーマットはD3DFMT_DXT2 です 667:DXT3テクスチャフォーマットはD3DFMT_DXT3 です 669:DXT4テクスチャフォーマットはD3DFMT_DXT4 です 671:DXT5テクスチャフォーマットはD3DFMT_DXT5 です 673:描画用 16bit カラーフォーマットは D3DFMT_R5G6B5 です 675:描画用 32bit カラーフォーマットは D3DFMT_X8R8G8B8 です 677:描画用アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 678:描画用ABGR整数16ビット型カラーフォーマットは D3DFMT_A16B16G16R16 です 680:描画用ABGR浮動小数点16ビット型カラーフォーマットは D3DFMT_A16B16G16R16F です 682:描画用ABGR浮動小数点32ビット型カラーフォーマットは D3DFMT_A32B32G32R32F です 683:描画用1チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8R8G8B8 です 685:描画用1チャンネル整数16ビット型カラーフォーマットは D3DFMT_G16R16 です 687:描画用1チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_R16F です 689:描画用1チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_R32F です 691:描画用2チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8B8G8R8 です 693:描画用2チャンネル整数16ビット型カラーフォーマットは D3DFMT_G16R16 です 695:描画用2チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_G16R16F です 697:描画用2チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_G32R32F です 699:一度に描画できるプリミティブの最大数:1048575 702:対応している最大頂点インデックス:16777215 704:同時にレンダリングできるバッファの数:4 706:最大テクスチャサイズ 幅:8192 高さ:8192 708:テクスチャステージテンポラリレジスタ:使用可 710:減算合成のハードウェア対応:ネイティブ 712:ハードウェア頂点シェーダーバージョンコード:300 714:エミュレーション頂点シェーダーバージョンコード:エミュレーション無し 716:ピクセルシェーダーバージョンコード:300 739:バックバッファロック転送の時間:2096nsec 一時的な描画可能バッファを使用した転送の時間:1683nsec 742:バックバッファロックを使用しません 744:Zバッファを作成します.... 成功 812:プログラマブルシェーダーを使用します 893:フォントの初期化を行います 903:フォントの初期化は正常に終了しました 928:文字コードバッファの初期化を行います... 完了しました 17933:ウインドウを閉じようとしています 17943:ウインドウが破棄されようとしています 17946:ソフトを終了する準備が整いました 17953:フォントの初期化を行います 17956:フォントの初期化は正常に終了しました 17975:Direct3DDevice9 の解放 2 17995:Direct3D9 DLL の解放 1 17999:DirectInput 関連の終了処理... 完了 18104: 18106:Alloc memory dump 18108: Total size:0(0.000kb) Alloc num:0 18110:
Re: 先日修正されSetLoopPosSoundMem()について ( No.3 )
名前:管理人 日時:2013/03/16 15:07

お待たせしております。 一点確認させてください。 1分以上ある長いサウンドファイルでもSetLoopPosSoundMem()を使用しなければ 問題なく再生されるのでしょうか?
Re: 先日修正されSetLoopPosSoundMem()について ( No.4 )
名前:唐須大海 日時:2013/03/24 00:14

お返事が遅れてしまい申し訳ありません。 十分に長いサウンドファイルを再生した場合、SetLoopPosSoundMem()さえ使用しなければ何の問題もなく再生されております。 SetLoopPosSoundMem()を設定した際、SetEnableXAudioFlag( FALSE )を呼び出さないと正常に再生されない、といった形です。 なお、これを再現するまでに ・数回ループしたのち、ループポイントとは異なる短区間をずっとループし続ける ・LoadSoundMem()でmp3ファイルを読み込んだ時VisualStudioでは例外で終了する といった挙動を確認しました。  後者については「msaud32_divx.acm」というコーデックに問題があったようでして、  こちらを利用するGOM Playerをアンインストールすることで正常に動作することを確認しました。  (なお、VisualStudioを通さずアプリケーションを起動すると、mp3ファイルも正常に再生されました。) なお、これに際してmp3の正常なループ再生は確認されたもののwavファイルは無理なようでした。 また、友人の環境(Windows7 64bit)にてビルドしたところ、このような問題は発生しないようでした。
Re: 先日修正されSetLoopPosSoundMem()について ( No.5 )
名前:管理人 日時:2013/03/24 21:33

ご返答ありがとうございます 私の環境でも現象が再現しました 修正版をアップしましたので、よろしければこちらを お試しになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) 現象発生の条件は   「SetCreateSoundDataType( DX_SOUNDDATATYPE_MEMNOPRESS ) ; で読み込んだ    サウンドハンドルに対して SetLoopPosSoundMem を使用する」 でした 私の環境でなかなか再現しなかったのは5分くらいのサウンドファイルをテストに 使用していたために   「3分以上のサウンドファイルは内部で自動的に    SetCreateSoundDataType( DX_SOUNDDATATYPE_MEMPRESS ) ; の設定で読み込まれる」 というDXライブラリの仕様に引っかかって条件外になってしまっていたためでした なので、mp3が正常にループ再生されたというのは、恐らく3分以上の長さが あったからだと思います 不正な値を XAudio2 に渡していたのが不具合の原因なので、ご友人さんの環境で正常に 動作したのは使用しているサウンドデバイスのドライバが不正な値が渡された場合は 何も処理されないようになっているのかもしれません あと、mp3の再生はご存知の通り正常に動作するかどうかが外部デコーダに依存しますので よろしければ外部デコーダに頼らずに済む Ogg Vorbis( 拡張子 ogg )形式の使用をご検討ください m(_ _;m > ・数回ループしたのち、ループポイントとは異なる短区間をずっとループし続ける こちらの現象は私の環境では発生しませんでした どのくらいの頻度で発生したのでしょうか?
Re: 先日修正されSetLoopPosSoundMem()について ( No.6 )
名前:唐須大海 日時:2013/05/09 02:39

対応いただきありがとうございました。 長く返答が遅れてしまいまして申し訳ありません。 先ほど確認したところ、修正版で正常に動作することを確認しました。 >なので、mp3が正常にループ再生されたというのは、恐らく3分以上の長さが >あったからだと思います こちらも確認したところmp3ファイルは3分以上のファイルを使っていたため正常な動作をしていたようです。 また、ご忠告頂いたように今後はoggの利用も念頭に入れて開発を行っていきたいと思います。 >> ・数回ループしたのち、ループポイントとは異なる短区間をずっとループし続ける >こちらの現象は私の環境では発生しませんでした >どのくらいの頻度で発生したのでしょうか? こちらは、不具合の再現性をとることができませんでした。 頻度もまれであり、曲の最初や最後ではなく唐突に発生したため、発生状況は特定できておりません。 私の開発しているアプリケーションでは、長時間起動中に突然BGMのループが短区間に縮んでしまうといった形でした。 短区間でのループを無視して長時間再生していると、再生区間が正常なものに戻ったりと、原因の予測が取りづらい現象でした。 心当たりとしては、PlaySoundMem( BGMHandle , DX_PLAYTYPE_LOOP , FALSE )でメモリからBGMのループ再生を行い、 StopSoundMem(BGMHandle)で曲を一時停止、再び上の関数で再生したしばらく後に発生していたように感じます。 確実ではありませんが、参考になれば幸いです。
Re: 先日修正されSetLoopPosSoundMem()について ( No.7 )
名前:管理人 日時:2013/05/12 03:27

ご情報ありがとうございます 参考にさせて頂きます

Page: 1 |