Beispiel #1
0
        // Conversion routine the first
        // (lame, libsndfile)
        //
        // Convert() default routine
        // Handles WAV->MP3 encoding,
        // !MP3->!MP3 audio encoding.
        public void Convert(string inputFile, int convertFrom,
            string outputFile, int convertTo, Reporter updateStatus)
        {
            // Verify existence of inputFilenm, throw
            // exception if not exist

            if (!System.IO.File.Exists(inputFile))
            {
                throw new FileNotFoundException(
                        "Cannot find file " + inputFile);
            }

            // Input file information
            // (Set input file size)

            FileInfo fi = new FileInfo(inputFile);
            int soundFileSize = (int)fi.Length;

            // Select conversion routines based
            // on input/output file types

            // If outfile = MP3 then use LameWriter
            // to encode, using the settings in the
            // structure mp3set (essentially the LHV1
            // struct from LameWrapper):

            if ((soundFormat)convertTo == soundFormat.MP3)
            {

                // File to convert from must be WAV

                if ( !( (convertFrom >= (int)soundFormat.WAV) &&
                            (convertFrom < (int)soundFormat.AIFF) ) )
                {
                    throw new Exception(
                            "Cannot encode to MP3 directly from this format ("
                            + convertFrom + "). Convert to WAV first");
                }

                LameWriter mp3Writer = null;

                // Instantiate LameWriter object
                // with output filename

                if (beConfig == null)
                {

                    // Use default MP3 output settings
                    mp3Writer = new LameWriter(
                        new FileStream(outputFile, FileMode.Create),
                        inputFile);

                }
                else
                {

                    // Use custom settings

                    mp3Writer = new LameWriter(
                        new FileStream(outputFile, FileMode.Create),
                        inputFile,
                        beConfig);

                }

                // open input file for binary reading

                Stream s = new FileStream(inputFile,
                        FileMode.Open, FileAccess.Read);

                BinaryReader br = new BinaryReader(s);

                // setup byte buffer -- use mp3Writer.sampleSize
                // to ensure correct buffer size

                byte[] wavBuffer = new byte[mp3Writer.sampleSize];

                // skip WAV header

                s.Seek(LameWrapper.SKIP_WAV_HEADER, SeekOrigin.Begin);

                // write mp3 file

                int index = 0;
                int processedBytes = 0;

                while
                ((index = br.Read(wavBuffer, 0, mp3Writer.sampleSize)) > 0)
                {

                    processedBytes += mp3Writer.sampleSize;

                    // Send to callback:

                    updateStatus(soundFileSize, processedBytes, this);

                    // Check for kill

                    if (this.killSwitch) break;

                    mp3Writer.Write(wavBuffer, 0, index);

                }

                // Finish up

                mp3Writer.Close();
                mp3Writer.WriteTags(outputFile);

            }

            // Assume libsndfile conversion:

            else
            {

                // Check and make sure we are not
                // trying to decode MP3->WAV

                // Instantiate object

                LibsndfileWrapper libSndFile = new LibsndfileWrapper();
                LibsndfileWrapper.SF_INFO soundInfo =
                    new LibsndfileWrapper.SF_INFO();

                // Calculate total frames to convert

                int i = libSndFile.GetSoundFileType(inputFile, ref soundInfo);

                // Each frame is 16bit:

                long totalFrames = soundInfo.frames*2;

                // Initialize

                libSndFile.Initialize (inputFile,
                        outputFile, (LibsndfileWrapper.soundFormat)convertTo);

                // The main decoding loop

                long readCount;
                long readIndex = 0;

                while ( (readCount = libSndFile.Read()) > 0)
                {

                    readIndex += readCount;

                    // Send update to delegate.
                    // Note that this is in
                    // libsndfile specific frames
                    // rather than in actual bytes.
                    //
                    // 	readIndex / totalFrames =
                    // 	percentage complete

                    updateStatus((int)totalFrames, (int)readIndex, this);

                    // Check for kill

                    if (this.killSwitch) break;

                    // Write to file

                    libSndFile.Write();

                }

                // Close up shop

                libSndFile.Close();

            }
        }
Beispiel #2
0
        // Initialize default settings
        // for MP3 (call to initialize
        // structure for customized MP3
        // settings). After this call,
        // settings are changed in the
        // calling code. Takes the
        // input WAV file.
        public void SetMP3(string inputFile)
        {
            // Get information about inputFile,
            // use to give beConfig initial
            // values:

            LibsndfileWrapper.SF_INFO soundInfo =
                new LibsndfileWrapper.SF_INFO();

            LibsndfileWrapper libSndFile = new LibsndfileWrapper();
            libSndFile.GetSoundFileType(inputFile, ref soundInfo);
            beConfig = new LameWrapper.BE_CONFIG(soundInfo);
        }
Beispiel #3
0
        // Given a file, return
        // the sound file format
        public soundFormat CheckSoundFormat(string inputFile)
        {
            // Verify existence of inputFilenm, throw
            // exception if not exist

            if (!System.IO.File.Exists(inputFile))
            {
                throw new FileNotFoundException(
                        "Cannot find file " + inputFile);
            }

            // Check for non-MP3 sound file

            LibsndfileWrapper libSndFile = new LibsndfileWrapper();
            LibsndfileWrapper.SF_INFO soundInfo =
                new LibsndfileWrapper.SF_INFO();

            int i = libSndFile.GetSoundFileType(inputFile, ref soundInfo);

            // First check to see if it's an audio
            // format !MP3. Then check for MP3.
            // If no valid format found, throw
            // exception.

            if (soundInfo.format != 0)
            {
                return (soundFormat)soundInfo.format;
            }
            else
            {

                MP3Check verifyMP3 = new MP3Check(inputFile, 2);

                if (!verifyMP3.Check())
                {
                    throw new Exception("Cannot determine sound file type: " +
                        inputFile);

                }
                else
                {
                    return soundFormat.MP3;
                }

            }
        }