/// <summary> /// Creates a new WAVDataChunk from a binary reader.<para/> /// ENSURE YOU'RE CALLING IN THE RIGHT ORDER: WAVHeader => WAVFormatChunk => WAVDataChunk. /// </summary> /// <param name="reader">The <see cref="BinaryReader"/> to take the data from.</param> /// <returns></returns> public static WAVDataChunk CreateFromStream(BinaryReader reader, WAVFormatChunk fmtChunk) { WAVDataChunk data = new WAVDataChunk(fmtChunk); // Make sure we're in the right place. char[] id = reader.ReadChars(4); string idAsString = string.Concat(id); while (idAsString != ID) { Console.WriteLine("Unexpected ID when trying to create format chunk (got [" + idAsString + "], expecting [" + ID + "] || CURRENT POS: " + reader.BaseStream.Position + ")"); int size = reader.ReadInt32(); reader.BaseStream.Seek(size, SeekOrigin.Current); id = reader.ReadChars(4); idAsString = string.Concat(id); } uint length = reader.ReadUInt32(); data.Data = new short[length / 2]; byte[] raw = new byte[length]; reader.Read(raw, 0, raw.Length); for (int i = 0; i < raw.Length; i += 2) { byte b0 = raw[i]; byte b1 = raw[i + 1]; short val = (short)((b1 << 8) + b0); data.Data[i / 2] = val; } return(data); }
/// <summary> /// Construct a new WEMHeader. /// </summary> /// <param name="dataChunk"></param> public WAVHeader(WAVDataChunk dataChunk) { DataChunk = dataChunk; }