2.6.0 • Published 9 years ago

ditty v2.6.0

Weekly downloads
2
License
MIT
Repository
github
Last release
9 years ago

ditty

Schedule a looped sequence of Web Audio events using bopper clock source.

You can pipe the output through soundbank-trigger if you want to use with soundbank.

BREAKING CHANGES: The API has changed significantly in the version 2 release. Now supports multiple loop channels with differing lengths.

Install via npm

$ npm install ditty

API

var Ditty = require('ditty')
var ditty = Ditty()

Ditty()

Creates a realtime-transform stream. Pipe in schedule events and stream out the looped events added to the input schedule.time.

var Bopper = require('bopper')
var audioContext = new AudioContext()
var scheduler = Bopper(audioContext)

schedule.pipe(ditty).on('data', function(data){
  // data: id, event (start or stop), time, position, args
  if (data.event == 'start'){
    noteOn(data.id, data.time)
  } else if (data.event == 'stop'){
    noteOff(data.id, data.time)
  }
})

Input:

{
  from: 0,
  to: 1.0,
  time: audioContext.currentTime,
  beatLength: tempo / 60
}

Output:

{
  id: 'C',
  position: 0.5, // preserved from ditty.set
  event: 'start', // or 'stop' for the off note
  time: schedule.time + delta
}

ditty.set(id, events, loopLength=8)

Schedule a set of start/stop events for the given id. This will override any loop already set on this id.

events is an array of arrays:

[
  [beatPosition, length, args...],
  [beatPosition, length, args...],
  ...
]
// schedule a C -> F -> G -> F midi sequence

ditty.set(60, [ // midi C
  [0, 0.9], [1, 0.9]
], 8)

ditty.set(65, [ // midi F
  [2.0, 0.9], [3.0, 0.9], [5.5, 0.4], [6.5, 0.4], [7.0, 0.4], [7.5, 0.4],
], 8)

ditty.set(67, [ // midi G
  [4.0, 0.4], [5.0, 0.4]
], 8)

ditty.get(id)

Returns the event sequence as set.

ditty.getLength(id)

Returns the loopLength as specified for set.

ditty.getDescriptors()

Returns an array of objects describing the state of all loops.

ditty.update(descriptor)

Push a loop descriptor in to restore the state of the given loop at descriptor.id.

ditty.on('change', function(descriptor))

Whenever a loop is updated, the 'change' event is emitted with the new loop descriptor (id, events, length).

Example

To run the example npm install && npm install --global beefy then beefy example.js and navigate to http://localhost:9966/

2.6.0

9 years ago

2.5.0

9 years ago

2.4.1

10 years ago

2.4.0

10 years ago

2.3.0

10 years ago

2.2.0

10 years ago

2.1.1

10 years ago

2.1.0

10 years ago

2.0.0

10 years ago

1.2.0

10 years ago

1.1.1

10 years ago

1.1.0

10 years ago

1.0.2

10 years ago

1.0.1

10 years ago

1.0.0

11 years ago

0.1.0

11 years ago