/// <summary> /// PCMデータを読み出す。 /// </summary> /// <param name="preferredFrames">読み込みたいフレーム数。1Mフレームぐらいにすると良い。(このフレーム数のデータが戻るとは限らない)</param> /// <returns>PCMデータが詰まったバイト列。0要素の配列の場合、もう終わり。</returns> public byte[] StreamReadOne(int preferredFrames) { byte[] result; switch (m_format) { case Format.FLAC: result = mFlacR.ReadStreamReadOne(preferredFrames); break; case Format.AIFF: result = mAiffR.ReadStreamReadOne(mBr, preferredFrames); break; case Format.WAVE: result = mWaveR.ReadStreamReadOne(mBr, preferredFrames); break; case Format.DSF: result = mDsfR.ReadStreamReadOne(mBr, preferredFrames); break; case Format.DSDIFF: result = mDsdiffR.ReadStreamReadOne(mBr, preferredFrames); break; default: System.Diagnostics.Debug.Assert(false); result = new byte[0]; break; } return(result); }
private PcmData FlacScanDopMarker(PcmData pcmData, FlacDecodeIF fdif) { // 1個PCMデータを読み出す。 int ercd = 0; var buff = fdif.ReadStreamReadOne(PcmDataLib.PcmData.DOP_SCAN_FRAMES, out ercd); bool bDoP = pcmData.ScanDopMarker(buff); if (bDoP) { pcmData.SampleDataType = PcmData.DataType.DoP; } return(pcmData); }
/// <summary> /// PCMデータを読み出す。 /// </summary> /// <param name="preferredFrames">読み込みたいフレーム数。1Mフレームぐらいにすると良い。(このフレーム数のデータが戻るとは限らない)</param> /// <returns>PCMデータが詰まったバイト列。0要素の配列の場合、もう終わり。</returns> public byte[] StreamReadOne(int preferredFrames, out int ercd) { ercd = 0; // FLACのデコーダーはエラーコードを戻すことがある。 // 他のデコーダーは、データ領域に構造がないので読み出しエラーは特にない。System.IOExceptionが起きることはある。 byte[] result; switch (m_format) { case Format.FLAC: result = mFlacR.ReadStreamReadOne(preferredFrames, out ercd); break; case Format.AIFF: result = mAiffR.ReadStreamReadOne(mBr, preferredFrames); break; case Format.WAVE: result = mWaveR.ReadStreamReadOne(mBr, preferredFrames); break; case Format.DSF: result = mDsfR.ReadStreamReadOne(mBr, preferredFrames); break; case Format.DSDIFF: result = mDsdiffR.ReadStreamReadOne(mBr, preferredFrames); break; case Format.MP3: if (int.MaxValue < mMp3Reader.data.LongLength) { result = new byte[0]; } else { result = mMp3Reader.data.ToArray(); } break; default: System.Diagnostics.Debug.Assert(false); result = new byte[0]; break; } return(result); }