Managed DirectSoundを使ってマイクから音声を録音してみる1
chakemiです。
今日は、DirectSoundを使ってマイクから音声を録音に挑戦してみましたが、オーディオのキャプチャがうまくできませんでした。。。(T T)
開発環境:
WindowsXP SP3
VisualC#2010Express
DirectSoundを使ってマイクからの入力を録音するには、基本的には、waveファイルを再生と逆をやればいいはずと踏んでます。
ざっくりと流れだけ纏まると、
まずは、WaveFormatを生成する。
waveFormat = new WaveFormat(); waveFormat.Channels = 1; waveFormat.FormatTag = WaveFormatTag.Pcm; waveFormat.BitsPerSample = 16; waveFormat.SamplesPerSecond = 44100; waveFormat.BlockAlign = (short)(waveFormat.Channels * (waveFormat.BitsPerSample / (short)8)); waveFormat.AverageBytesPerSecond = waveFormat.BlockAlign * waveFormat.SamplesPerSecond;
次に、Device情報から、Captureオブジェクトの作成。
device = new Device(); device.SetCooperativeLevel(this, CooperativeLevel.Priority); captureDevice = new CaptureDevicesCollection(); DeviceInformation deviceInfo = captureDevice[1]; capture = new Capture(deviceInfo.DriverGuid);
captureBufferDescription構造体に必要な情報を入力する。
captureBufferDescription = new CaptureBufferDescription(); captureBufferDescription.BufferBytes = waveFormat.AverageBytesPerSecond / 5; captureBufferDescription.WaveMapped = false; captureBufferDescription.ControlEffects = false; captureBufferDescription.Format = waveFormat;
RIFF形式のヘッダ情報を書き込んで、
BinaryWriter binaryWriter = new BinaryWriter(new FileStream(@"C:\test_ds_rec.wav", FileMode.Create)); char[] Riff = { 'R', 'I', 'F', 'F' }; char[] Wave = { 'W', 'A', 'V', 'E' }; char[] Fmt = { 'f', 'm', 't', ' ' }; char[] Data = { 'd', 'a', 't', 'a' }; short padding = 1; int formatLength = 0x10; int length = 0; short shBytePerSample = 2; binaryWriter.Write(Riff); binaryWriter.Write(length); binaryWriter.Write(Wave); binaryWriter.Write(Fmt); binaryWriter.Write(formatLength); binaryWriter.Write(padding); binaryWriter.Write(waveFormat.Channels); binaryWriter.Write(waveFormat.SamplesPerSecond); binaryWriter.Write(waveFormat.AverageBytesPerSecond); binaryWriter.Write(shBytePerSample); binaryWriter.Write(waveFormat.BitsPerSample); binaryWriter.Write(Data); binaryWriter.Write((int)0);
別スレッドを立ち上げて、CaptureBuffer.Readでストリームバッファを
書き込み続ければいけるんじゃないかって感じで、今この辺です。。。
グダグダですみません。
次回までに、完成させたいと思います。
コメント 0