代码之家  ›  专栏  ›  技术社区  ›  BarrettJ

a.wav在c中的平均振幅#

  •  5
  • BarrettJ  · 技术社区  · 15 年前

    是否有人知道使用c获取.wav文件平均振幅的方法(即使这意味着调用外部命令行程序并分析输出)?谢谢!

    3 回复  |  直到 15 年前
        1
  •  3
  •   Nifle Hassan Syed    15 年前

    这是一个截图,它读取立体波并将数据放入两个数组中。 这是未测试的,因为我必须删除一些代码(转换为mono并计算移动平均值)

        /// <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
        }
    
        2
  •  3
  •   Noldorin    15 年前

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

        3
  •  1
  •   Esteban Araya    15 年前

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