private void playBtn_Click(object sender, EventArgs e) { richTextBox1.Text = "Playing audio \n"; wavFile newWav = new wavFile(); newWav.RIFF = wave.RIFF; newWav.WAVE = wave.WAVE; newWav.fmt = wave.fmt; newWav.fmt_size = wave.fmt_size; newWav.format_tag = wave.format_tag; newWav.nchannels = wave.nchannels; newWav.samples_per_sec = wave.samples_per_sec; newWav.avg_bytes_per_sec = wave.avg_bytes_per_sec; newWav.nblock_align = wave.nblock_align; newWav.bits_per_sample = wave.bits_per_sample; newWav.data_size = samples.Length * newWav.nchannels * newWav.bits_per_sample / 8; newWav.filesize_minus_4 = newWav.data_size / 2 + 36; byte[] riff = BitConverter.GetBytes(newWav.RIFF); byte[] minus4 = BitConverter.GetBytes(newWav.filesize_minus_4); byte[] bWave = BitConverter.GetBytes(newWav.WAVE); byte[] fmt = BitConverter.GetBytes(newWav.fmt); byte[] fmt_size = BitConverter.GetBytes(newWav.fmt_size); byte[] format_tag = BitConverter.GetBytes(newWav.format_tag); byte[] nchannels = BitConverter.GetBytes(newWav.nchannels); byte[] samplerate = BitConverter.GetBytes(newWav.samples_per_sec); byte[] byterate = BitConverter.GetBytes(newWav.avg_bytes_per_sec); byte[] nblock = BitConverter.GetBytes(newWav.nblock_align); byte[] bitspersamp = BitConverter.GetBytes(newWav.bits_per_sample); byte[] dataid = Encoding.ASCII.GetBytes("data"); byte[] subch2 = BitConverter.GetBytes(newWav.data_size); //turn data into bytes short[] shortArr = new short[samples.Length]; for (int i = 0; i < samples.Length; i++) { shortArr[i] = (short)samples[i]; } byte[] byteStream = new byte[shortArr.Length * sizeof(short)]; Buffer.BlockCopy(shortArr, 0, byteStream, 0, samples.Length * sizeof(short)); ////byte[] byteStream = BitConverter.GetBytes(shortArr*); // ////Get total amount of bytes int length = riff.Length + minus4.Length + bWave.Length + fmt.Length + fmt_size.Length + format_tag.Length + nchannels.Length + samplerate.Length + byterate.Length + nblock.Length + bitspersamp.Length + dataid.Length + subch2.Length + byteStream.Length; byte[] audioStream = new byte[length]; // Buffer.BlockCopy(riff, 0, audioStream, 0, 4); Buffer.BlockCopy(minus4, 0, audioStream, 4, 4); Buffer.BlockCopy(bWave, 0, audioStream, 8, 4); Buffer.BlockCopy(fmt, 0, audioStream, 12, 4); Buffer.BlockCopy(fmt_size, 0, audioStream, 16, 4); Buffer.BlockCopy(format_tag, 0, audioStream, 20, 2); Buffer.BlockCopy(nchannels, 0, audioStream, 22, 2); Buffer.BlockCopy(samplerate, 0, audioStream, 24, 4); Buffer.BlockCopy(byterate, 0, audioStream, 28, 4); Buffer.BlockCopy(nblock, 0, audioStream, 32, 2); Buffer.BlockCopy(bitspersamp, 0, audioStream, 34, 2); Buffer.BlockCopy(dataid, 0, audioStream, 36, 4); Buffer.BlockCopy(subch2, 0, audioStream, 40, 4); Buffer.BlockCopy(byteStream, 0, audioStream, 44, byteStream.Length); richTextBox1.Text += "Created byte audio \n"; using (MemoryStream ms = new MemoryStream(audioStream)) { richTextBox1.Text += "Starting audio now"; player = new SoundPlayer(); player.Stream = ms; player.Load(); player.PlaySync(); } }
/// <summary> /// Function to do the saving portion into a file /// </summary> /// <param name="filePath">The filepath a user has selected</param> public void save(string filePath) { FileStream fileStream = new FileStream(filePath, FileMode.Create); BinaryWriter writer = new BinaryWriter(fileStream); wavFile newWav = new wavFile(); newWav.RIFF = wave.RIFF; newWav.WAVE = wave.WAVE; newWav.fmt = wave.fmt; newWav.fmt_size = wave.fmt_size; newWav.format_tag = wave.format_tag; newWav.nchannels = wave.nchannels; newWav.samples_per_sec = wave.samples_per_sec; newWav.avg_bytes_per_sec = wave.avg_bytes_per_sec; newWav.nblock_align = wave.nblock_align; newWav.bits_per_sample = wave.bits_per_sample; newWav.data_size = samples.Length * newWav.nchannels * newWav.bits_per_sample / 8; newWav.filesize_minus_4 = newWav.data_size / 2 + 36; //newWav.data = sSamples; richTextBox1.Text += "Done converting iSamples"; //Writing writer.Write('R'); writer.Write('I'); writer.Write('F'); writer.Write('F'); writer.Write(newWav.filesize_minus_4); writer.Write(newWav.WAVE); writer.Write('f'); writer.Write('m'); writer.Write('t'); writer.Write(' '); writer.Write(newWav.fmt_size); writer.Write(newWav.format_tag); writer.Write(newWav.nchannels); writer.Write(newWav.samples_per_sec); writer.Write(newWav.avg_bytes_per_sec); writer.Write(newWav.nblock_align); writer.Write(newWav.bits_per_sample); string data = "data"; writer.Write(data.ToCharArray()); writer.Write(newWav.data_size); //Needs to convert to short if it is 2bytes long short[] sSamples = new short[samples.Length]; for (int i = 0; i < sSamples.Length; i++) { sSamples[i] = (short)samples[i]; } byte[] byteStream = new byte[sSamples.Length * 2]; Buffer.BlockCopy(sSamples, 0, byteStream, 0, byteStream.Length); //Writing the data bytes foreach (byte dataPoint in byteStream) { writer.Write(dataPoint); } //writer.Seek(4, SeekOrigin.Begin); //uint filesize = (uint)writer.BaseStream.Length; //writer.Write(filesize - 8); writer.Close(); fileStream.Close(); richTextBox1.Text += "Completed saving file."; }