PCオーディオのライン入力の信号をWaveInでキャプチャし、そのままWaveOutに渡してPCオーディオのスピーカから音を出してみた。
FormのLoadイベント内で、WaveIn、WaveOutの初期化
1 2 3 4 5 6 7 8 9 10 11 12 13 |
waveIn = new WaveIn() { DeviceNumber = inno, }; waveIn.DataAvailable += wavein_dataavailable; waveIn.WaveFormat = new WaveFormat(48000, 2); waveOut = new WaveOut() { DeviceNumber = outno, }; bufferedwaveprovider = new BufferedWaveProvider(waveIn.WaveFormat); bufferedwaveprovider.DiscardOnBufferOverflow = true; waveOut.Init(bufferedwaveprovider); |
waveinのcallbackでwaveinのbufferからbufferwaveproviderに、キャプチャしたデータをそのまま渡す。
1 2 3 4 |
private void wavein_dataavailable(object sender, WaveInEventArgs e) { bufferedwaveprovider.AddSamples(e.Buffer, 0, e.BytesRecorded); } |
スタートボタンで、waveinとwaveoutを起動
1 2 3 4 5 |
private void button1_Click(object sender, EventArgs e) { waveIn.StartRecording(); waveOut.Play(); } |
非常に簡単にできてしまった。 winmm.dllを直接使ってやった時は、相当時間がかかったけど、便利な世の中になったもんだ。
で、これだけでは意味がないので、キャプチャしたデータをFFT表示したりフィルターをかけてみたりしてみたい。