Waveの録音再生を簡単に出来ないかとさがしたら、みつかったのがこの
WaveIF。んで、C#の資料が少なかったのでメモ書き。
録音するときは
axWaveIn_OnDoneイベントでデータを保存する。
WaveIF。んで、C#の資料が少なかったのでメモ書き。
録音するときは
axWaveIn_OnDoneイベントでデータを保存する。
private void rec(){ axWaveIn.Open(); for (short i = 0; i < axWaveIn.NumBuffers; i++) { axWaveIn.AddBuffer(i); } axWaveIn.Start(); } private void axWaveIn_OnDone(object sender, AxWaveInterfaceLib._DWaveInEvents_OnDoneEvent e) { short BufferIndex = e.bufferIndex; long BytesRecorded = e.bytesRecorded; //' データが録音されていれば、 if (BytesRecorded > 0) { // 録音されたデータを取得します。 // .Netでは、GetDataが使えないのでこの取り方 int bufferNum = axWaveIn.GetBufferAddress(e.bufferIndex); wifGetDataAny(recBuffer, bufferNum, e.bytesRecorded); if (Information.UBound(recBuffer) > BytesRecorded - 1) { Array.Resize<byte>(ref recBuffer, (int)BytesRecorded - 1); } // テンポラリ、モニタ保存 FileStream fs = null; fs = null; fs = new System.IO.FileStream(writeFile, System.IO.FileMode.Append); // データ保存 fs.Write(recBuffer, 0, recBuffer.Count()); fs.Close(); } if (!e.bStopped) { axWaveIn.AddBuffer(BufferIndex); } }
と、こんな感じで録音できる。以外と時間がかかった。
次に、再生のソース。
イベント時に再生用のバッファを追加するのを忘れずに。
次に、再生のソース。
イベント時に再生用のバッファを追加するのを忘れずに。
private void rec(){ axWaveOut.Open(); axWaveOut.Pause(); for (int bufCnti = 0; bufCnti < axWaveOut.NumBuffers; bufCnti++) { SizeToPlay = axWaveOut.BufferSize; Array.Resize(ref buffer2, SizeToPlay); buffer2 = playData.Take(SizeToPlay).ToArray(); playData = playData.Skip(SizeToPlay).ToArray(); axWaveOut.SetData(buffer2, (short)bufCnti); axWaveOut.AddBuffer((short)bufCnti, SizeToPlay); } axWaveOut.Restart(); } private void axWaveOut_OnDone(object sender, AxWaveInterfaceLib._DWaveOutEvents_OnDoneEvent e){ axWaveOut.SetData(buffer2, e.bufferIndex); axWaveOut.AddBuffer(e.bufferIndex, SizeToPlay); }
と、すごくざっくりしてるけどこんな感じで再生、録音できました。
0 件のコメント:
コメントを投稿