void ReadAudioChunk (BitStream bs, int channel) { uint frameAudioLength = 0; uint audioDecompressedLength = 0; bool compressed = ((audioFlags[channel] & (int)ARFlags.Compressed) == (int)ARFlags.Compressed); bool is16 = ((audioFlags[channel] & (int)ARFlags.Is16Bit) == (int)ARFlags.Is16Bit); bool stereo = ((audioFlags[channel] & (int)ARFlags.Stereo) == (int)ARFlags.Stereo); bs.AssertAtByteBoundary (); bs.DebugFirst (); Console.WriteLine ("reading audio chunk length"); frameAudioLength = bs.ReadDWord (); Console.WriteLine ("audio chunk length = {0}", frameAudioLength); if (compressed) { audioDecompressedLength = bs.ReadDWord (); Console.WriteLine ("decompressed audio length = {0}", audioDecompressedLength); byte[] streamBuf = new byte[frameAudioLength]; bs.Read (streamBuf, 0, streamBuf.Length); audioOut[channel] = new byte[audioDecompressedLength]; if (is16) if (stereo) Decompress16Stereo (new BitStream (streamBuf), new MemoryStream (audioOut[channel])); else Decompress16Mono (new BitStream (streamBuf), new MemoryStream (audioOut[channel])); else if (stereo) Decompress8Stereo (new BitStream (streamBuf), new MemoryStream (audioOut[channel])); else Decompress8Mono (new BitStream (streamBuf), new MemoryStream (audioOut[channel])); } else { audioOut[channel] = new byte[frameAudioLength]; bs.Read (audioOut[channel], 0, (int)frameAudioLength); } }