public void DoTranscoding(EncoderSettings encoderSettings, string inputFile) { _grabber = CdRipper.CreateGrabber(OutputFormat); if (_grabber == null) { throw new NotSupportedException(string.Format("TXT_UNSUPPORTED_OUTPUT_FORMAT: {0}", InputFormat)); } switch (InputFormat) { case AudioMediaFormatType.WAV: switch (OutputFormat) { case AudioMediaFormatType.MP3: { // Transcode WAV => MP3 i.o.w encode the wav WaveFormatEx wfex = WaveFormatEx.Cdda; byte[] buff = WaveFile.ReadWaveData(inputFile, ref wfex); GrabberToMP3 grabber = (_grabber as GrabberToMP3); grabber.Options = (encoderSettings as Mp3EncoderSettings).Options; // Resample is not supported at this time. // Specify the same settings as the input WAV file, otherwise we'll be failing. grabber.Options.WaveFormat = wfex; grabber.EncodeBuffer(buff, Path.ChangeExtension(inputFile, "MP3"), false, null); return; } } break; case AudioMediaFormatType.MP3: switch (OutputFormat) { case AudioMediaFormatType.WAV: // Transcode MP3 => WAV i.o.w decode the MP3 string outputFile = Path.ChangeExtension(inputFile, "WAV"); if (DecodeMP3ToWAV(inputFile, outputFile) == false) { throw new Exception("TXT_FAILED_CONVERSION_MP3_WAV"); } return; case AudioMediaFormatType.MP3: { // Transcode MP3 => MP3 i.o.w adjust MP3 encoding string tempWavFile = Path.GetTempFileName(); if (DecodeMP3ToWAV(inputFile, tempWavFile) == false) { throw new Exception("TXT_FAILED_CONVERSION_MP3_TEMP_WAV"); } WaveFormatEx wfex = WaveFormatEx.Cdda; byte[] buff = WaveFile.ReadWaveData(tempWavFile, ref wfex); GrabberToMP3 grabber = (_grabber as GrabberToMP3); grabber.Options = (encoderSettings as Mp3EncoderSettings).Options; ID3FileInfoSlim ifiSlim = new ID3FileInfoSlim(MediaFileInfo.FromPath(inputFile, false)); grabber.EncodeBuffer(buff, Path.ChangeExtension(inputFile, "REENC.MP3"), (encoderSettings as Mp3EncoderSettings).CopyInputFileMetadata, ifiSlim); if (File.Exists(tempWavFile)) { File.Delete(tempWavFile); } return; } } break; } throw new NotSupportedException(string.Format("TXT_UNSUPPORTED_TRANSCODING: {0}", this)); }