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);
        }
Exemple #2
0
        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;
        }
Exemple #3
0
        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;
        }
Exemple #5
0
        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);
        }