예제 #1
0
        /// <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);
        }
예제 #2
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);
        }