Skip to content

Latest commit

 

History

History
181 lines (142 loc) · 4.31 KB

README.md

File metadata and controls

181 lines (142 loc) · 4.31 KB

Bleep.js

Retro tones in js, one note at a time.

With Bleep, notes are appended to an asynchronous playback queue to allow composing scores directly in javascript.

Demo: http://michaelgarate.com/bleep/examples/

Bleep depends on AudioContext or webkitAudioContext, currently only available in Chrome and (untested) Safari. Some FireFox support thanks to cwilso's MonkeyPatch.

Basic usage

Calling bloop() generates a short, pleasing retro arp sound.

Bleep.bloop();

You can also call bloop() with a hash of parameters.

var params = {
  key: "C",           // default: "A"
  scale: "major",     // default: "minor"
  notes: 32,          // default: 8
  duration: 8,        // default: 16
  tempo: 90,          // default: 120
  octave: 4,          // default: 4
  octave_range: 2     // default: 1
}

Bleep.bloop(params);

Composing Tunes

Generate your own arpeggio with arp by passing a hash with optional parameters as above, with additional direction setting.

var params = {
  direction: "down",  // default: "up"
}
              
Bleep.arp(params); 
Bleep.start();

Add a simple tone to the queue with tone()

Bleep.tone("C4"); //Bleep.tone(note); // default duration: 16th note
Bleep.tone("A#2",16); //Bleep.tone(note, duration);
Bleep.tone("C", 2, 4); //Bleep.tone(note, duration, octave);
Bleep.start();

Valid Input Strings

// Notes

"A","B","C","D","E","F","G" // by default in octave 4
"A#","Ab","Bb","C#","Db","D#","Eb","F#","Gb","G#","Ab"

// Valid octaves: 0 - 8

"A3"    // octave 3. 
"Ab3"   // octave 3.

// Note durations

 1      // whole note
 2      // half note
 4      // quarter note
 8      // eigth note
 16     // sixteenth note
 32     // thirty-second note
 
// durations of dotted notes

 1.5    // dotted half note
 3      // dotted quarter note
 6      // dotted eigth note
 12     // dotted sixteenth note
 24     // dotted thirty-second note

Add a pause to the queue with rest()

Bleep.rest(8); // will rest for length of 8th note
Bleep.rest(1); // will rest for length of whole note
Bleep.rest("R8"); // alternate syntax for 8th note
Bleep.rest("R1"); // alternate syntax for whole note
Bleep.tone("R8"); // also legal

Play a custom sequence with sequence()

// Formatted to one quarter measure per line
var mySequence = [
  "A4", "A5", "A4", "A5", // Four 16th notes
  "R4",                   // rest for a quarter measure
  "R8",       ["C4", 8]   // 8th rest and an eighth note
  "E4"                    // One quarter note
]
Bleep.sequence(mySequence);
Bleep.roll(); // Here be dragons

Get a scale set with 'getScale()'

  var scaleSet = Bleep.getScale('minor','Bb')
  // -> ['Bb', 'C', 'Db', 'Eb', 'F', 'Gb', 'Ab']

Configure Bleep

Adjust these before calling arp, bloop, tone.

Bleep.setWaveform("sine");  // indicate sine, sqaure, sawtooth, triangle
Bleep.setbpm(120);          // tempo in beats per minute
Bleep.setMasterVolume(0.8); // scale from 0 to 1

These setting helpers are handled as events in the queue so you can change them throughout your composition:

Bleep.setbpm(120); // standard tempo
Bleep.tone("A4");
Bleep.tone("C4");
Bleep.tone("D4");
Bleep.tone("F4");
Bleep.setbpm(240); // double time!
Bleep.tone("C4");
Bleep.tone("G4");
Bleep.tone("E4");
Bleep.tone("B4");
Bleep.tone("C4");
Bleep.tone("A4");
Bleep.tone("E4");
Bleep.tone("A4");

The master volume can also be set instantly with Bleep.liveSetMasterVolume()

Bleep.liveSetMasterVolume(value);

Advanced Usage

Supply callback functions to run on note playback end or when a note is added to the queue. This is used in the demo to redraw the visual queue.

Bleep.onNoteEnd(function(){
  showQueue();
});
Bleep.onListChange(function(){
  showQueue();
});

View events in the queue with the getEvents()

Bleep.getEvents(); // returns array of NoteEvent objects

You can modify events before calling play(). For example:

Bleep.tone("A4"); //default duration
Bleep.pendingEvents[0].duration = 1; //change duration to measure length
Bleep.start(); // Tone 'A4' is played for the new duration

After start() has been called, Bleep.pendingEvents is copied to Bleep.liveEvents and then cleared.