private void ParseAtracData(Stream Stream) { var RiffWaveReader = new RiffWaveReader(); RiffWaveReader.HandleChunk += (ChunkType, ChunkStream) => { switch (ChunkType) { case "fmt ": Format = ChunkStream.ReadStructPartially<At3FormatStruct>(); break; case "fact": Fact = ChunkStream.ReadStructPartially<FactStruct>(); break; case "smpl": // Loop info Smpl = ChunkStream.ReadStructPartially<SmplStruct>(); LoopInfoList = ChunkStream.ReadStructVector<LoopInfoStruct>(Smpl.LoopCount); Console.WriteLine("AT3 smpl: {0}", Smpl.ToStringDefault()); foreach (var LoopInfo in LoopInfoList) Console.WriteLine("Loop: {0}", LoopInfo.ToStringDefault()); break; case "data": this.DataStream = ChunkStream; break; default: throw (new NotImplementedException(String.Format("Can't handle chunk '{0}'", ChunkType))); } }; RiffWaveReader.Parse(Stream); }
private void ParseWavData(Stream Stream) { var RiffWaveReader = new RiffWaveReader(); WavFormatStruct WavFormat; RiffWaveReader.HandleChunk += (ChunkType, ChunkStream) => { switch (ChunkType) { case "fmt ": WavFormat = ChunkStream.ReadStruct<WavFormatStruct>(); break; case "data": #if false DecodedSamples = new ArrayWrapper<StereoShortSoundSample>(PointerUtils.ByteArrayToArray<StereoShortSoundSample>(ChunkStream.ReadAll())); #else DecodedSamples = ChunkStream.ConvertToStreamStructCachedArrayWrapper<StereoShortSoundSample>(16 * 1024); #endif break; default: throw (new NotImplementedException(String.Format("Can't handle chunk '{0}'", ChunkType))); } }; RiffWaveReader.Parse(Stream); //new WaveStream().WriteWave(@"c:\temp\3.wav", DecodedData); Console.WriteLine("DecodedSamples: {0}", DecodedSamples.Length); Console.WriteLine("EndSample: {0}", Fact.EndSample); if (Fact.EndSample == 0) { Fact.EndSample = DecodedSamples.Length / 2; } //Console.ReadKey(); }