Ejemplo n.º 1
0
        /*
         * public struct WaveInCaps
         * {
         *  public short wMid;
         *  public short wPid;
         *  public int vDriverVersion;
         *  [MarshalAs(UnmanagedType.ByValTStr, SizeConst = WinMM.MAXPNAMELEN)] public string szPname;
         *  public int dwFormats;
         *  public short wChannels;
         * }*/

        #endregion

        public static byte[] WriteWAVFile(WaveFormat wf, byte[][] rawData)
        {
            var bw      = new MemoryStream();
            var rawSize = 0;

            for (var j = 0; j < rawData.Length; j++)
            {
                rawSize += rawData[j].Length;
            }
            //RIFF HEADER
            bw.Write(Encoding.ASCII.GetBytes("RIFF"), 0, 4);
            bw.Write(BitConverter.GetBytes(rawSize + 36), 0, 4);
            bw.Write(Encoding.ASCII.GetBytes("WAVE".ToCharArray()), 0, 4);

            // SUBCHUNK
            bw.Write(Encoding.ASCII.GetBytes("fmt ".ToCharArray()), 0, 4);
            bw.Write(BitConverter.GetBytes(16), 0, 4);
            var chunk = MarshalUtil.StructureToByteArray(wf);

            bw.Write(chunk, 0, chunk.Length);

            // DATA CHUNK
            bw.Write(Encoding.ASCII.GetBytes("data".ToCharArray()), 0, 4);
            bw.Write(BitConverter.GetBytes(rawSize), 0, 4);
            for (var i = 0; i < rawData[0].Length; i += wf.BitsPerSample / 8)
            {
                for (var j = 0; j < rawData.Length; j++)
                {
                    bw.WriteByte(rawData[j][i]);
                    if (wf.BitsPerSample == 16)
                    {
                        bw.WriteByte(rawData[j][i + 1]);
                    }
                }
            }

            return(bw.ToArray());
        }
Ejemplo n.º 2
0
        public static void WriteWAVFile(string filePath, WaveFormat wf, byte[][] rawData)
        {
            var fileStream = File.OpenWrite(filePath);
            var rawSize    = 0;

            for (var j = 0; j < rawData.Length; j++)
            {
                rawSize += rawData[j].Length;
            }
            //RIFF HEADER
            fileStream.Write(Encoding.ASCII.GetBytes("RIFF"), 0, 4);
            fileStream.Write(BitConverter.GetBytes(rawSize + 36), 0, 4);
            fileStream.Write(Encoding.ASCII.GetBytes("WAVE".ToCharArray()), 0, 4);

            // SUBCHUNK
            fileStream.Write(Encoding.ASCII.GetBytes("fmt ".ToCharArray()), 0, 4);
            fileStream.Write(BitConverter.GetBytes(16), 0, 4);
            var chunk = MarshalUtil.StructureToByteArray(wf);

            fileStream.Write(chunk, 0, chunk.Length);

            // DATA CHUNK
            fileStream.Write(Encoding.ASCII.GetBytes("data".ToCharArray()), 0, 4);
            fileStream.Write(BitConverter.GetBytes(rawSize), 0, 4);
            for (var i = 0; i < rawData[0].Length; i += wf.BitsPerSample / 8)
            {
                for (var j = 0; j < rawData.Length; j++)
                {
                    fileStream.WriteByte(rawData[j][i]);
                    if (wf.BitsPerSample == 16)
                    {
                        fileStream.WriteByte(rawData[j][i + 1]);
                    }
                }
            }

            fileStream.Close();
        }