次のコードを使用して、Wasapi からサウンドを正常にキャプチャしました。
IWaveIn waveIn = new WasapiLoopbackCapture();
waveIn.DataAvailable += OnDataReceivedFromWaveOut;
私が今しなければならないことは、インメモリ データをpcm
8000 のサンプル レートと 16 ビット/サンプル モノでリサンプリングすることです。
ACMStream
録音されたオーディオは 32 ビット/秒であるため、この例をリサンプリングすることはできません。
このコードでバイトを 32 ビットから 16 ビットに変換しようとしましたが、毎回空白のオーディオしか得られません。
byte[] newArray16Bit = new byte[e.BytesRecorded / 2];
short two;
float value;
for (int i = 0, j = 0; i < e.BytesRecorded; i += 4, j += 2)
{
value = (BitConverter.ToSingle(e.Buffer, i));
two = (short)(value * short.MaxValue);
newArray16Bit[j] = (byte)(two & 0xFF);
newArray16Bit[j + 1] = (byte)((two >> 8) & 0xFF);
}
source = newArray16Bit;