【问题标题】:Mean amplitude of a .wav in C#C# 中 .wav 的平均幅度
【发布时间】:2010-01-29 23:33:14
【问题描述】:

有谁知道使用 C# 获取 .wav 文件的平均幅度的方法(即使这意味着调用外部命令行程序并解析输出)?谢谢!

【问题讨论】:

  • 忘了说 .wav 是单声道的,如果这会让情况变得更容易/不同的话。

标签: c# audio wav


【解决方案1】:

这是一个片段,它读取立体声 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
    }

【讨论】:

  • 如果 wav 文件是单声道的,我可以只注释掉 sRight[x] = (short)(fa[s + 3] * 0x100 + fa[s + 2]);行并将 s = s + 4 更改为 s = s +2?我对 wav 格式不是很熟悉。谢谢!
  • 我也不是,但我认为你可以跳过 sRight。
  • 进行我上面列出的更改并将 sLeft 声明为“var sLeft = new short[fa.Length / 2];”确实适用于单声道文件。
【解决方案2】:

.NET 的 NAudio 库听起来是您的最佳选择。它允许访问音频文件的波形,可以循环计算平均幅度的值。

【讨论】:

    【解决方案3】:

    通常root-mean-squared 方法用于计算类 sin(x) 信号的“平均”幅度。

    【讨论】:

    • 我认为 OP 在问题的实际方面要求更多。虽然确实,他会想要计算 RMS 值。
    • 感谢您提供此信息,因为我不知道这一点,它确实有很大帮助。
    猜你喜欢
    • 2012-09-05
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多