Skip to content

Instantly share code, notes, and snippets.

@dharmatech
Created June 10, 2016 04:14
Show Gist options
  • Select an option

  • Save dharmatech/6cb8fb83e46d56a1cc37f32e42559714 to your computer and use it in GitHub Desktop.

Select an option

Save dharmatech/6cb8fb83e46d56a1cc37f32e42559714 to your computer and use it in GitHub Desktop.

Revisions

  1. dharmatech created this gist Jun 10, 2016.
    60 changes: 60 additions & 0 deletions byte-beat.cs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,60 @@
    using System;
    using System.IO;
    using System.Media;

    namespace WavFileTest
    {
    class Program
    {
    static void Main(string[] args)
    {
    using (var stream = new MemoryStream())
    {
    var writer = new BinaryWriter(stream);

    writer.Write("RIFF".ToCharArray()); // chunk id
    writer.Write((UInt32)0); // chunk size
    writer.Write("WAVE".ToCharArray()); // format

    writer.Write("fmt ".ToCharArray()); // chunk id
    writer.Write((UInt32)16); // chunk size
    writer.Write((UInt16)1); // audio format

    var channels = 1;
    var sample_rate = 8000;
    var bits_per_sample = 8;

    writer.Write((UInt16)channels);
    writer.Write((UInt32)sample_rate);
    writer.Write((UInt32)(sample_rate * channels * bits_per_sample / 8)); // byte rate
    writer.Write((UInt16)(channels * bits_per_sample / 8)); // block align
    writer.Write((UInt16)bits_per_sample);

    writer.Write("data".ToCharArray());

    var seconds = 20;

    var data = new byte[sample_rate * seconds];

    for (var t = 0; t < data.Length; t++)
    data[t] = (byte)(
    t & t >> 8
    //t * (42 & t >> 10)
    //t | t % 255 | t % 257
    //t * (t >> 9 | t >> 13) & 16
    );

    writer.Write((UInt32)(data.Length * channels * bits_per_sample / 8));

    foreach (var elt in data) writer.Write(elt);

    writer.Seek(4, SeekOrigin.Begin); // seek to header chunk size field
    writer.Write((UInt32)(writer.BaseStream.Length - 8)); // chunk size

    stream.Seek(0, SeekOrigin.Begin);

    new SoundPlayer(stream).PlaySync();
    }
    }
    }
    }