gibberwocky
Version:
music sequencing for Live and Max/MSP
77 lines (59 loc) • 1.46 kB
JavaScript
module.exports = function( Gibber ) {
let Steps = {
type:'HexSteps',
create( _steps, track = Gibber.currentTrack ) {
let stepseq = Object.create( Steps )
stepseq.seqs = {}
for ( let _key in _steps ) {
let values = _steps[ _key ],
key = parseInt( _key )
let seq = Gibber.Seq( key, Gibber.Hex( values ), 'midinote', track, 0 )
seq.trackID = track.id
stepseq.seqs[ _key ] = seq
stepseq[ _key ] = seq.values
}
stepseq.start()
stepseq.addPatternMethods()
return stepseq
},
addPatternMethods() {
groupMethodNames.map( (name) => {
this[ name ] = function( ...args ) {
for( let key in this.seqs ) {
this.seqs[ key ].values[ name ].apply( this, args )
}
}
Gibber.addSequencingToMethod( this, name, 1 )
})
},
start() {
for( let key in this.seqs ) {
this.seqs[ key ].start()
}
},
stop() {
for( let key in this.seqs ) {
this.seqs[ key ].stop()
}
},
clear() {
this.stop()
for( let key in this.seqs ) {
this.seqs[ key ].timings.clear()
}
},
/*
*rotate( amt ) {
* for( let key in this.seqs ) {
* this.seqs[ key ].values.rotate( amt )
* }
*},
*/
}
const groupMethodNames = [
'rotate', 'reverse', 'transpose', 'range',
'shuffle', 'scale', 'repeat', 'switch', 'store',
'reset','flip', 'invert', 'set'
]
return Steps.create
}