【发布时间】:2010-01-29 23:33:14
【问题描述】:
有谁知道使用 C# 获取 .wav 文件的平均幅度的方法(即使这意味着调用外部命令行程序并解析输出)?谢谢!
【问题讨论】:
-
忘了说 .wav 是单声道的,如果这会让情况变得更容易/不同的话。
有谁知道使用 C# 获取 .wav 文件的平均幅度的方法(即使这意味着调用外部命令行程序并解析输出)?谢谢!
【问题讨论】:
这是一个片段,它读取立体声 wav 并将数据放入两个数组中。 它未经测试,因为我必须删除一些代码(转换为单声道并计算移动平均值)
/// <summary>
/// Read in wav file and put into Left and right array
/// </summary>
/// <param name="fileName"></param>
private void ReadWavfiles(string fileName)
{
byte[] fa = File.ReadAllBytes(fileName);
int startByte = 0;
// look for data header
{
var x = 0;
while (x < fa.Length)
{
if (fa[x] == 'd' && fa[x + 1] == 'a' &&
fa[x + 2] == 't' && fa[x + 3] == 'a')
{
startByte = x + 8;
break;
}
x++;
}
}
// Split out channels from sample
var sLeft = new short[fa.Length / 4];
var sRight = new short[fa.Length / 4];
{
var x = 0;
var length = fa.Length;
for (int s = startByte; s < length; s = s + 4)
{
sLeft[x] = (short)(fa[s + 1] * 0x100 + fa[s]);
sRight[x] = (short)(fa[s + 3] * 0x100 + fa[s + 2]);
x++;
}
}
// do somthing with the wav data in sLeft and sRight
}
【讨论】:
.NET 的 NAudio 库听起来是您的最佳选择。它允许访问音频文件的波形,可以循环计算平均幅度的值。
【讨论】:
通常root-mean-squared 方法用于计算类 sin(x) 信号的“平均”幅度。
【讨论】: