//dataChunk ReadDataHeader() - 2004 July 28 //Again, not much to say. public dataChunk ReadDataHeader() { data = new dataChunk(); data.sChunkID = "data"; data.dwChunkSize = reader.ReadUInt32(); data.lFilePosition = reader.BaseStream.Position; if (fact != null) { data.dwNumSamples = fact.dwNumSamples; } else { data.dwNumSamples = data.dwChunkSize / (format.dwBitsPerSample / 8 * format.wChannels); } //The above could be written as data.dwChunkSize / format.wBlockAlign, but I want to emphasize what the frames look like. data.dwMinLength = (data.dwChunkSize / format.dwAvgBytesPerSec) / 60; data.dSecLength = ((double)data.dwChunkSize / (double)format.dwAvgBytesPerSec) - (double)data.dwMinLength * 60; return(data); }
public WaveFile(string filename) { reader = new WaveFileReader(filename); maindata = reader.ReadMainFileHeader(); maindata.FileName = filename; long chunkSize = 0; string chunkName = null; while (chunkName != "data" && reader.GetPosition() < (long)maindata.dwFileLength && reader.GetPosition() + chunkSize < maindata.dwFileLength) { chunkName = reader.GetChunkName(); switch (chunkName) { case "fmt ": format = reader.ReadFormatHeader(); chunkSize = format.dwChunkSize; break; case "fact": fact = reader.ReadFactHeader(); chunkSize = fact.dwChunkSize; break; case "data": data = reader.ReadDataHeader(); chunkSize = data.dwChunkSize; break; default: //This provides the required skipping of unsupported chunks. // reader.AdvanceToNext(); chunkSize = 0; break; } } }