Example #1
0
    /// <summary>
    /// Filter out silence or noise from start and end of wave file. 
    /// </summary>
    /// <param name="strPath">Source wave file</param>
    /// <param name="noiceLevel">Absolute value for noice threshold</param>
    /// <returns>True/False</returns>
    public bool StripSilence(string strPath, int noiceLevel)
    {
        if ((strPath == null) || (strPath == ""))
            return false;

        // Read from file 
        wavProcessor wain = new wavProcessor();
        if (!wain.WaveHeaderIN(@strPath)) return false;
        byte[] arrfile = GetWAVEData(strPath);

        int startpos = 0;
        int endpos = arrfile.Length - 1;

        // Check for silence at start
        for (int j = 0; isSilence(arrfile, j, noiceLevel); j += 20)
            startpos = j;

        // Allow room for tone-in buffer
        int buffer = wain.SampleRate * (wain.BitsPerSample / 8) / 32; // 1/32 seconds lead time
        startpos = startpos - buffer;
        if (startpos < 0)
            startpos = 0;

        // Check for silence at end. No need to check tone out buffer
        for (int k = arrfile.Length - buffer; (k >= 0) && (isSilence(arrfile, k, noiceLevel)); k -= 20)
            endpos = k;

        // Allow room for tone-out buffer
        endpos = endpos + buffer;
        if (endpos > arrfile.Length)
            endpos = arrfile.Length - 2;

        if (startpos >= endpos)
            return false;

        byte[] newarr = new byte[endpos - startpos];
        for (int ni = 0, m = startpos; ni < newarr.Length; m++, ni++)
            newarr[ni] = arrfile[m];

        // write file back
        WavFileWriter writer = new WavFileWriter(@strPath, wain.SampleRate, wain.BitsPerSample, wain.Channels);
        writer.Write(newarr, newarr.Length);
        writer.Close();

        return true;
    }
Example #2
0
    /// <summary>
    /// Tone in wav file
    /// </summary>
    /// <param name="strPath">Source wave</param>
    /// <returns>True/False</returns>
    public bool ToneIn(string strPath)
    {
        if ((strPath == null) || (strPath == ""))
            return false;

        // Read from file
        wavProcessor wain = new wavProcessor();
        if (!wain.WaveHeaderIN(@strPath)) return false;
        byte[] arrfile = GetWAVEData(strPath);

        // Calculate constants
        int start = 0;
        int end = wain.SampleRate * (wain.BitsPerSample / 8) / 16; // 1/16 seconds
        int span = end - start;

        //change volume
        for (int j = start; j < end; j += 2)
        {
            short snd = ComplementToSigned(ref arrfile, j);
            snd = Convert.ToInt16(snd * (j / span));
            byte[] newval = SignedToComplement(snd);
            arrfile[j] = newval[0];
            arrfile[j + 1] = newval[1];
        }
        // write file back
        WavFileWriter writer = new WavFileWriter(@strPath, wain.SampleRate, wain.BitsPerSample, wain.Channels);
        writer.Write(arrfile, arrfile.Length);
        writer.Close();

        return true;
    }
Example #3
0
    /// <summary>
    /// Speed up wav file to mimic Donald Duck
    /// </summary>
    /// <param name="strPath">Source wave</param>
    /// <param name="speed">Speed between 0 and 19 </param>
    /// <returns>True/False</returns>
    public bool SpeedUp(string strPath, int speed)
    {
        if ((strPath == null) || (strPath == ""))
            return false;

        if ((speed < 0) || (speed > 19))
            return false;

        // Read from file
        wavProcessor wain = new wavProcessor();
        if (!wain.WaveHeaderIN(@strPath)) return false;
        byte[] arrfile = GetWAVEData(strPath);
        byte[] newfile = new byte[arrfile.Length];

        int skip = 21-speed;
        int j = 0;
        for (int i = 0; i < arrfile.Length; i += 2)
        {
            if (skip > 20 || (((i/2) % skip) != 0))
            {
                newfile[j] = arrfile[i];
                newfile[j + 1] = arrfile[i + 1];
                j += 2;
            }
        }
        // write file back
        WavFileWriter writer = new WavFileWriter(@strPath, wain.SampleRate, wain.BitsPerSample, wain.Channels);
        writer.Write(newfile, j);
        writer.Close();
        return true;
    }