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; }
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); }