示例#1
0
			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);
			}
示例#2
0
			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();
			}