NAudio:将Wav文件读为双数组

时间:2015-09-14 16:43:43

标签: c# audio wav naudio voice

假设我的WAV文件包含16位PCM,我如何将wav文件作为双数组读取:

 using (WaveFileReader reader = new WaveFileReader("myfile.wav"))
{
    Assert.AreEqual(16, reader.WaveFormat.BitsPerSample, "Only works with 16 bit audio");
    byte[] bytesBuffer = new byte[reader.Length];
    int read = reader.Read(bytesBuffer, 0, buffer.Length);
    // HOW TO GET AS double ARRAY
}

2 个答案:

答案 0 :(得分:2)

16位PCM是有符号整数编码。假设您想要在0和1之间的双精度数,您只需将每个样本读取为16位有符号整数,然后除以(双精度)32768.0;

var floatSamples = new double[read/2];
for(int sampleIndex = 0; sampleIndex < read/2; sampleIndex++) {
   var intSampleValue = BitConverter.ToInt16(bytesBuffer, sampleIndex*2);
   floatSamples[sampleIndex] = intSampleValue/32768.0;
}

请注意,立体声通道是交错的(左侧样本,右侧样本,左侧样本,右侧样本)。

这里的格式有一些很好的信息:http://blog.bjornroche.com/2013/05/the-abcs-of-pcm-uncompressed-digital.html

答案 1 :(得分:2)

只需在ToSampleProvider上使用WaveFileReader扩展方法,Read方法将float[]方法转换为浮点数。或者,使用AudioFileReader代替WaveFileReader,然后再次使用填充Read

float[]方法版本