3

次のコードを使用して、Wasapi からサウンドを正常にキャプチャしました。

IWaveIn waveIn = new WasapiLoopbackCapture();
waveIn.DataAvailable += OnDataReceivedFromWaveOut;

私が今しなければならないことは、インメモリ データをpcm8000 のサンプル レートと 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;
4

1 に答える 1