Skip to content

Instantly share code, notes, and snippets.

@hatsumatsu
Created April 21, 2016 09:54
Show Gist options
  • Save hatsumatsu/5d67dc2a1373086de50da46d14d1ef80 to your computer and use it in GitHub Desktop.
Save hatsumatsu/5d67dc2a1373086de50da46d14d1ef80 to your computer and use it in GitHub Desktop.
Tone.js Safari debug
var Sampler = ( function() {
var settings = {
samples: {
'808': {
0: 'bass.mp3'
}
},
bpm: 110,
isPlaying: false,
isLoaded: false,
sequence: [0,1,2,3]
}
var init = function() {
console.log( 'sampler.init()' );
bindEventHandlers();
initSampler();
initPlayback();
}
var bindEventHandlers = function() {
console.log( 'sampler.bindEventHandlers()' );
$( document )
.on( 'sampler/loaded', function() {
console.log( 'All samples are loaded' );
settings.isLoaded = true;
togglePlayback();
} )
.on( 'keyup', function( event ) {
var key = event.which;
// toggle playback
// Space
if( key === 32 ) {
togglePlayback();
}
} );
Tone.Buffer.on( 'load', function() {
$( document ).trigger( 'sampler/loaded' );
} );
}
var initSampler = function() {
console.log( 'sampler.initSampler()' );
settings.sampler = new Tone.Sampler(
settings.samples
).toMaster();
}
var playSample = function() {
console.log( 'sampler.playSample()' );
if( settings.isLoaded ) {
settings.sampler.triggerAttack( '808.0' );
}
}
var initPlayback = function() {
console.log( 'sampler.initPlayback()' );
Tone.Transport.bpm.value = settings.bpm;
settings.loop = new Tone.Sequence( function( time, note ) {
if( settings.sequence[note] !== undefined ) {
playSample();
}
}, [0,1,2,3], '4n' );
Tone.Transport.start();
}
var togglePlayback = function() {
console.log( 'sampler.togglePlayback()' );
if( settings.isPlaying ) {
settings.isPlaying = false;
settings.loop.stop();
} else {
settings.isPlaying = true;
settings.loop.start();
}
}
return {
init: function() { init(); }
}
} )();
$( document ).ready( function() {
Sampler.init();
} );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment