WaveOut API には、現在再生中のバッファのサイズに関する内部制限がありますか? つまり、非常に小さなバッファーを提供すると、スピーカーに再生されるサウンドに何らかの影響がありますか。小さなバッファで正弦波を生成して再生すると、非常に奇妙なノイズが発生します。ピークのようなもの、または「BUMP」。
完全なストーリー:
洞音信号をリアルタイムで生成できるプログラムを作りました。可変パラメータは、Frequency と Volume です。プロジェクトの要件は、最大レイテンシを 50 ミリ秒にすることでした。したがって、プログラムは、オーディオ信号の周波数を手動で調整できる正弦波信号をリアルタイムで生成できなければなりません。
Windows WaveOut API、C#、および P/invoke を使用して API にアクセスしました。
サウンド バッファが 1000 ミリ秒の場合、すべて正常に動作します。遅延要件に従ってバッファを 50 ミリ秒に最小化すると、特定の周波数ですべてのバッファの最後にノイズまたは「バンプ」が発生します。生成されたサウンドの形式が正しくない (チェックしたところ、そうではない) のか、オーディオ チップで何かが発生したのか、初期化と再生に遅延が発生したのか、私にはわかりません。
制作したオーディオを .wav ファイルに保存すると、すべてが完璧になります。
これは、私のコードに何らかのバグがあるか、オーディオ サブシステムに送信されるバッファ チャンクに制限があることを意味します。
WaveOut を最初に初期化する必要があることを知らない人のために、再生する必要があるバイト数と、再生する必要があるオーディオを含むメモリへのポインターを含む各バッファーのオーディオ ヘッダーを準備する必要があります。プレーヤーになります。
アップデート
ノイズは次の組み合わせで発生します 44100 SamplingRate、16 ビット、2 チャネル、50 ms バッファ、および生成された 201Hz、202Hz、203Hz、204Hz、205Hz ... 219Hz、220Hz、240 Hz の Sinus オーディオ信号は問題ありません
なぜこの 20 の差なのか、私にはわかりません。