SoundLibrary.Wave.WaveReader.ReadHeader C# (CSharp) Method

ReadHeader() public static method

Wave ファイルストリームからヘッダを読み出す。
public static ReadHeader ( BinaryReader reader ) : FormatHeader
reader System.IO.BinaryReader 読み出し元のストリーム
return FormatHeader
		public static FormatHeader ReadHeader(BinaryReader reader)
		{
			byte[] buf;

			buf= reader.ReadBytes(4);

			if(!Util.Equal(buf, Util.RIFF))
			{
				throw new WaveException("このファイルはRIFF形式ではありません。");
			}

			reader.ReadBytes(4); //ファイルサイズ読み飛ばし。

			buf= reader.ReadBytes(4);
			if(!Util.Equal(buf, Util.WAVE))
			{
				throw new WaveException("このファイルはwave形式ではありません。");
			}

			// fmt chunk 読み出し
			FormatHeader header;
			while(true)
			{
				buf = reader.ReadBytes(4);
				int length = reader.ReadInt32();
				byte[] data = reader.ReadBytes(length);

				if(length < 16)
				{
					throw new WaveException("ヘッダ長が短すぎます。");
				}
				if(Util.Equal(buf, Util.FMT))
				{
					unsafe
					{
						fixed(byte* p= data)
						{
							header = *(FormatHeader*)p;
						}
					}
					break;
				}
			}
			return header;
		}

Usage Example

Ejemplo n.º 1
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