簡體   English   中英

Naudio - 將32位wav轉換為16位wav

[英]Naudio - Convert 32 bit wav to 16 bit wav

我一直在嘗試將32位立體聲wav轉換為16位單聲道wav。 我使用naudio捕獲聲音我認為只使用四個更重要的字節中的兩個將起作用。

這是DataAvailable實現:

void _waveIn_DataAvailable(object sender, WaveInEventArgs e)
{
     byte[] newArray = new byte[e.BytesRecorded / 2];
     short two;
     for (int i = 0, j = 0; i < e.BytesRecorded; i = i + 4, j = j + 2)
     {
          two = (short)BitConverter.ToInt16(e.Buffer, i + 2);


          newArray[j] = (byte)(two & 0xFF);
          newArray[j + 1] = (byte)((two >> 8) & 0xFF);
     }
     //do something with the new array:
}

任何幫助將不勝感激!

我終於找到了解決方案。 我只需將轉換后的值乘以32767並將其轉換為short:

void _waveIn_DataAvailable(object sender, WaveInEventArgs e)
{
    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);
    }
}

32-bit樣本可高達4,294,967,295 16-bit樣本可高達65,536 因此,您必須縮小32-bit樣本以適應16-bit樣本的范圍。 或多或少,你正在做這樣的事......

SixteenBitSample = ( ThirtyTwoBitSample / 4294967295 ) * 65536;

編輯:

對於立體聲到單聲道部分,如果兩個聲道具有相同的數據,只需轉儲其中一個,否則,將波形一起添加,如果它們超出樣本范圍( 65,536 ),則必須縮放它們類似於上面的等式。

希望有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM