Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mean amplitude of a .wav in C#

Tags:

c#

audio

wav

Does anyone know a way to get the mean amplitude of a .wav file using C# (even if it means calling an outside command line program and parsing the output)? Thanks!

like image 641
BarrettJ Avatar asked Jun 30 '09 15:06

BarrettJ


3 Answers

Here is a snip that reads in a stereo wav and puts the data in two arrays. It's untested because I had to remove some code (converting to mono and calculate a moving average)

    /// <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
    }
like image 53
Nifle Avatar answered Sep 19 '22 05:09

Nifle


The NAudio library for .NET sounds like your best bet. It allows access to the waveform of an audio file, which can loop over to calculate the value of the mean ampltiude.

like image 31
Noldorin Avatar answered Sep 19 '22 05:09

Noldorin


Normally the root-mean-squared method is used to calculate the "mean" amplitude of sin(x)-like signals.

like image 41
Esteban Araya Avatar answered Sep 19 '22 05:09

Esteban Araya