/// <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);
        }
Exemple #3
0
        /// <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);
        }