コード例 #1
0
ファイル: Form1.cs プロジェクト: owntrolf/FourierTermProject
        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();
            }
        }
コード例 #2
0
ファイル: Form1.cs プロジェクト: owntrolf/FourierTermProject
        /// <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.";
        }