public WaveFile(string filename)
{
fFileName = filename;
RIFFStreamReader fReader = new RIFFStreamReader(filename);
fBinaryReader = fReader.BinaryReader;
fHeader = fReader.ReadHeader();
// Read the chunks from the file
uint chunkName = 0;
while (fReader.Position < (long) fHeader.dwFileLength)
{
chunkName = fReader.ReadFourCC();
switch (chunkName)
{
case FOURCC.fmt:
fFormat = fReader.ReadFormatChunk();
if (fReader.Position + fFormat.dwChunkSize == fHeader.dwFileLength)
return;
break;
case FOURCC.fact:
fFact = fReader.ReadFactChunk();
if (fReader.Position + fFact.dwChunkSize == fHeader.dwFileLength)
return;
break;
case FOURCC.data:
fData = fReader.ReadDataChunk();
if (fReader.Position + fData.dwChunkSize == fHeader.dwFileLength)
return;
break;
default:
// Skip over unsupported chunks.
fReader.AdvanceToNext();
break;
}
}
}