C#使用NAudio转换wav文件

时间:2014-05-02 11:27:00

标签: c# audio audio-streaming naudio

我有一个WAV文件,其中2 ^ 16的值介于0到2之间。 我想将它更改为2 ^ 8个值......这意味着它将拥有更少的信息,但占用的空间更少。

我有转换公式,但我不知道如何访问数据。

我已经阅读了以下文件:

 wave = new NAudio.Wave.WaveChannel32(new NAudio.Wave.WaveFileReader(open.FileName));

 while (wave.Position < wave.Length)
   {
    read = wave.Read(buffer,0,16348); 
   }

现在我可以使用wave或缓冲区。

我如何修改波形有2 ^ 8?我想传递每个值并转换它..但我不知道如何访问转换的值。

例如,如果我有一个代表wav文件的浮点数组,我将知道如何继续。

1 个答案:

答案 0 :(得分:2)

要访问数据,请使用阅读器的Read方法:

var myReader = new WaveFilereader(filename);
int bytesRead = 0;
var readChunck = new byte[1024];
do
{
   //Read 1024 bytes at a time, will return 0 when there are no more bytes to Read
   bytesRead = myReader.Read(readChunk, 0 , readChunk.length );

   //Process the bytes here

}
while(bytesRead != 0)

或者,您只需使用媒体基础重采样器重新采样音频,即可让您的生活更轻松。您可以使用Media Foundation resampler对音频进行下采样,方法如下:

   //Read 2-channel Audio with sample rate 44.1Khz 
    var myReader = new WaveFileReader(filename); 

    //New Waveformat has 2-channels and sample rate 22KHz
    var myOutputFormat = new WaveFormat(22000,2); 

    //Resample
    var resampledAudio = new MediaFoundationResampler(myReader, myOutputFormat)  
                                                     { ResamplerQuality = 60 });

有关音频转换的详细信息,请参阅THIS