예제 #1
0
 public static RiffHeader GetRiffHeader(Stream stream)
 {
     var header=new RiffHeader();
     var rawData=new byte[12];
     stream.Read(rawData,0,rawData.Length);
     header.ID=Encoding.ASCII.GetString(rawData.Take(4).ToArray());
     header.Size=BitConverter.ToUInt32(rawData.Skip(4).Take(4).ToArray(),0);
     header.Format=Encoding.ASCII.GetString(rawData.Skip(8).ToArray());
     return header;
 }
예제 #2
0
        public static RiffHeader GetRiffHeader(Stream stream)
        {
            var header  = new RiffHeader();
            var rawData = new byte[12];

            stream.Read(rawData, 0, rawData.Length);
            header.ID     = Encoding.ASCII.GetString(rawData.Take(4).ToArray());
            header.Size   = BitConverter.ToUInt32(rawData.Skip(4).Take(4).ToArray(), 0);
            header.Format = Encoding.ASCII.GetString(rawData.Skip(8).ToArray());
            return(header);
        }
예제 #3
0
        public WaveFile(string fileName)
        {
            var stream = File.OpenRead(fileName);

            RiffHeader = RiffHeader.GetRiffHeader(stream);
            var pos = stream.Position;

            FormatChunk     = FormatChunk.GetFormatChunk(stream);
            stream.Position = pos + FormatChunk.Size + 8;
            DataChunk       = DataChunk.GetDataChunk(stream);
            if (stream.Length < 12 + 8 + FormatChunk.Size + 8 + DataChunk.Size)
            {
                throw new InvalidDataException("WAVEファイルの形式が不正です。");
            }
            var waveDataStream = new BinaryReader(stream);

            Data = new short[DataChunk.Size / 2];
            unsafe {
                fixed(short *ptr = &Data[0])
                using (var unmanagedStream = new UnmanagedMemoryStream((byte *)ptr, DataChunk.Size, DataChunk.Size, FileAccess.Write))
                    stream.CopyTo(unmanagedStream);
            }
            stream.Dispose();
        }