public static MemoryStream GetWavAsMemoryStream(this byte[] data, int sampleRate, int audioChannels = 1, int bitsPerSample = 16)
        {
            MemoryStream memoryStream = new MemoryStream();

            Wav.WriteHeader(memoryStream, sampleRate, audioChannels, bitsPerSample);
            Wav.SeekPastHeader(memoryStream);
            memoryStream.Write(data, 0, data.Length);
            Wav.UpdateHeader(memoryStream);
            return(memoryStream);
        }
        public static MemoryStream GetWavAsMemoryStream(this Stream data, int sampleRate, int audioChannels = 1, int bitsPerSample = 16)
        {
            MemoryStream memoryStream = new MemoryStream();

            Wav.WriteHeader(memoryStream, sampleRate, audioChannels, bitsPerSample);
            Wav.SeekPastHeader(memoryStream);
            data.Position = 0L;
            data.CopyTo(memoryStream);
            Wav.UpdateHeader(memoryStream);
            return(memoryStream);
        }
        public static void WriteHeader(Stream stream, int sampleRate, int audioChannels = 1, int bitsPerSample = 16)
        {
            int      num      = bitsPerSample / 8;
            Encoding uTF      = Encoding.UTF8;
            long     position = stream.Position;

            stream.Seek(0L, 0);
            stream.Write(uTF.GetBytes("RIFF"), 0, 4);
            stream.Write(BitConverter.GetBytes(0), 0, 4);
            stream.Write(uTF.GetBytes("WAVE"), 0, 4);
            stream.Write(uTF.GetBytes("fmt "), 0, 4);
            stream.Write(BitConverter.GetBytes(16), 0, 4);
            stream.Write(BitConverter.GetBytes(1), 0, 2);
            stream.Write(BitConverter.GetBytes((short)audioChannels), 0, 2);
            stream.Write(BitConverter.GetBytes(sampleRate), 0, 4);
            stream.Write(BitConverter.GetBytes(sampleRate * num * audioChannels), 0, 4);
            stream.Write(BitConverter.GetBytes((short)num), 0, 2);
            stream.Write(BitConverter.GetBytes((short)bitsPerSample), 0, 2);
            stream.Write(uTF.GetBytes("data"), 0, 4);
            stream.Write(BitConverter.GetBytes(0), 0, 4);
            Wav.UpdateHeader(stream);
            stream.Seek(position, 0);
        }