/// <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 == "") { // 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()"); }