Example #1
0
    createInstance: function(name){

      var instance = Soundbank(audioContext)
      var ditty = Ditty(clock)

      var exclude = {}
      instance.on('change', function(data){
        exclude['144/' + data.id] = data.exclude
      })

      instance.looper = MidiLooper(clock.getCurrentPosition, {exclude: exclude})
      instance.name = name

      // feedback loop
      ditty.pipe(instance).pipe(instance.looper).pipe(ditty)

      // connect to output
      instance.connect(audioContext.destination)

      // stream to interfaces
      streams.forEach(function(stream){
        connectInstance(instance, stream)
      })

      instances[name] = instance


      return instance
    },
Example #2
0
module.exports = function(midiGrabber){

  var repeater = Ditty() 
  var release = null
  var downNotes = []
  var repeatLength = 1

  repeater.setLength = function(value){
    repeatLength = value
    refresh()
  }

  repeater.start = function(length){
    if (!release){
      release = midiGrabber.grab(function(data){
        if (data[2]) down(data)
        else up(data)
      })
    }
    if (length){
      repeater.setLength(length)
    }
  }

  repeater.stop = function(){
    if (release){
      release()
      release = null
    }
  }

  function down(data){
    downNotes.push(data)
    refresh()
  }

  function up(data){
    downNotes = downNotes.filter(function(note){
      return !(note[0] == data[0] && note[1] == data[1])
    })
    refresh()
  }

  function refresh(){
    repeater.setNotes(downNotes.map(function(data){
      return {
        key: data[0] + '/' + data[1],
        on: data, off: [data[0], data[1], 0],
        position: 0, length: repeatLength/2
      }
    }), repeatLength)
  }

  return repeater
}
Example #3
0
function createInstance(audioContext, output, midiStream){

  var instance = Soundbank(audioContext)

  instance.playback = Playback(instance)

  var scheduler = audioContext.scheduler
  var ditty = Ditty(scheduler)

  midiStream.on('error', function(err){
    console.log(err)
  })

  var exclude = {}
  var noRepeat = {}
  var loopTransforms = {}

  instance.on('refresh', function(data){
    var overrideTransform = !!data.loopTransform
    exclude['144/' + data.id] = data.exclude
    noRepeat['144/' + data.id] = data.noRepeat || overrideTransform
    loopTransforms['144/' + data.id] = data.loopTransform
  })

  instance.looper = MidiLooper(scheduler.getCurrentPosition, {
    exclude: exclude,
    noRepeat: noRepeat,
    loopTransforms: loopTransforms
  })

  // controller
  instance.controller = Launchpad(midiStream, instance.looper)
  instance.quantizer = Quantizer(scheduler.getCurrentPosition)
  scheduler.pipe(instance.controller).pipe(instance.quantizer).pipe(instance.playback)

  // sampler
  instance.sampler = SoundRecorder(instance.controller, instance)

  // feedback loop
  ditty.pipe(instance.playback).pipe(instance.looper).pipe(ditty)

  // connect to output
  instance.connect(output)
  return instance
}
Example #4
0
function addRemoteInstance(){

  var instance = Soundbank(window.context.audio)

  instance.playback = Playback(instance)

  var scheduler = window.context.audio.scheduler
  var ditty = Ditty(scheduler)

  // feedback loop
  ditty.pipe(instance.playback)

  instance.loop = ditty

  // connect our remote output to the original audio context
  instance.connect(window.context.outputFromRemote)

  window.context.remoteInstances.push(instance)
  return instance
}