[英]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.