示例#1
0
		public EncodingInfo Read( Stream raf ) {
			EncodingInfo info = new EncodingInfo();
			
			//Begin info fetch-------------------------------------------
			if ( raf.Length == 0 ) {
				//Empty File
				throw new CannotReadException("File is empty");
			}
			raf.Seek( 0 , SeekOrigin.Begin);
		
			//MP+ Header string
			byte[] b = new byte[4];
			raf.Read(b, 0, b.Length);
			string mpc = new string(System.Text.Encoding.ASCII.GetChars(b));
			if (mpc != "MAC ") {
				throw new CannotReadException("'MAC ' Header not found");
			}
			
			b = new byte[4];
			raf.Read(b, 0, b.Length);
			int version = Utils.GetNumber(b, 0,3);
			if(version < 3970)
				throw new CannotReadException("Monkey Audio version <= 3.97 is not supported");
			
			b = new byte[44];
			raf.Read(b, 0, b.Length);
			MonkeyDescriptor md = new MonkeyDescriptor(b);
			
			b = new byte[24];
			raf.Read(b, 0, b.Length);
			MonkeyHeader mh = new MonkeyHeader(b);
			
			raf.Seek(md.RiffWavOffset, SeekOrigin.Begin);
			b = new byte[12];
			raf.Read(b, 0, b.Length);
			WavRIFFHeader wrh = new WavRIFFHeader(b);
			if(!wrh.Valid)
				throw new CannotReadException("No valid RIFF Header found");
			
			b = new byte[24];
			raf.Read(b, 0, b.Length);
			WavFormatHeader wfh = new WavFormatHeader(b);
			if(!wfh.Valid)
				throw new CannotReadException("No valid WAV Header found");
			
			info.Duration = new TimeSpan(mh.Length * TimeSpan.TicksPerSecond);
			info.ChannelNumber = wfh.ChannelNumber;
			info.SamplingRate = wfh.SamplingRate;
			info.Bitrate = ComputeBitrate(mh.Length, raf.Length);
			info.EncodingType = "Monkey Audio v" + (((double)version)/1000)+", compression level "+mh.CompressionLevel;
			info.ExtraEncodingInfos = "";
			
			return info;
		}
示例#2
0
        public EncodingInfo Read(Stream raf)
        {
            EncodingInfo info = new EncodingInfo();

            //Begin info fetch-------------------------------------------
            if (raf.Length == 0)
            {
                //Empty File
                throw new CannotReadException("File is empty");
            }
            raf.Seek(0, SeekOrigin.Begin);

            //MP+ Header string
            byte[] b = new byte[4];
            raf.Read(b, 0, b.Length);
            string mpc = new string(System.Text.Encoding.ASCII.GetChars(b));

            if (mpc != "MAC ")
            {
                throw new CannotReadException("'MAC ' Header not found");
            }

            b = new byte[4];
            raf.Read(b, 0, b.Length);
            int version = Utils.GetNumber(b, 0, 3);

            if (version < 3970)
            {
                throw new CannotReadException("Monkey Audio version <= 3.97 is not supported");
            }

            b = new byte[44];
            raf.Read(b, 0, b.Length);
            MonkeyDescriptor md = new MonkeyDescriptor(b);

            b = new byte[24];
            raf.Read(b, 0, b.Length);
            MonkeyHeader mh = new MonkeyHeader(b);

            raf.Seek(md.RiffWavOffset, SeekOrigin.Begin);
            b = new byte[12];
            raf.Read(b, 0, b.Length);
            WavRIFFHeader wrh = new WavRIFFHeader(b);

            if (!wrh.Valid)
            {
                throw new CannotReadException("No valid RIFF Header found");
            }

            b = new byte[24];
            raf.Read(b, 0, b.Length);
            WavFormatHeader wfh = new WavFormatHeader(b);

            if (!wfh.Valid)
            {
                throw new CannotReadException("No valid WAV Header found");
            }

            info.Duration           = new TimeSpan(mh.Length * TimeSpan.TicksPerSecond);
            info.ChannelNumber      = wfh.ChannelNumber;
            info.SamplingRate       = wfh.SamplingRate;
            info.Bitrate            = ComputeBitrate(mh.Length, raf.Length);
            info.EncodingType       = "Monkey Audio v" + (((double)version) / 1000) + ", compression level " + mh.CompressionLevel;
            info.ExtraEncodingInfos = "";

            return(info);
        }