// --------------------------------------------------------------------------- private bool HeaderIsValid(WAVRecord WAVData) { bool result = true; // Header validation if (!Utils.StringEqualsArr("RIFF", WAVData.RIFFHeader)) { result = false; } if (!Utils.StringEqualsArr("WAVE", WAVData.WAVEHeader)) { result = false; } if (!Utils.StringEqualsArr("fmt ", WAVData.FormatHeader)) { result = false; } if ((WAVData.ChannelNumber != WAV_CM_MONO) && (WAVData.ChannelNumber != WAV_CM_STEREO)) { result = false; } return(result); }
// ********************* Auxiliary functions & voids ******************** private bool ReadWAV(String FileName, ref WAVRecord WAVData) { bool result = true; FileStream fs = null; BinaryReader SourceFile = null; try { // Set read-access and open file fs = new FileStream(FileName, FileMode.Open, FileAccess.Read); SourceFile = new BinaryReader(fs); // Read header WAVData.RIFFHeader = SourceFile.ReadChars(WAVData.RIFFHeader.Length); WAVData.FileSize = SourceFile.ReadInt32(); WAVData.WAVEHeader = SourceFile.ReadChars(WAVData.WAVEHeader.Length); WAVData.FormatHeader = SourceFile.ReadChars(WAVData.FormatHeader.Length); WAVData.FormatSize = SourceFile.ReadInt32(); WAVData.FormatID = SourceFile.ReadUInt16(); WAVData.ChannelNumber = SourceFile.ReadUInt16(); WAVData.SampleRate = SourceFile.ReadInt32(); WAVData.BytesPerSecond = SourceFile.ReadInt32(); WAVData.BlockAlign = SourceFile.ReadUInt16(); WAVData.BitsPerSample = SourceFile.ReadUInt16(); WAVData.DataHeader = SourceFile.ReadChars(WAVData.DataHeader.Length); // Read number of samples if exists if (!Utils.StringEqualsArr(DATA_CHUNK, WAVData.DataHeader)) { SourceFile.BaseStream.Seek(WAVData.FormatSize + 28, SeekOrigin.Begin); WAVData.SampleNumber = SourceFile.ReadInt32(); } } catch (Exception e) { System.Console.WriteLine(e.StackTrace); result = false; } if (SourceFile != null) { SourceFile.Close(); } if (fs != null) { fs.Close(); } return(result); }
// --------------------------------------------------------------------------- public bool ReadFromFile(String FileName) { WAVRecord WAVData = new WAVRecord(); // Reset and load header data from file to variable FResetData(); WAVData.Reset(); bool result = ReadWAV(FileName, ref WAVData); // Process data if loaded and header valid if ((result) && (HeaderIsValid(WAVData))) { FValid = true; // Fill properties with header data FFormatID = WAVData.FormatID; FChannelNumber = (byte)WAVData.ChannelNumber; FSampleRate = (uint)WAVData.SampleRate; FBytesPerSecond = (uint)WAVData.BytesPerSecond; FBlockAlign = WAVData.BlockAlign; FBitsPerSample = (byte)WAVData.BitsPerSample; FSampleNumber = WAVData.SampleNumber; if (Utils.StringEqualsArr(DATA_CHUNK, WAVData.DataHeader)) { FHeaderSize = 44; } else { FHeaderSize = (ushort)(WAVData.FormatSize + 40); } FFileSize = (uint)WAVData.FileSize + 8; if (FHeaderSize > FFileSize) { FHeaderSize = (ushort)FFileSize; } } return(result); }
// --------------------------------------------------------------------------- public bool ReadFromFile(String FileName) { WAVRecord WAVData = new WAVRecord(); // Reset and load header data from file to variable FResetData(); WAVData.Reset(); bool result = ReadWAV(FileName, ref WAVData); // Process data if loaded and header valid if ( (result) && (HeaderIsValid(WAVData)) ) { FValid = true; // Fill properties with header data FFormatID = WAVData.FormatID; FChannelNumber = (byte)WAVData.ChannelNumber; FSampleRate = (uint)WAVData.SampleRate; FBytesPerSecond = (uint)WAVData.BytesPerSecond; FBlockAlign = WAVData.BlockAlign; FBitsPerSample = (byte)WAVData.BitsPerSample; FSampleNumber = WAVData.SampleNumber; if ( Utils.StringEqualsArr(DATA_CHUNK, WAVData.DataHeader) ) FHeaderSize = 44; else FHeaderSize = (ushort)(WAVData.FormatSize + 40); FFileSize = (uint)WAVData.FileSize + 8; if (FHeaderSize > FFileSize) FHeaderSize = (ushort)FFileSize; } return result; }
// --------------------------------------------------------------------------- private bool HeaderIsValid(WAVRecord WAVData) { bool result = true; // Header validation if (! Utils.StringEqualsArr("RIFF",WAVData.RIFFHeader)) result = false; if (! Utils.StringEqualsArr("WAVE",WAVData.WAVEHeader)) result = false; if (! Utils.StringEqualsArr("fmt ",WAVData.FormatHeader)) result = false; if ( (WAVData.ChannelNumber != WAV_CM_MONO) && (WAVData.ChannelNumber != WAV_CM_STEREO) ) result = false; return result; }
// ********************* Auxiliary functions & voids ******************** private bool ReadWAV(String FileName, ref WAVRecord WAVData) { bool result = true; FileStream fs = null; BinaryReader SourceFile = null; try { // Set read-access and open file fs = new FileStream(FileName, FileMode.Open, FileAccess.Read); SourceFile = new BinaryReader(fs); // Read header WAVData.RIFFHeader = SourceFile.ReadChars(WAVData.RIFFHeader.Length); WAVData.FileSize = SourceFile.ReadInt32(); WAVData.WAVEHeader = SourceFile.ReadChars(WAVData.WAVEHeader.Length); WAVData.FormatHeader = SourceFile.ReadChars(WAVData.FormatHeader.Length); WAVData.FormatSize = SourceFile.ReadInt32(); WAVData.FormatID = SourceFile.ReadUInt16(); WAVData.ChannelNumber = SourceFile.ReadUInt16(); WAVData.SampleRate = SourceFile.ReadInt32(); WAVData.BytesPerSecond = SourceFile.ReadInt32(); WAVData.BlockAlign = SourceFile.ReadUInt16(); WAVData.BitsPerSample = SourceFile.ReadUInt16(); WAVData.DataHeader = SourceFile.ReadChars(WAVData.DataHeader.Length); // Read number of samples if exists if ( ! Utils.StringEqualsArr(DATA_CHUNK,WAVData.DataHeader)) { SourceFile.BaseStream.Seek(WAVData.FormatSize + 28, SeekOrigin.Begin); WAVData.SampleNumber = SourceFile.ReadInt32(); } } catch (Exception e) { System.Console.WriteLine(e.StackTrace); result = false; } if (SourceFile != null) SourceFile.Close(); if (fs != null) fs.Close(); return result; }