Exemple #1
0
    /// <summary>
    /// Changes the volume of a WAV file.
    /// </summary>
    /// <param name="pFilename">The name of the WAV file to adjust</param>
    /// <param name="pMultiplier">The volume multiplier</param>
    public static void AdjustVolumeInPlace(String pFilename, double pMultiplier)
    {
        // If pMultiplier is 1, then we don't need to do anything.
        if (pMultiplier == 1.0)
            return;

        // Open the file
        WAVFile audioFile = new WAVFile();
        String retval = audioFile.Open(pFilename, WAVFileMode.READ_WRITE);
        if (retval.Length == 0)
        {
            // Check to make sure the input file has a supported number of bits/sample and sample rate.  If
            // not, then throw an exception.
            if (!SupportedBitsPerSample(audioFile.BitsPerSample))
            {
                short bitsPerSample = audioFile.BitsPerSample;
                audioFile.Close();
                throw new WAVFileBitsPerSampleException(pFilename + " has unsupported bits/sample ("
                                                        + bitsPerSample.ToString() + ")",
                                                        "WAVFile.AdjustVolumeInPlace()", bitsPerSample);
            }
            if (!SupportedSampleRate(audioFile.SampleRateHz))
            {
                int sampleRate = audioFile.SampleRateHz;
                audioFile.Close();
                throw new WAVFileSampleRateException(pFilename + " has unsupported sample rate ("
                                                     + sampleRate.ToString() + ")",
                                                     "WAVFile.AdjustVolumeInPlace()", sampleRate);
            }

            // Adjust the file volume
            if (audioFile.BitsPerSample == 8)
            {
                byte sample = 0;
                for (int sampleNum = 0; sampleNum < audioFile.NumSamples; ++sampleNum)
                {
                    sample = (byte)((double)audioFile.GetNextSample_8bit() * pMultiplier);
                    audioFile.SeekToAudioSample(sampleNum);
                    audioFile.AddSample_8bit(sample);
                }
            }
            else if (audioFile.BitsPerSample == 16)
            {
                short sample = 0;
                for (int sampleNum = 0; sampleNum < audioFile.NumSamples; ++sampleNum)
                {
                    sample = (short)((double)audioFile.GetNextSample_16bit() * pMultiplier);
                    audioFile.SeekToAudioSample(sampleNum);
                    audioFile.AddSample_16bit(sample);
                }
            }

            audioFile.Close();
        }
        else
            throw new WAVFileReadException(retval, "WAVFile.AdjustVolumeInPlace()");
    }