Пример #1
0
        public static void ReadHeaders(Stream stream, out FmtHeader fmtHeader, out DataHeader dataHeader, out long dataStart)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }
            if (!BitConverter.IsLittleEndian)
            {
                throw new InvalidOperationException("Unsupported system endianness.");
            }
            if (!IsWavStream(stream))
            {
                throw new InvalidOperationException("Invalid WAV header.");
            }
            EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream);

            fmtHeader        = default(FmtHeader);
            dataHeader       = default(DataHeader);
            dataStart        = 0L;
            stream.Position += 12L;
            bool flag  = false;
            bool flag2 = false;

            while (!flag || !flag2)
            {
                int num = engineBinaryReader.ReadInt32();
                if (num == MakeFourCC("fmt "))
                {
                    stream.Position -= 4L;
                    fmtHeader        = engineBinaryReader.ReadStruct <FmtHeader>();
                    flag             = true;
                }
                else if (num == MakeFourCC("data"))
                {
                    stream.Position -= 4L;
                    dataHeader       = engineBinaryReader.ReadStruct <DataHeader>();
                    dataStart        = stream.Position;
                    flag2            = true;
                }
                else
                {
                    int num2 = engineBinaryReader.ReadInt32();
                    stream.Position += num2;
                }
            }
            if (fmtHeader.Type != 1 || fmtHeader.ChannelsCount < 1 || fmtHeader.ChannelsCount > 2 || fmtHeader.SamplingFrequency < 8000 || fmtHeader.SamplingFrequency > 48000 || fmtHeader.BitsPerChannel != 16)
            {
                throw new InvalidOperationException("Unsupported WAV format.");
            }
        }
Пример #2
0
        public static void Save(SoundData soundData, Stream stream)
        {
            if (soundData == null)
            {
                throw new ArgumentNullException("soundData");
            }
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }
            EngineBinaryWriter engineBinaryWriter = new EngineBinaryWriter(stream);
            WavHeader          structure          = default(WavHeader);

            structure.Riff     = MakeFourCC("RIFF");
            structure.FileSize = Utilities.SizeOf <WavHeader>() + Utilities.SizeOf <FmtHeader>() + Utilities.SizeOf <DataHeader>() + soundData.Data.Length;
            structure.Wave     = MakeFourCC("WAVE");
            engineBinaryWriter.WriteStruct(structure);
            FmtHeader structure2 = default(FmtHeader);

            structure2.Fmt               = MakeFourCC("fmt ");
            structure2.FormatSize        = 16;
            structure2.Type              = 1;
            structure2.ChannelsCount     = (short)soundData.ChannelsCount;
            structure2.SamplingFrequency = soundData.SamplingFrequency;
            structure2.BytesPerSecond    = soundData.ChannelsCount * 2 * soundData.SamplingFrequency;
            structure2.BytesPerSample    = (short)(soundData.ChannelsCount * 2);
            structure2.BitsPerChannel    = 16;
            engineBinaryWriter.WriteStruct(structure2);
            DataHeader structure3 = default(DataHeader);

            structure3.Data     = MakeFourCC("data");
            structure3.DataSize = soundData.Data.Length * 2;
            engineBinaryWriter.WriteStruct(structure3);
            byte[] array = new byte[soundData.Data.Length * 2];
            Buffer.BlockCopy(soundData.Data, 0, array, 0, array.Length);
            stream.Write(array, 0, array.Length);
        }