我需要获取 WAV 文件的声音数据的样本值,以便通过使用这些样本值我需要每秒获取该声音数据的振幅值。
重要提示:有没有办法使用Naudio库或wmp库获取音频数据样本值?
我以这种方式获取示例值:
byte[] data = File.ReadAllBytes(File_textBox.Text);
var samples=new int[data.Length];
int x = 0;
for (int i = 44; i <data.Length; i += 2)
{
samples[x] = BitConverter.ToInt16(data, i);
x++;
}
但我得到的负值更像是 (-326260)。那么这是对还是错? 我的意思是样本值是否可以为负数,如果它是正确的,那么它意味着声音还是静音?
最佳答案
NAudio 可以为您做这件事,它在库中(我认为它是 WaveStream 或 WaveReader 类,或类似的东西)。如果开销不是太大,我可以推荐使用它。
如果你想自己动手,并想处理任意波形文件,你必须阅读 WAV 文件格式,并自己分析标题。
虽然 一般 WAV 文件包含 16 位样本,但它不是必须的,并且根据具体格式,它们可能以小端或大端存储。
header 包含有关采样率、 channel 数、每个样本的位数、每个样本的字节数等信息,这使您可以进行实际数学运算以准确获得一个样本。
关于c# - 如何在c#中获取声音数据样本值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10477697/