コード例 #1
0
ファイル: Decode.cs プロジェクト: stlearn/MP3_Decoder
 public Decode(Data_Frame_Header_Info _frameHeaderInfo, byte[] _frameData, Stream _input, string _filename, WriteToFile write)
 {
     frameHeaderInfo = _frameHeaderInfo;
     frame_data      = _frameData;
     input           = _input;
     filename        = _filename;
     _write          = write;
 }
コード例 #2
0
ファイル: Decoder.cs プロジェクト: stlearn/MP3_Decoder
        /// <summary>
        /// 控制整个解码流程的主函数
        /// </summary>
        /// <returns></returns>
        public bool Start()
        {
            //文件头
            Header mp3_header = new Header(input);
            ID3V2  id3V2      = mp3_header.getID3V2();


            Data_Frame_Header_Info headerInfo = new Data_Frame_Header_Info();

            //设置显示框
            if (headerInfo.track_mode == 3)
            {
                _win.Channels.Text = "1";
                _pcmDatas.Channels = 1;
            }
            else
            {
                _win.Channels.Text = "2";
                _pcmDatas.Channels = 2;
            }

            int frequency = 0;

            while (headerInfo != null)
            {
                //数据帧头
                Data_Frame_Header df = new Data_Frame_Header(input);
                headerInfo = df.getHeaderInfo();

                if (headerInfo != null && headerInfo.frequency > frequency)
                {
                    frequency = headerInfo.frequency;
                }

                //文件找不到数据帧或者频率或比特率有问题
                if ((headerInfo == null && Data_Frame_Header.begin_of_file) || (headerInfo != null && headerInfo.frequency == 1) || (headerInfo != null && headerInfo.bitrate == 0))
                {
                    return(false);
                }


                if (headerInfo != null)
                {
                    //获取一帧的数据
                    byte[] besides_header = new byte[headerInfo.frame_length - 4];
                    input.Read(besides_header, 0, besides_header.Length);

                    //进行这一帧的解码
                    Decode decode = new Decode(headerInfo, besides_header, input, _filename, write);
                    decode.Start();
                }
            }
            _win.SampleMode.Text = $"{frequency}Hz";
            _pcmDatas.Frequency  = frequency;
            return(true);
        }
コード例 #3
0
 public Get_side_info(byte[] _data, Data_Frame_Header_Info _dataFrameHeaderInfo)
 {
     data = _data;
     this._dataFrameHeaderInfo = _dataFrameHeaderInfo;
 }