• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DirectSoundのノイズについて)

DirectSoundのノイズについて

このQ&Aのポイント
  • DirectSoundを使用する際に、意図的な停止や音量調整が原因でノイズが発生することがあります。
  • ノイズの原因は、プライマリバッファに先行して書き込まれたゴミが残っているためと考えられます。
  • 解決策として、プライマリバッファに0を書き込む方法や、複数音再生時の途切れを防ぐ方法が必要です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ハードウェアの問題なので、解決するには「音のとめ方に気を使う」しかありません。 スピーカーの動作原理は「電磁石で、コーンを押したり引っ張ったりして、空気を振動させる」事により、電気信号を音にしています。 この時「音のとめ方が悪い」と、コーンが引っ張られた状態のままとか、コーンが押された状態のままで、音がとまります。 音は鳴ってませんが、スピーカーのコーンは「引っ張られた状態のまま」とか「押された状態のまま」とかになっているのです。 もちろん、運が良ければ「押されも引っ張られもしてない、中間の状態」のまま止まってる事もあります。 で、その状態で、別の音を鳴らし始めると「コーンが、押されも引っ張られもしてない、中間の状態に戻されてから、音が鳴り始める」のです。 すると、かなりの確率で「コーンが引っ張られた状態から、一気に中間の状態に戻る」とか「コーンが押された状態から、一気に中間の状態に戻る」って事が起きます。 スピーカーのコーンがそんな激しい動きをしたら、コーンの周囲にある空気が激しく振動します。 その「空気の激しい振動」は「人間の耳には、プチ、と言う音に聞こえる」のです。 音声再生をとめる場合は「コーンの動きが音になってしまうような急速なボリューム制御をしないように気を付けながらゆっくりとボリュームを0に絞る、と言う方法を用いてスピーカーのコーンをニュートラルの位置にしてから、音声の出力を止める」と言う工夫が必要です。 試してみると判りますが「波形がプラス側のピーク値に張り付いたままの音声データ」は、鳴らしても音がしません。なぜなら「スピーカーコーンが押された(または引っ張られた)状態のまま動かない」ので、音が出ません。 この状態で「波形がマイナス側のピーク値に張り付いたままの音声データ」を鳴らすと、一瞬だけ「プチ」と鳴り、それ以降は音がしません。 これは「スピーカーコーンが押された状態から引っ張られた状態(またはその逆の状態)に一瞬で動いた所為でプチと鳴って、それっきりコーンが動かない」からです。 そういった訳で、プチ音の原因は「音をとめた瞬間のスピーカーのコーンの位置がニュートラル位置じゃない」のが原因です。 プライマリバッファがそうの、サウンドバッファがどうの、ゴミがどうのって問題ではないのです。 原因は「音の止め方が悪いから」です。 なので「SetVolumeでイキナリ無音にする」とか「Stop()でいきなり止める」とか、スピーカーのコーンがニュートラルの位置に戻らないままの状態で音を止めてはいけません。 なお「一時停止」と「一時停止の解除」は、この限りではありません。なぜなら「音が止まった瞬間」と「音が再開した瞬間」では、スピーカーのコーンの位置がまったく変化しないからで、プチ音はしません。

関連するQ&A