我使用以下代码成功地从 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;