RIFF Wave 形式のファイルから音声データを読み出す。
Inheritance: IDisposable
Ejemplo n.º 1
0
        }        //Read

        /// <summary>
        /// データの読み出し。
        /// </summary>
        /// <param name="l">左チャネルのデータ格納先。</param>
        /// <param name="r">右チャネルのデータ格納先。</param>
        /// <returns>実際に読み出したサンプル数。</returns>
        public int Read(short[] l, short[] r)
        {
            uint length = (uint)l.Length;
            int  i      = WaveReader.Read(this.reader, this.header, l, r);

            this.dataLength -= (uint)i;
            return(i);
        }        //Read
Ejemplo n.º 2
0
        /// <summary>
        /// Wave の生データをそのまま読み出す。
        /// </summary>
        /// <param name="data">読込先</param>
        /// <param name="offset">読込先の開始オフセット(バイト数)</param>
        /// <param name="length">読み出す長さ(バイト数)</param>
        /// <returns>実際に読み込んだ長さ(バイト数)</returns>
        public int ReadRawData(byte[] data, int offset, int length)
        {
            if (this.dataLength * this.header.blockSize < length)
            {
                length = (int)(this.dataLength * this.header.blockSize);
            }

            length           = WaveReader.ReadRawData(this.reader, data, offset, length);
            this.dataLength -= (uint)(length / this.header.blockSize);
            return(length);
        }
Ejemplo n.º 3
0
        }        //Read

        /// <summary>
        /// データの読み出し。
        /// </summary>
        /// <param name="length">読み出すサンプル数。</param>
        /// <param name="l">左チャネルのデータ格納先。</param>
        /// <param name="r">右チャネルのデータ格納先。</param>
        /// <returns>実際に読み出したサンプル数。</returns>
        public int Read(uint length, out short[] l, out short[] r)
        {
            l = null;
            r = null;
            if (this.reader == null)
            {
                return(0);
            }

            int i = WaveReader.Read(this.reader, this.header, length, out l, out r);

            this.dataLength -= (uint)i;
            return(i);
        }        //Read
Ejemplo n.º 4
0
 /// <summary>
 /// データ読み出し。
 /// </summary>
 /// <param name="reader">読み出し元ストリーム</param>
 /// <param name="header">Wave ヘッダ</param>
 /// <param name="length">読み出したい長さ</param>
 /// <param name="l">読み出し先配列(L ch)</param>
 /// <param name="r">読み出し先配列(R ch)</param>
 /// <returns>読み出したデータサンプル数</returns>
 public static int Read(BinaryReader reader, FormatHeader header, uint length, out short[] l, out short[] r)
 {
     if (header.IsStereo)
     {
         l = new short[length];
         r = new short[length];
     }
     else
     {
         l = new short[length];
         r = null;
     }
     return(WaveReader.Read(reader, header, l, r));
 }
Ejemplo n.º 5
0
        }        //Read

        /// <summary>
        /// データを読み飛ばす。
        /// </summary>
        /// <param name="length">読み飛ばす長さ</param>
        /// <returns>ファイルの末尾まで到達したら false を返す</returns>
        public bool Skip(int length)
        {
            if (this.reader == null)
            {
                return(false);
            }

            if (!WaveReader.Skip(this.reader, this.header, length))
            {
                this.dataLength = 0;
                return(false);
            }

            this.dataLength -= (uint)length;
            return(true);
        }        //Skip
Ejemplo n.º 6
0
        /// <summary>
        /// Wave ファイルを開く。
        /// </summary>
        /// <param name="reader">Wave ファイルを格納したストリーム</param>
        public void Open(BinaryReader reader)
        {
            if (this.reader != null)
            {
                this.reader.Close();
            }

            this.reader = reader;

            // ヘッダ読み出し
            this.header = WaveReader.ReadHeader(reader);

            if (this.header.id != 0x0001)
            {
                throw new WaveException("対応していないフォーマットです。");
            }

            // data chunk 読み出し
            int length = ReadDataChunk(reader);

            this.dataLength = (uint)(length / this.header.blockSize);
        }        //Open
Ejemplo n.º 7
0
        }        //Skip

        /// <summary>
        /// ウェーブデータの先頭に戻る。
        /// </summary>
        public void Restart()
        {
            this.reader.BaseStream.Seek(0, SeekOrigin.Begin);
            WaveReader.ReadDataChunk(this.reader);
        }
Ejemplo n.º 8
0
		}//Read

		/// <summary>
		/// ファイルから Wave データを読み出し。
		/// (後ろ0詰め)
		/// </summary>
		/// <param name="filename">ファイル名</param>
		/// <param name="length">読み込む長さ</param>
		/// <param name="skip">ファイルの先頭を読み飛ばす長さ</param>
		/// <param name="threshold">閾値。この値以下の音は無音とみなす</param>
		/// <param name="relative">閾値にピーク値からみた相対値を使う</param>
		/// <param name="dstLength">コピー後の配列の長さ</param>
		/// <returns>読み出したデータ</returns>
		static WaveData Read(
			string filename, int skip, int length,
			double threshold ,bool relative, int dstLength)
		{
			WaveReader reader = null;
			FormatHeader header;
			double[] l;
			double[] r;

			using(reader = new WaveReader(filename))
			{
				header = reader.Header;
				reader.Read(reader.Length, out l, out r);
			}

			if(relative) threshold *= Math.Max(GetPeekValue(l), GetPeekValue(r));
			skip += Math.Min(GetSilentLength(l, threshold), GetSilentLength(r, threshold));
			if(skip < 0 || skip + length >= l.Length) skip = 0;

			if(header.IsStereo)
				return new WaveTime(header, CopyArray(l, skip, length, dstLength), CopyArray(r, skip, length, dstLength));
			return new WaveMonaural(header, CopyArray(l, skip, length, dstLength));
		}//Read
Ejemplo n.º 9
0
		}//Read

		/// <summary>
		/// ファイルから Wave データを読み出し。
		/// (後ろ0詰め)
		/// </summary>
		/// <param name="filename">ファイル名</param>
		/// <param name="length">読み込む長さ</param>
		/// <param name="skip">ファイルの先頭を読み飛ばす長さ</param>
		/// <param name="dstLength">コピー後の配列の長さ</param>
		/// <returns>読み出したデータ</returns>
		static WaveData Read(string filename, int skip, int length, int dstLength)
		{
			WaveReader reader = null;
			FormatHeader header;
			double[] l;
			double[] r;

			using(reader = new WaveReader(filename))
			{
				header = reader.Header;
				reader.Skip(skip);
				reader.Read((uint)length, out l, out r);
			}

			if(header.IsStereo)
				return new WaveTime(header, CopyArray(l, 0, length, dstLength), CopyArray(r, 0, length, dstLength));
			return new WaveMonaural(header, CopyArray(l, 0, length, dstLength));
		}//Read
Ejemplo n.º 10
0
		public WaveStream(WaveReader reader)
		{
			this.reader = reader;
			this.buffer = null;
		}