トップページ > 記事閲覧
音声を途中から再生開始した時にノイズが乗る
名前:てらす 日時: 2014/05/01 06:54

タイトルの通り、音声ファイルをPlaySoundMemの第3引数にFALSEを渡して 途中から再生した時に、「プツッ」と言ったノイズが乗ります。 ChangeVolumeSoundMemで音量を0にしてもノイズが乗って困っています。 また、SetLoopPosSoundMemでループ位置を指定してループ再生しても似たようなノイズが乗ります。 こちらは音量0ならノイズは聞こえないので、音声ファイルが原因のような気もしますが・・・。 両者とも傾向としては低音が強いタイミングから再生を開始(ループ開始)すると、ノイズが強く出るようです。 (逆に低音の無いタイミングならノイズが乗らないこともあります) これらは仕様ということで諦めるしかないのでしょうか? それとも改善する手立てはあるのでしょうか? よろしくお願いします。 以下は現象を確認したテストコードです。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode( TRUE ); if( DxLib_Init() == -1 ){ return -1; } SetCreateSoundDataType( DX_SOUNDDATATYPE_FILE ); int soundHandle = LoadSoundMem( "test.wav" ); SetLoopPosSoundMem( 8000, soundHandle ); ChangeVolumeSoundMem( 128, soundHandle ); PlaySoundMem( soundHandle, DX_PLAYTYPE_LOOP ); WaitKey(); //ここでループまで待った時ノイズ StopSoundMem( soundHandle ); WaitKey(); ChangeVolumeSoundMem( 0, soundHandle ); PlaySoundMem( soundHandle, DX_PLAYTYPE_LOOP, FALSE ); //音量0のはずなのにノイズ WaitKey(); DxLib_End(); return 0; } ※WAVとOGGでテストしましたが両方とも現象が起きました。 環境は Windows 7 Home Premium 64-bit (6.1, Build 7601) Service Pack 1 Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz (8 CPUs), ~3.4GHz 8192MB RAM NVIDIA GeForce GTX 660 (Driver Version: 9.18.13.3523) Visual Studio 2010 Professional (Version: 10.0.40219.1 SP1Rel) ※ディスプレイ2台です。 テストに使用した音声ファイルはまだ非公開のものなので 申し訳ありませんが、どこかへアップロードするといったことは出来ません・・・ メールなどでの個人的なやりとりなら問題ないので、必要でしたらお申し付けください。 ※追記 DXライブラリのバージョンを記載するのを忘れいていました。 バージョンは4月25日の3.12です。 また、タイトルと直接は関係なくなってしまうのですが、3.11e(fでは未確認です)までできていた とあるサウンドハンドルの音声を再生中に同一のサウンドハンドルの音声を再生(同じ音声を2重に再生) をすることが出来なくなていました。 過去に似た現象が発生した際はバグとして修正されており この現象は管理人さんの意図した動きではないと思いますので、合わせて報告させていただきます。
メンテ

Page: 1 |

Re: 音声を途中から再生開始した時にノイズが乗る ( No.1 )
名前:てらす 日時:2014/05/01 07:44

>音声を2重に再生出来ない の部分は私の手違いによるものでした・・・ お騒がせして申し訳ございませんでした。
メンテ
Re: 音声を途中から再生開始した時にノイズが乗る ( No.2 )
名前:softya(ソフト屋) 日時:2014/05/01 11:03

自分で音声編集ソフトで途中でぶった切った音声ファイルを編集して作ってみて、それで同じノイズが乗るのならDXライブラリの責任ではないです。 誤魔化すなら音量をフェードインするぐらいしか思いつきませんが。
メンテ
Re: 音声を途中から再生開始した時にノイズが乗る ( No.3 )
名前:てらす 日時:2014/05/01 13:46

>softya(ソフト屋)さん 返信ありがとうございます。 >音声編集ソフトで途中でぶった切った音声ファイル なるほどと思い、試してみたら確かにループ時はノイズが乗っていました。 そして切った音声ファイルの波形を確認してみたところ、ファイルの終わりと始まりで位相に違いがあったため、 それがおそらく原因だろうという見当がつきました。 ループについては音声ファイルを調整して対応します。 ただ、やはり音量0の状態で再生した時は、使用したほとんどのソフトでノイズが乗ることはありませんでした。 しかし、使用したソフトの中で「聞々ハヤえもん」で直前に音量0以外で再生しており、それを停止し、音量0の状態にした後再生した場合のみ ノイズが乗る現象が起きました。 これはと思い、試してみたところDXライブラリの時も同じ条件でした。 >誤魔化すなら音量をフェードインする そこが困っているポイントでした。途中再生時にフェードインしようにも音量0でノイズが出てしまうのでフェードインに出来ないのです。 しかし、どうやら前回再生中に停止直前の音量を0にしておき、少しウェイトをかけた後に停止 とすれば、次回途中再生時にノイズが乗ることなく再生開始出来そうです。 softya(ソフト屋)さんのヒントからなんとか解決の糸口が見えました。 ありがとうございます。
メンテ
Re: 音声を途中から再生開始した時にノイズが乗る ( No.4 )
名前:てらす 日時:2014/05/02 00:43

途中再生開始時のノイズは、StopSoundMemをラップし、一度音量0にしてから1フレーム待った後に 停止するようにしたところ改善されました。 ループのノイズについては波形を調整することで完全にノイズを消すことが出来ました。 ただ、私の環境では解決することが出来ましたが、以後StopSoundMemをそのまま使うことが出来ないとなると 他の方で不都合な場合が出てくると思いますので、スレッドを閉じるのは管理人さんの見解を待ってからにします。
メンテ
Re: 音声を途中から再生開始した時にノイズが乗る ( No.5 )
名前:管理人 日時:2014/05/03 22:56

手元の環境では DirectSound を使用した場合は現象が発生し、 XAudio を使用した場合は現象は発生しませんでした( ノイズは鳴りませんでした ) とりあえず、仕様としたいと思います 音量を下げてから停止するという方法は有効ですが、これを自動化しようとすると それなりに内部処理が複雑になる上に今後使用率が上がる XAudio では何もしなくても 現象が発生しないとなると内部処理の複雑化に対する恩恵が少ないので・・・
メンテ
Re: 音声を途中から再生開始した時にノイズが乗る ( No.6 )
名前:てらす(解決) 日時:2014/05/04 00:14

>管理人さん 返信ありがとうございます。 私の方でもSetEnableXAudioFlag( TRUE )として明示的にXAudioを使用する設定にしたところ 現象が起きないことを確認しました。 SetEnableXAudioFlag( FALSE )は試したことがありましたが、 DxLib.hのSetEnableXAudioFlagの説明ではデフォルトでTRUEとなっていたので 明示的にTRUEとしてやるのは盲点でした。 Log.txtを流し読みしかしていないことが原因でしたね・・・申し訳ございません。 ゲームの対応範囲が少し狭まりそうですが、XAudioを使用する設定で対応しようと思います。 ありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存