Skip to content

Instantly share code, notes, and snippets.

@dfischer
Forked from hsitz/Orca custom operator
Created August 22, 2023 05:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dfischer/a3593042e91aa22c83ddbb90914dcfe6 to your computer and use it in GitHub Desktop.
Save dfischer/a3593042e91aa22c83ddbb90914dcfe6 to your computer and use it in GitHub Desktop.
custom operator for javascript Orca
/* this gist is javascript and goes in the library.js file */
/* that's part of Orca install. I had it between the */
/* 'OperatorMidi' and 'OperatorCC' functions, though that order */
/* is just for organization, not necessary. */
library['~'] = function OperatorMidiWithTranspose (orca, x, y, passive) {
Operator.call(this, orca, x, y, '~', true)
this.name = 'midiwithtranspose'
this.info = 'Sends MIDI note with note transpose'
this.ports.channel = { x: 1, y: 0 }
this.ports.octave = { x: 2, y: 0, clamp: { min: 0, max: 8 } }
this.ports.note = { x: 3, y: 0 }
this.ports.velocity = { x: 4, y: 0, default: 'f', clamp: { min: 0, max: 16 } }
this.ports.length = { x: 5, y: 0, default: '1', clamp: { min: 0, max: 32 } }
this.ports.transpose = { x: 6, y: 0, default: '0', clamp: { min: 0, max: 35 } }
this.operation = function (force = false) {
if (!this.hasNeighbor('*') && force === false) { return }
if (this.listen(this.ports.channel) === '.') { return }
if (this.listen(this.ports.octave) === '.') { return }
if (this.listen(this.ports.note) === '.') { return }
if (!isNaN(this.listen(this.ports.note))) { return }
const channel = this.listen(this.ports.channel, true)
if (channel > 15) { return }
const octave = this.listen(this.ports.octave, true)
/* const basenote = this.listen(this.ports.note, true) */
const basenote = notetoval[this.listen(this.ports.note)]
const trval = this.listen(this.ports.transpose, true)
const note = notearray[basenote + trval]
const velocity = this.listen(this.ports.velocity, true)
const length = this.listen(this.ports.length, true)
client.io.midi.push(channel, octave, note, velocity, length)
if (force === true) {
client.io.midi.run()
}
this.draw = false
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment