2017-02-25 45 views
0

我有一个32位的wav阵列,我想将其转换为8位转换32位的wav阵列x比特

所以,我试图借此功能,其将32至16

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); 
    } 
} 

并将其修改为拍摄X位为目的地

private byte[] Convert32BitRateToNewBitRate(byte[] bytes, int newBitRate) 
    { 
     var sourceBitRate = 32; 

     byte[] newArray = new byte[bytes.Length/(sourceBitRate/newBitRate)]; 

     for (int i = 0, j = 0; i < bytes.Length; i += (sourceBitRate/8), j += (newBitRate/8)) 
     { 
      var value = (BitConverter.ToSingle(bytes, i)); 
      var two = (short)(value * short.MaxValue); 

      newArray[j] = (byte)(two & 0xFF); 
      newArray[j + 1] = (byte)((two >> 8) & 0xFF); 
     } 

     return newArray; 
    } 

我的问题是,我不知道如何将代码转换中的“for”循环,我试图调试它,但我不能完全弄清楚怎么运行的。

我在这里看到:simple wav 16-bit/8-bit converter source code?,它们除以256的值从16到8,我试图用256除以32至16获得,但它没有工作

 for (int i = 0, j = 0; i < bytes.Length; i += sourceBitRateBytes, j += newBitRateBytes) 
     { 
      var value = BitConverter.ToInt32(bytes, i); 
      value /= (int)Math.Pow(256, sourceBitRate/newBitRate/2.0); 

      var valueBytes = BitConverter.GetBytes(value); 

      for (int k = 0; k < newBitRateBytes; k++) 
      { 
       newArray[k + j] = valueBytes[k]; 
      } 

回答

0

的for循环仍然在以下位置使用16位:

  • short.MaxValue。改为使用byte.MaxValue
  • 通过分配两个字节[j][j+1]。仅分配一个字节。

我没有程序的其余部分,也没有示例数据,所以我很难尝试。但我要说以下听起来是正确的

for (int i = 0, j = 0; i < bytes.Length; i += (sourceBitRate/8), j += (newBitRate/8)) 
{ 
    var value = (BitConverter.ToSingle(bytes, i)); 
    var two = (byte)(value * byte.MaxValue); 

    newArray[j] = two; 
} 

请注意,这适用于8位而已,所以newBitRate必须是8,否则它不能正常工作。它可能不应该是该方法的参数。

+0

我可以在背景中听到很多静态的声音,我想我们需要了解他们使用的代码。 – user779444

+0

我看到http://stackoverflow.com/questions/6494505/simple-wav-16-bit-8-bit-converter-source-code他们转换除以256 – user779444

+0

一个问题可能是,它是从-128到你可以尝试127和'sbyte'而不是byte.MaxValue吗? –