我想从.wav文件中抽出一小段波形到屏幕。这是我到目前为止创建的代码:
NAudio.Wave.WaveFileReader wave = new NAudio.Wave.WaveFileReader(@"C:\test.wav");
long le = wave.Length;
byte[] data = new byte[le];
wave.Read(data, 0, (int)le);
for (int i = 0; i < 100; i++)
{
System.Console.WriteLine(data[i]);
}
System.Console.ReadKey();
我只是试图获得datachunk的前100个样本,但我不完全理解结果。这些数字是语音波的振幅值吗?
答案 0 :(得分:2)
您的WAV文件很可能是16位(您可以通过查看WaveFileReader的WaveFormat属性并查看BitDepth来查看)。在这种情况下,每两个字节代表一个样本。您可以使用BitConverter.ToInt16
逐个检查每个样本的值。例如,您可以将代码修改为:
NAudio.Wave.WaveFileReader wave = new NAudio.Wave.WaveFileReader(@"C:\test.wav");
byte[] data = new byte[200];
int read = wave.Read(data, 0, data.Length);
for (int i = 0; i < read; i+=2)
{
System.Console.WriteLine(BitConverter.ToInt16(data,i));
}
System.Console.ReadKey();
答案 1 :(得分:0)
它们是振幅,但每个通道的“振幅”每秒变化44100次。
试试这篇文章:http://en.wikipedia.org/wiki/Pulse-code_modulation
如果失败,请记住这一点。声音是气压的变化。扬声器通过电压变化产生气压变化。通过快速激活数模转换器上的各种输入电平来产生电压变化。输入级别(数字)是您从文件中读取PCM数据时所获得的。