static public Sound Read(Stream source) { BinaryReaderEx reader = new BinaryReaderEx(source); Sound result = new Sound(); int id = reader.ReadInt32(); if (id == 0x00394453) { int headerLength = reader.ReadInt32(); int sampleLength = reader.ReadInt32(); headerLength -= 12; if (headerLength > 0) { reader.ReadBytes(headerLength); } byte[] wavData = reader.ReadBytes(sampleLength); using (MemoryStream wavDataMem = new MemoryStream(wavData)) { using (WaveStream wavStream = new WaveFileReader(wavDataMem)) { byte[] rawWaveData = new byte[wavStream.Length]; wavStream.Read(rawWaveData, 0, (int)wavStream.Length); result.SetSound(rawWaveData, wavStream.WaveFormat); } } } return(result); }
public static Sound Read(Stream source) { BinaryReaderEx reader = new BinaryReaderEx(source); Sound result = new Sound(); int id = reader.ReadInt32(); if (id == 0x00394453) { int headerLength = reader.ReadInt32(); int sampleLength = reader.ReadInt32(); headerLength -= 12; if (headerLength > 0) reader.ReadBytes(headerLength); byte[] wavData = reader.ReadBytes(sampleLength); using (MemoryStream wavDataMem = new MemoryStream(wavData)) { using (WaveStream wavStream = new WaveFileReader(wavDataMem)) { byte[] rawWaveData = new byte[wavStream.Length]; wavStream.Read(rawWaveData, 0, (int)wavStream.Length); result.SetSound(rawWaveData, wavStream.WaveFormat); } } } return result; }
static public Sound Read(Stream source) { Sound result = new Sound(); BinaryReader reader = new BinaryReader(source); if (new string(reader.ReadChars(4)) == "2DX9") { int infoLength = reader.ReadInt32(); int dataLength = reader.ReadInt32(); reader.ReadInt16(); int channel = reader.ReadInt16(); int panning = reader.ReadInt16(); int volume = reader.ReadInt16(); int options = reader.ReadInt32(); reader.ReadBytes(infoLength - 24); byte[] wavData = reader.ReadBytes(dataLength); using (MemoryStream wavDataMem = new MemoryStream(wavData)) { using (WaveStream wavStream = new WaveFileReader(wavDataMem)) { int bytesToRead; // using a mux, we force all sounds to be 2 channels bytesToRead = (int)wavStream.Length; byte[] rawWaveData = new byte[bytesToRead]; int bytesRead = wavStream.Read(rawWaveData, 0, bytesToRead); result.SetSound(rawWaveData, wavStream.WaveFormat); // calculate output panning if (panning > 0x7F || panning < 0x01) { panning = 0x40; } result.Panning = ((float)panning - 1.0f) / 126.0f; // calculate output volume if (volume < 0x01) { volume = 0x01; } else if (volume > 0xFF) { volume = 0xFF; } result.Volume = VolumeTable[volume]; result.Channel = channel; } } } return(result); }
public static Sound Read(Stream source) { Sound result = new Sound(); BinaryReader reader = new BinaryReader(source); if (new string(reader.ReadChars(4)) == "2DX9") { int infoLength = reader.ReadInt32(); int dataLength = reader.ReadInt32(); reader.ReadInt16(); int channel = reader.ReadInt16(); int panning = reader.ReadInt16(); int volume = reader.ReadInt16(); int options = reader.ReadInt32(); reader.ReadBytes(infoLength - 24); byte[] wavData = reader.ReadBytes(dataLength); using (MemoryStream wavDataMem = new MemoryStream(wavData)) { using (WaveStream wavStream = new WaveFileReader(wavDataMem)) { int bytesToRead; // using a mux, we force all sounds to be 2 channels bytesToRead = (int)wavStream.Length; byte[] rawWaveData = new byte[bytesToRead]; int bytesRead = wavStream.Read(rawWaveData, 0, bytesToRead); result.SetSound(rawWaveData, wavStream.WaveFormat); // calculate output panning if (panning > 0x7F || panning < 0x01) panning = 0x40; result.Panning = ((float)panning - 1.0f) / 126.0f; // calculate output volume if (volume < 0x01) volume = 0x01; else if (volume > 0xFF) volume = 0xFF; result.Volume = VolumeTable[volume]; result.Channel = channel; } } } return result; }
static public Sound Read(byte[] source) { Sound result = new Sound(); string fileName = "tmp.wma"; File.WriteAllBytes(fileName, source); WMAFileReader fileReader = new WMAFileReader(fileName); File.Delete(fileName); using (WaveStream wavStream = WaveFormatConversionStream.CreatePcmStream(fileReader)) { int bytesToRead; // using a mux, we force all sounds to be 2 channels bytesToRead = (int)wavStream.Length; byte[] rawWaveData = new byte[bytesToRead]; int bytesRead = wavStream.Read(rawWaveData, 0, bytesToRead); result.SetSound(rawWaveData, wavStream.WaveFormat); } return(result); }