コード例 #1
0
        private int ReadStartCommon(ReadMode mode, string flacFilePath, long skipFrames, long wantFrames,
            out PcmDataLib.PcmData pcmData_return, out List<FlacCuesheetTrackInfo> cueSheet_return)
        {
            pcmData_return = new PcmDataLib.PcmData();
            cueSheet_return = new List<FlacCuesheetTrackInfo>();

            StartChildProcess();

            switch (mode) {
            case ReadMode.Header:
                SendString("H");
                SendBase64(flacFilePath);
                break;
            case ReadMode.HeadereAndData:
                SendString("A");
                SendBase64(flacFilePath);
                SendString(skipFrames.ToString(CultureInfo.InvariantCulture));
                SendString(wantFrames.ToString(CultureInfo.InvariantCulture));
                break;
            default:
                System.Diagnostics.Debug.Assert(false);
                break;
            }

            int rv = mBinaryReader.ReadInt32();
            if (rv != 0) {
                return rv;
            }

            int nChannels     = mBinaryReader.ReadInt32();
            int bitsPerSample = mBinaryReader.ReadInt32();
            int sampleRate    = mBinaryReader.ReadInt32();

            mNumFrames         = mBinaryReader.ReadInt64();
            int numFramesPerBlock = mBinaryReader.ReadInt32();

            string titleStr = mBinaryReader.ReadString();
            string albumStr = mBinaryReader.ReadString();
            string artistStr = mBinaryReader.ReadString();

            byte md5Available = mBinaryReader.ReadByte();
            md5MetaAvailable = md5Available != 0;

            mMD5SumInMetadata = mBinaryReader.ReadBytes(MD5_BYTES);

            mPictureBytes = mBinaryReader.ReadInt32();
            mPictureData = new byte[0];
            if (0 < mPictureBytes) {
                mPictureData = mBinaryReader.ReadBytes(mPictureBytes);
            }

            {
                int numCuesheetTracks = mBinaryReader.ReadInt32();
                for (int trackId=0; trackId < numCuesheetTracks; ++trackId) {
                    var cti = new FlacCuesheetTrackInfo();
                    cti.trackNr = mBinaryReader.ReadInt32();
                    cti.offsetSamples = mBinaryReader.ReadInt64();

                    int numCuesheetTrackIndices = mBinaryReader.ReadInt32();
                    for (int indexId=0; indexId < numCuesheetTrackIndices; ++indexId) {
                        var indexInfo = new FlacCuesheetTrackIndexInfo();
                        indexInfo.indexNr = mBinaryReader.ReadInt32();
                        indexInfo.offsetSamples = mBinaryReader.ReadInt64();
                        cti.indices.Add(indexInfo);
                    }
                    cueSheet_return.Add(cti);
                }
            }

            pcmData_return.SetFormat(
                nChannels,
                bitsPerSample,
                bitsPerSample,
                sampleRate,
                PcmDataLib.PcmData.ValueRepresentationType.SInt,
                mNumFrames);

            pcmData_return.DisplayName = titleStr;
            pcmData_return.AlbumTitle = albumStr;
            pcmData_return.ArtistName = artistStr;

            pcmData_return.SetPicture(mPictureBytes, mPictureData);
            return 0;
        }
コード例 #2
0
        private int ReadStartCommon(ReadMode mode, string flacFilePath, long skipFrames, long wantFrames,
                                    out PcmDataLib.PcmData pcmData_return, out List <FlacCuesheetTrackInfo> cueSheet_return)
        {
            pcmData_return  = new PcmDataLib.PcmData();
            cueSheet_return = new List <FlacCuesheetTrackInfo>();

            StartChildProcess();

            switch (mode)
            {
            case ReadMode.Header:
                SendString("H");
                SendBase64(flacFilePath);
                break;

            case ReadMode.HeadereAndData:
                SendString("A");
                SendBase64(flacFilePath);
                SendString(skipFrames.ToString(CultureInfo.InvariantCulture));
                SendString(wantFrames.ToString(CultureInfo.InvariantCulture));
                break;

            default:
                System.Diagnostics.Debug.Assert(false);
                break;
            }

            int rv = mBinaryReader.ReadInt32();

            if (rv != 0)
            {
                return(rv);
            }

            int nChannels     = mBinaryReader.ReadInt32();
            int bitsPerSample = mBinaryReader.ReadInt32();
            int sampleRate    = mBinaryReader.ReadInt32();

            mNumFrames = mBinaryReader.ReadInt64();
            int numFramesPerBlock = mBinaryReader.ReadInt32();

            string titleStr  = mBinaryReader.ReadString();
            string albumStr  = mBinaryReader.ReadString();
            string artistStr = mBinaryReader.ReadString();

            byte md5Available = mBinaryReader.ReadByte();

            md5MetaAvailable = md5Available != 0;

            mMD5SumInMetadata = mBinaryReader.ReadBytes(MD5_BYTES);

            mPictureBytes = mBinaryReader.ReadInt32();
            mPictureData  = new byte[0];
            if (0 < mPictureBytes)
            {
                mPictureData = mBinaryReader.ReadBytes(mPictureBytes);
            }

            {
                int numCuesheetTracks = mBinaryReader.ReadInt32();
                for (int trackId = 0; trackId < numCuesheetTracks; ++trackId)
                {
                    var cti = new FlacCuesheetTrackInfo();
                    cti.trackNr       = mBinaryReader.ReadInt32();
                    cti.offsetSamples = mBinaryReader.ReadInt64();

                    int numCuesheetTrackIndices = mBinaryReader.ReadInt32();
                    for (int indexId = 0; indexId < numCuesheetTrackIndices; ++indexId)
                    {
                        var indexInfo = new FlacCuesheetTrackIndexInfo();
                        indexInfo.indexNr       = mBinaryReader.ReadInt32();
                        indexInfo.offsetSamples = mBinaryReader.ReadInt64();
                        cti.indices.Add(indexInfo);
                    }
                    cueSheet_return.Add(cti);
                }
            }

            pcmData_return.SetFormat(
                nChannels,
                bitsPerSample,
                bitsPerSample,
                sampleRate,
                PcmDataLib.PcmData.ValueRepresentationType.SInt,
                mNumFrames);

            pcmData_return.DisplayName = titleStr;
            pcmData_return.AlbumTitle  = albumStr;
            pcmData_return.ArtistName  = artistStr;

            pcmData_return.SetPicture(mPictureBytes, mPictureData);
            return(0);
        }