Beispiel #1
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="stream">Stream to access in-memory data to be parsed</param>
        /// <param name="mimeType">Mime-type of the stream to process</param>
        /// <param name="readEmbeddedPictures">Embedded pictures will be read if true; ignored if false</param>
        /// <param name="readAllMetaFrames">All metadata frames (including unmapped ones) will be read if true; ignored if false</param>
        /// <param name="writeProgress">Object to use to signal writing progress (optional)</param>
        public AudioFileIO(Stream stream, String mimeType, bool readEmbeddedPictures, bool readAllMetaFrames = false, IProgress <float> writeProgress = null)
        {
            byte alternate = 0;
            bool found     = false;

            audioData = AudioDataIOFactory.GetInstance().GetFromMimeType(mimeType, "In-memory", alternate);

            audioManager       = new AudioDataManager(audioData, stream, writeProgress);
            this.writeProgress = writeProgress;
            found = audioManager.ReadFromFile(readEmbeddedPictures, readAllMetaFrames);

            while (!found && alternate < AudioDataIOFactory.MAX_ALTERNATES)
            {
                alternate++;
                audioData    = AudioDataIOFactory.GetInstance().GetFromMimeType(mimeType, "In-memory", alternate);
                audioManager = new AudioDataManager(audioData, stream, writeProgress);
                found        = audioManager.ReadFromFile(readEmbeddedPictures, readAllMetaFrames);
            }

            metaData = MetaDataIOFactory.GetInstance().GetMetaReader(audioManager);

            if (metaData is DummyTag && (0 == audioManager.getAvailableMetas().Count))
            {
                LogDelegator.GetLogDelegate()(Log.LV_WARNING, "Could not find any metadata");
            }
        }
Beispiel #2
0
        // ------------------------------------------------------------------------------------------

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="path">Path of the file to be parsed</param>
        public AudioFileIO(string path, bool readEmbeddedPictures, bool readAllMetaFrames = false)
        {
            byte alternate = 0;
            bool found     = false;

            thePath = path;

            audioData    = AudioDataIOFactory.GetInstance().GetDataReader(path, alternate);
            audioManager = new AudioDataManager(audioData);
            found        = audioManager.ReadFromFile(readEmbeddedPictures, readAllMetaFrames);

            while (!found && alternate < AudioDataIOFactory.MAX_ALTERNATES)
            {
                alternate++;
                audioData    = AudioDataIOFactory.GetInstance().GetDataReader(path, alternate);
                audioManager = new AudioDataManager(audioData);
                found        = audioManager.ReadFromFile(readEmbeddedPictures, readAllMetaFrames);
            }

            metaData = MetaDataIOFactory.GetInstance().GetMetaReader(audioManager);

            if (metaData is DummyTag && (0 == audioManager.getAvailableMetas().Count))
            {
                LogDelegator.GetLogDelegate()(Log.LV_WARNING, "Could not find any metadata");
            }
        }
Beispiel #3
0
        // ------------------------------------------------------------------------------------------

        /// <summary>
        /// Gets the instance of this factory (Singleton pattern)
        /// </summary>
        /// <returns>Instance of the AudioReaderFactory of the application</returns>
        public static AudioDataIOFactory GetInstance()
        {
            if (!BitConverter.IsLittleEndian)
            {
                throw new PlatformNotSupportedException("Big-endian based platforms are not supported by ATL");
            }

            lock (_lockable)
            {
                if (null == theFactory)
                {
                    theFactory = new AudioDataIOFactory();

                    theFactory.formatListByExt  = new Dictionary <string, IList <Format> >();
                    theFactory.formatListByMime = new Dictionary <string, IList <Format> >();

                    Format tempFmt = new Format(CID_MP3, "MPEG Audio", "MPEG");
                    tempFmt.AddMimeType("audio/mp3");
                    tempFmt.AddMimeType("audio/mpeg");
                    tempFmt.AddMimeType("audio/x-mpeg");
                    tempFmt.AddExtension(".mp1");
                    tempFmt.AddExtension(".mp2");
                    tempFmt.AddExtension(".mp3");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_OGG, "OGG : Vorbis, Opus", "OGG");
                    tempFmt.AddMimeType("audio/ogg");
                    tempFmt.AddMimeType("audio/vorbis");
                    tempFmt.AddMimeType("audio/opus");
                    tempFmt.AddMimeType("audio/ogg;codecs=opus");
                    tempFmt.AddExtension(".ogg");
                    tempFmt.AddExtension(".opus");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_MPC, "Musepack / MPEGplus", "MPC");
                    tempFmt.AddMimeType("audio/x-musepack");
                    tempFmt.AddMimeType("audio/musepack");
                    tempFmt.AddExtension(".mp+");
                    tempFmt.AddExtension(".mpc");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_WMA, "Windows Media Audio", "WMA");
                    tempFmt.AddMimeType("audio/x-ms-wma");
                    tempFmt.AddMimeType("video/x-ms-asf");
                    tempFmt.AddExtension(".asf");
                    tempFmt.AddExtension(".wma");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_AAC, "Advanced Audio Coding");
                    tempFmt.AddMimeType("audio/aac");
                    tempFmt.AddExtension(".aac");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_MP4, "MPEG-4 Part 14", "MPEG-4");
                    tempFmt.AddMimeType("audio/mp4");
                    tempFmt.AddMimeType("audio/mp4a-latm");
                    tempFmt.AddMimeType("audio/vnd.audible.aax");
                    tempFmt.AddExtension(".mp4");
                    tempFmt.AddExtension(".m4a");
                    tempFmt.AddExtension(".m4b");
                    tempFmt.AddExtension(".m4p");
                    tempFmt.AddExtension(".m4r");
                    tempFmt.AddExtension(".m4v");
                    tempFmt.AddExtension(".aax");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_AC3, "Dolby Digital", "Dolby");
                    tempFmt.AddMimeType("audio/ac3");
                    tempFmt.AddExtension(".ac3");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_DTS, "Digital Theatre System", "DTS");
                    tempFmt.AddMimeType("audio/vnd.dts");
                    tempFmt.AddMimeType("audio/vnd.dts.hd");
                    tempFmt.AddExtension(".dts");
                    tempFmt.Readable = false;
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_VQF, "TwinVQ");
                    tempFmt.AddExtension(".vqf");
                    tempFmt.AddMimeType("audio/x-twinvq");
                    tempFmt.Readable = false;
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_FLAC, "Free Lossless Audio Codec", "FLAC");
                    tempFmt.AddMimeType("audio/x-flac");
                    tempFmt.AddExtension(".flac");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_APE, "Monkey's Audio", "APE");
                    tempFmt.AddMimeType("audio/ape");
                    tempFmt.AddMimeType("audio/x-ape");
                    tempFmt.AddExtension(".ape");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_OFR, "OptimFROG");
                    tempFmt.AddMimeType("audio/ofr");
                    tempFmt.AddMimeType("audio/x-ofr");
                    tempFmt.AddExtension(".ofr");
                    tempFmt.AddExtension(".ofs");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_WAVPACK, "WAVPack");
                    tempFmt.AddMimeType("audio/x-wavpack");
                    tempFmt.AddMimeType("audio/wavpack");
                    tempFmt.AddExtension(".wv");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_WAV, "PCM (uncompressed audio)", "WAV");
                    tempFmt.AddMimeType("audio/x-wav");
                    tempFmt.AddMimeType("audio/wav");
                    tempFmt.AddExtension(".wav");
                    tempFmt.AddExtension(".bwf");
                    tempFmt.AddExtension(".bwav");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_MIDI, "Musical Instruments Digital Interface", "MIDI");
                    tempFmt.AddMimeType("audio/mid");
                    tempFmt.AddExtension(".mid");
                    tempFmt.AddExtension(".midi");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_DSF, "Direct Stream Digital", "DSD");
                    tempFmt.AddMimeType("audio/dsf");
                    tempFmt.AddMimeType("audio/x-dsf");
                    tempFmt.AddMimeType("audio/dsd");
                    tempFmt.AddMimeType("audio/x-dsd");
                    tempFmt.AddExtension(".dsf");
                    tempFmt.AddExtension(".dsd");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_PSF, "Portable Sound Format", "PSF");
                    tempFmt.AddMimeType("audio/psf");   // Unofficial
                    tempFmt.AddMimeType("audio/x-psf"); // Unofficial
                    tempFmt.AddExtension(".psf");
                    tempFmt.AddExtension(".psf1");
                    tempFmt.AddExtension(".minipsf");
                    tempFmt.AddExtension(".minipsf1");
                    tempFmt.AddExtension(".psf2");
                    tempFmt.AddExtension(".minipsf2");
                    tempFmt.AddExtension(".ssf");
                    tempFmt.AddExtension(".minissf");
                    tempFmt.AddExtension(".dsf");
                    tempFmt.AddExtension(".minidsf");
                    tempFmt.AddExtension(".gsf");
                    tempFmt.AddExtension(".minigsf");
                    tempFmt.AddExtension(".qsf");
                    tempFmt.AddExtension(".miniqsf");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_SPC, "SPC700 Sound Files", "SPC");
                    tempFmt.AddMimeType("audio/spc");   // Unofficial
                    tempFmt.AddMimeType("audio/x-spc"); // Unofficial
                    tempFmt.AddExtension(".spc");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_TTA, "True Audio");
                    tempFmt.AddMimeType("audio/tta");
                    tempFmt.AddMimeType("audio/x-tta");
                    tempFmt.AddExtension(".tta");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_TAK, "Tom's lossless Audio Kompressor", "TAK");
                    tempFmt.AddMimeType("audio/tak");   // Unofficial
                    tempFmt.AddMimeType("audio/x-tak"); // Unofficial
                    tempFmt.AddExtension(".tak");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_MOD, "Tracker Module", "MOD");
                    tempFmt.AddMimeType("audio/x-mod");
                    tempFmt.AddExtension(".mod");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_S3M, "ScreamTracker Module", "S3M");
                    tempFmt.AddMimeType("audio/s3m");
                    tempFmt.AddMimeType("audio/x-s3m");
                    tempFmt.AddExtension(".s3m");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_XM, "Extended Module", "XM");
                    tempFmt.AddMimeType("audio/xm");
                    tempFmt.AddMimeType("audio/x-xm");
                    tempFmt.AddExtension(".xm");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_IT, "Impulse Tracker", "IT");
                    tempFmt.AddMimeType("audio/it");
                    tempFmt.AddExtension(".it");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_AIFF, "Audio Interchange File Format", "AIFF");
                    tempFmt.AddMimeType("audio/x-aiff");
                    tempFmt.AddExtension(".aif");
                    tempFmt.AddExtension(".aiff");
                    tempFmt.AddExtension(".aifc");
                    tempFmt.AddExtension(".snd");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_VGM, "Video Game Music", "VGM");
                    tempFmt.AddMimeType("audio/vgm");   // Unofficial
                    tempFmt.AddMimeType("audio/x-vgm"); // Unofficial
                    tempFmt.AddExtension(".vgm");
                    tempFmt.AddExtension(".vgz");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_GYM, "Genesis YM2612", "GYM");
                    tempFmt.AddMimeType("audio/gym");   // Unofficial
                    tempFmt.AddMimeType("audio/x-gym"); // Unofficial
                    tempFmt.AddExtension(".gym");
                    theFactory.addFormat(tempFmt);

                    tempFmt = new Format(CID_AA, "Audible (legacy)", "AA");
                    tempFmt.AddMimeType("audio/audible");
                    tempFmt.AddMimeType("audio/x-pn-audibleaudio");
                    tempFmt.AddExtension(".aa");
                    theFactory.addFormat(tempFmt);
                }
            }

            return(theFactory);
        }
Beispiel #4
0
        // ------------------------------------------------------------------------------------------

        /// <summary>
        /// Gets the instance of this factory (Singleton pattern)
        /// </summary>
        /// <returns>Instance of the AudioReaderFactory of the application</returns>
        public static AudioDataIOFactory GetInstance()
        {
            if (!BitConverter.IsLittleEndian)
            {
                throw new PlatformNotSupportedException("Big-endian based platforms are not supported by ATL");
            }

            if (null == theFactory)
            {
                theFactory = new AudioDataIOFactory();

                theFactory.formatListByExt  = new Dictionary <string, IList <Format> >();
                theFactory.formatListByMime = new Dictionary <string, IList <Format> >();

                Format tempFmt = new Format("MPEG Audio Layer");
                tempFmt.ID = CID_MP3;
                tempFmt.AddMimeType("audio/mp3");
                tempFmt.AddMimeType("audio/mpeg");
                tempFmt.AddMimeType("audio/x-mpeg");
                tempFmt.AddExtension(".mp1");
                tempFmt.AddExtension(".mp2");
                tempFmt.AddExtension(".mp3");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("OGG : Vorbis, Opus");
                tempFmt.ID = CID_OGG;
                tempFmt.AddMimeType("audio/ogg");
                tempFmt.AddMimeType("audio/vorbis");
                tempFmt.AddMimeType("audio/opus");
                tempFmt.AddMimeType("audio/ogg;codecs=opus");
                tempFmt.AddExtension(".ogg");
                tempFmt.AddExtension(".opus");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("Musepack / MPEGplus");
                tempFmt.ID = CID_MPC;
                tempFmt.AddMimeType("audio/x-musepack");
                tempFmt.AddMimeType("audio/musepack");
                tempFmt.AddExtension(".mp+");
                tempFmt.AddExtension(".mpc");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("Windows Media Audio");
                tempFmt.ID = CID_WMA;
                tempFmt.AddMimeType("audio/x-ms-wma");
                tempFmt.AddMimeType("video/x-ms-asf");
                tempFmt.AddExtension(".asf");
                tempFmt.AddExtension(".wma");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("Advanced Audio Coding");
                tempFmt.ID = CID_AAC;
                tempFmt.AddMimeType("audio/mp4");
                tempFmt.AddMimeType("audio/aac");
                tempFmt.AddMimeType("audio/mp4a-latm");
                tempFmt.AddExtension(".aac");
                tempFmt.AddExtension(".mp4");
                tempFmt.AddExtension(".m4a");
                tempFmt.AddExtension(".m4v");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("Dolby Digital");
                tempFmt.ID = CID_AC3;
                tempFmt.AddMimeType("audio/ac3");
                tempFmt.AddExtension(".ac3");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("Digital Theatre System");
                tempFmt.ID = CID_DTS;
                tempFmt.AddMimeType("audio/vnd.dts");
                tempFmt.AddMimeType("audio/vnd.dts.hd");
                tempFmt.AddExtension(".dts");
                tempFmt.Readable = false;
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("TwinVQ");
                tempFmt.ID = CID_VQF;
                tempFmt.AddExtension(".vqf");
                tempFmt.AddMimeType("audio/x-twinvq");
                tempFmt.Readable = false;
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("Free Lossless Audio Codec");
                tempFmt.ID = CID_FLAC;
                tempFmt.AddMimeType("audio/x-flac");
                tempFmt.AddExtension(".flac");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("Monkey's Audio");
                tempFmt.ID = CID_APE;
                tempFmt.AddMimeType("audio/ape");
                tempFmt.AddMimeType("audio/x-ape");
                tempFmt.AddExtension(".ape");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("OptimFROG");
                tempFmt.ID = CID_OFR;
                tempFmt.AddMimeType("audio/ofr");
                tempFmt.AddMimeType("audio/x-ofr");
                tempFmt.AddExtension(".ofr");
                tempFmt.AddExtension(".ofs");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("WAVPack");
                tempFmt.ID = CID_WAVPACK;
                tempFmt.AddMimeType("audio/x-wavpack");
                tempFmt.AddMimeType("audio/wavpack");
                tempFmt.AddExtension(".wv");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("PCM (uncompressed audio)");
                tempFmt.ID = CID_WAV;
                tempFmt.AddMimeType("audio/x-wav");
                tempFmt.AddMimeType("audio/wav");
                tempFmt.AddExtension(".wav");
                tempFmt.AddExtension(".bwf");
                tempFmt.AddExtension(".bwav");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("Musical Instruments Digital Interface");
                tempFmt.ID = CID_MIDI;
                tempFmt.AddMimeType("audio/mid");
                tempFmt.AddExtension(".mid");
                tempFmt.AddExtension(".midi");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("Direct Stream Digital");
                tempFmt.ID = CID_DSF;
                tempFmt.AddMimeType("audio/dsf");
                tempFmt.AddMimeType("audio/x-dsf");
                tempFmt.AddMimeType("audio/dsd");
                tempFmt.AddMimeType("audio/x-dsd");
                tempFmt.AddExtension(".dsf");
                tempFmt.AddExtension(".dsd");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("Portable Sound Format");
                tempFmt.ID = CID_PSF;
                tempFmt.AddMimeType("audio/psf");   // Unofficial
                tempFmt.AddMimeType("audio/x-psf"); // Unofficial
                tempFmt.AddExtension(".psf");
                tempFmt.AddExtension(".psf1");
                tempFmt.AddExtension(".minipsf");
                tempFmt.AddExtension(".minipsf1");
                tempFmt.AddExtension(".psf2");
                tempFmt.AddExtension(".minipsf2");
                tempFmt.AddExtension(".ssf");
                tempFmt.AddExtension(".minissf");
                tempFmt.AddExtension(".dsf");
                tempFmt.AddExtension(".minidsf");
                tempFmt.AddExtension(".gsf");
                tempFmt.AddExtension(".minigsf");
                tempFmt.AddExtension(".qsf");
                tempFmt.AddExtension(".miniqsf");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("SPC700 Sound Files");
                tempFmt.ID = CID_SPC;
                tempFmt.AddMimeType("audio/spc");   // Unofficial
                tempFmt.AddMimeType("audio/x-spc"); // Unofficial
                tempFmt.AddExtension(".spc");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("True Audio");
                tempFmt.ID = CID_TTA;
                tempFmt.AddMimeType("audio/tta");
                tempFmt.AddMimeType("audio/x-tta");
                tempFmt.AddExtension(".tta");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("Tom's lossless Audio Kompressor (TAK)");
                tempFmt.ID = CID_TAK;
                tempFmt.AddMimeType("audio/tak");   // Unofficial
                tempFmt.AddMimeType("audio/x-tak"); // Unofficial
                tempFmt.AddExtension(".tak");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("Noisetracker/Soundtracker/Protracker Module");
                tempFmt.ID = CID_MOD;
                tempFmt.AddMimeType("audio/x-mod");
                tempFmt.AddExtension(".mod");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("ScreamTracker Module");
                tempFmt.ID = CID_S3M;
                tempFmt.AddMimeType("audio/s3m");
                tempFmt.AddMimeType("audio/x-s3m");
                tempFmt.AddExtension(".s3m");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("Extended Module");
                tempFmt.ID = CID_XM;
                tempFmt.AddMimeType("audio/xm");
                tempFmt.AddMimeType("audio/x-xm");
                tempFmt.AddExtension(".xm");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("Impulse Tracker");
                tempFmt.ID = CID_IT;
                tempFmt.AddMimeType("audio/it");
                tempFmt.AddExtension(".it");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("Audio Interchange File Format: (Audio IFF)");
                tempFmt.ID = CID_AIFF;
                tempFmt.AddMimeType("audio/x-aiff");
                tempFmt.AddExtension(".aif");
                tempFmt.AddExtension(".aiff");
                tempFmt.AddExtension(".aifc");
                tempFmt.AddExtension(".snd");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("Video Game Music");
                tempFmt.ID = CID_VGM;
                tempFmt.AddMimeType("audio/vgm");   // Unofficial
                tempFmt.AddMimeType("audio/x-vgm"); // Unofficial
                tempFmt.AddExtension(".vgm");
                tempFmt.AddExtension(".vgz");
                theFactory.addFormat(tempFmt);

                tempFmt    = new Format("Genesis YM2612");
                tempFmt.ID = CID_GYM;
                tempFmt.AddMimeType("audio/gym");   // Unofficial
                tempFmt.AddMimeType("audio/x-gym"); // Unofficial
                tempFmt.AddExtension(".gym");
                theFactory.addFormat(tempFmt);
            }

            return(theFactory);
        }