Exemplo n.º 1
0
        public static bool ParseWavHeader(byte[] header, out WavFileInfo info)
        {
            //Parse
            int    pos     = 0;
            string fileTag = ReadWavTag(header, ref pos);
            int    fileLen = ReadWavInt32(header, ref pos);
            string wavTag  = ReadWavTag(header, ref pos);
            string fmtTag  = ReadWavTag(header, ref pos);

            ReadWavInt32(header, ref pos); //Unknown, 16
            short  formatTag      = ReadWavInt16(header, ref pos);
            short  channels       = ReadWavInt16(header, ref pos);
            int    fileSampleRate = ReadWavInt32(header, ref pos);
            int    avgBytesPerSec = ReadWavInt32(header, ref pos);
            short  blockAlign     = ReadWavInt16(header, ref pos);
            short  bitsPerSample  = ReadWavInt16(header, ref pos);
            string dataTag        = ReadWavTag(header, ref pos);
            int    dataLen        = ReadWavInt32(header, ref pos);

            //Validate
            if (fileTag != "RIFF" || wavTag != "WAVE" || fmtTag != "fmt " || dataTag != "data")
            {
                info = new WavFileInfo();
                return(false);
            }

            //Create
            info = new WavFileInfo
            {
                bitsPerSample = bitsPerSample,
                channels      = channels,
                sampleRate    = fileSampleRate
            };
            return(true);
        }
Exemplo n.º 2
0
        public static byte[] CreateHeader(WavFileInfo info, int length = -1)
        {
            //Allocate
            byte[] buffer = new byte[HEADER_LENGTH];
            int    offset = 0;

            //Calculate
            short blockAlign     = (short)(info.channels * (info.bitsPerSample / 8));
            int   avgBytesPerSec = info.sampleRate * (int)blockAlign;

            //Write
            WriteTag(buffer, ref offset, "RIFF");
            WriteSignedInt(buffer, ref offset, length); //Length
            WriteTag(buffer, ref offset, "WAVE");
            WriteTag(buffer, ref offset, "fmt ");
            WriteSignedInt(buffer, ref offset, 16);
            WriteSignedShort(buffer, ref offset, 1); //Format tag
            WriteSignedShort(buffer, ref offset, info.channels);
            WriteSignedInt(buffer, ref offset, info.sampleRate);
            WriteSignedInt(buffer, ref offset, avgBytesPerSec);
            WriteSignedShort(buffer, ref offset, blockAlign);
            WriteSignedShort(buffer, ref offset, info.bitsPerSample);
            WriteTag(buffer, ref offset, "data");
            WriteSignedInt(buffer, ref offset, length); //Length

            return(buffer);
        }
Exemplo n.º 3
0
        public static bool IdentifyWavFile(string path, out WavFileInfo info)
        {
            bool ok;

            byte[] header = new byte[WavHeaderUtil.HEADER_LENGTH];
            using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
            {
                fs.Read(header, 0, WavHeaderUtil.HEADER_LENGTH);
                ok = WavHeaderUtil.ParseWavHeader(header, out info);
            }
            return(ok);
        }
Exemplo n.º 4
0
        public WavFileWriter(Stream underlyingStream, int sampleRate, short channels, SampleFormat format, int bufferSize) : base(underlyingStream)
        {
            //Create wrapper
            writer = new StreamSampleWriter(underlyingStream, format, sampleRate, WavHeaderUtil.HEADER_LENGTH, channels, bufferSize);

            //Create info
            info = new WavFileInfo
            {
                bitsPerSample = writer.BitsPerSample,
                channels      = channels,
                sampleRate    = sampleRate
            };

            //Write header
            byte[] header = WavHeaderUtil.CreateHeader(info);
            underlyingStream.Position = 0;
            underlyingStream.Write(header, 0, header.Length);
        }
Exemplo n.º 5
0
 public static bool ParseWavHeader(Stream s, out WavFileInfo info)
 {
     byte[] data = new byte[WavHeaderUtil.HEADER_LENGTH];
     s.Read(data, 0, data.Length);
     return(ParseWavHeader(data, out info));
 }