wav文件的快速规范化程序无法正常工作

时间:2017-08-01 10:05:11

标签: c# naudio

我使用naudio在c#中编写了一个快速波形文件规范化器。

目前它锁定线程并创建1 KB文件。 sm是文件的最高峰

using (WaveFileReader reader = new WaveFileReader(aktuellerPfad))
{
    using (WaveFileWriter writer = new WaveFileWriter("temp.wav", reader.WaveFormat))
    {
        byte[] bytesBuffer = new byte[reader.Length];
        int read = reader.Read(bytesBuffer, 0, bytesBuffer.Length);
        writer.WriteSample(read *32768/sm);
    }
}

1 个答案:

答案 0 :(得分:3)

您需要在音频缓冲区中进行数学运算以规范化信号。规范化步骤将是:

一个。像你一样读取音频缓冲区。 (虽然,我更喜欢大块阅读。)

    byte[] bytesBuffer = new byte[reader.Length];
    reader.Read( bytesBuffer, 0, bytesBuffer.Length );

湾计算乘数值。有不同的方法来计算价值。我不知道你是怎么计算但看起来它的值是32768 / sm。我将乘数表示为“mul”。

℃。现在迭代缓冲区并将值乘以乘数。

  for ( int i = 0; i < bytesBuffer.Length; i++ )
  {
      bytesBuffer[i] = bytesBuffer[i] * mul;
  }

d。最后,将样本写入文件。

writer.WriteSamples( bytesBuffer, 0, bytesBuffer.Length );