2011-07-18 16 views
2

オーディオをCaptureBufferに録音しましたが、wavファイルに保存する方法がわかりません。私はこれを試しましたが(http://www.tek-tips.com/faqs.cfm?fid=4782)、動作しませんでした。または正しく使用しませんでした。誰かがこれを解決する方法を知っていますか?サンプルコードは非常に高く評価されます。DirectSound CaptureBufferの内容をC#のWAVファイルに書き込む

+0

:次に、あなたは、単に

に生キャプチャしたデータを書き込むことができますここでは、WaveFileWriterを使用する方法について、いくつかの簡単なコード例を示します。どのような種類のサンプルレート/ビットフォーマットを使ってデータを記録していますか? – JacobJ

+0

私はそのリンクからStartRecord()関数を使用しています。実際に私は以前は音で働いたことがないので、私はここで少し混乱しています。 –

+0

私は、そのリンクのコードを新しいライブラリにコピーしました。私のプログラムからこのライブラリへの参照を追加しました。それから、クラス "SoundRec"のオブジェクトを宣言し、それを使用しようとしました。しかし、何とか私はそれを実行するたびに、プログラムはちょうどフリーズします。 –

答えて

4

WAVファイルは、2つの主要な「チャンク」からなるRIFFファイルです。最初のものはフォーマットチャンクで、オーディオのフォーマットを記述します。これは、どのサンプルレート(たとえば44.1kHz)、どのビット深度(たとえば16ビット)、いくつのチャンネル(モノラルまたはステレオ)で録音されますか。 WAVは圧縮フォーマットもサポートしていますが、圧縮されたオーディオを録音する可能性は低いので、レコードバッファにはPCMオーディオが含まれます。

次に、データチャンクがあります。これはWAVファイルの一部で、キャプチャバッファに実際のオーディオデータが含まれています。これは、形式チャンクで記述された形式でなければなりません。

NAudioプロジェクトの一部として、私はWaveFileWriterクラスを作成して、WAVファイルの作成を簡単にしました。キャプチャされたオーディオのフォーマットを記述するWaveFormatを渡します。 。コードはサンプルデータの8ビットモノラル形式に非常に依存していることを

WaveFormat format = new WaveFormat(16000, 16, 1); // for mono 16 bit audio captured at 16kHz 
using (var writer = new WaveFileWriter("out.wav", format) 
{ 
    writer.WriteData(captureBuffer, 0, captureBuffer.Length); 
} 
関連する問題