spessasynth_lib
Version:
MIDI and SoundFont2/DLS library with no compromises
131 lines (126 loc) • 5.8 kB
JavaScript
/**
* @enum {number}
* // NOTE: Every message needs a channel number (if not relevant or all, set to -1)
* @property {number} noteOff - 0 -> midiNote<number>
* @property {number} noteOn - 1 -> [midiNote<number>, velocity<number>, enableDebugging<boolean>]
* @property {number} ccChange - 2 -> [ccNumber<number>, ccValue<number>, force<boolean>]
* @property {number} programChange - 3 -> [programNumber<number>, userChange<boolean>]
* @property {number} channelPressure - 4 -> pressure<number>
* @property {number} polyPressure - 5 -> [midiNote<number>, pressure<number>]
* @property {number} killNote - 6 -> midiNote<number>
* @property {number} ccReset - 7 -> (no data) note: if channel is -1 then reset all channels
* @property {number} setChannelVibrato - 8 -> {frequencyHz: number, depthCents: number, delaySeconds: number} note: if channel is -1 then stop all channels note 2: if rate is -1, it means locking
* @property {number} soundFontManager - 9 -> [messageType<WorkletSoundfontManagerMessageType> messageData<any>] note: refer to sfman_message.js
* @property {number} stopAll - 10 -> force<number> (0 false, 1 true) note: if channel is -1 then stop all channels
* @property {number} killNotes - 11 -> amount<number>
* @property {number} muteChannel - 12 -> isMuted<boolean>
* @property {number} addNewChannel - 13 -> (no data)
* @property {number} customCcChange - 14 -> [ccNumber<number>, ccValue<number>]
* @property {number} debugMessage - 15 -> (no data)
* @property {number} systemExclusive - 16 -> [messageData<number[]> (without the F0 byte), channelOffset<number>]
* @property {number} setMasterParameter - 17 -> [parameter<masterParameterType>, value<number>]
* @property {number} setDrums - 18 -> isDrums<boolean>
* @property {number} pitchWheel - 19 -> [MSB<number>, LSB<number>]
* @property {number} transpose - 20 -> [semitones<number>, force<boolean>] note: if channel is -1 then transpose all channels
* @property {number} highPerformanceMode - 21 -> isOn<boolean>
* @property {number} lockController - 22 -> [controllerNumber<number>, isLocked<boolean>]
* @property {number} sequencerSpecific - 23 -> [messageType<WorkletSequencerMessageType> messageData<any>] note: refer to sequencer_message.js
* @property {number} requestSynthesizerSnapshot - 24 -> (no data)
* @property {number} setLogLevel - 25 -> [enableInfo<boolean>, enableWarning<boolean>, enableGroup<boolean>, enableTable<boolean>]
* @property {number} keyModifier - 26 -> [messageType<workletKeyModifierMessageType> messageData<any>]
* @property {number} setEffectsGain - 27 -> [reverbGain<number>, chorusGain<number>]
* @property {number} destroyWorklet - 28 -> (no data)
*/
export const workletMessageType = {
noteOff: 0,
noteOn: 1,
ccChange: 2,
programChange: 3,
channelPressure: 4,
polyPressure: 5,
killNote: 6,
ccReset: 7,
setChannelVibrato: 8,
soundFontManager: 9,
stopAll: 10,
killNotes: 11,
muteChannel: 12,
addNewChannel: 13,
customcCcChange: 14,
debugMessage: 15,
systemExclusive: 16,
setMasterParameter: 17,
setDrums: 18,
pitchWheel: 19,
transpose: 20,
highPerformanceMode: 21,
lockController: 22,
sequencerSpecific: 23,
requestSynthesizerSnapshot: 24,
setLogLevel: 25,
keyModifierManager: 26,
setEffectsGain: 27,
destroyWorklet: 28
};
/**
* @enum {number}
*/
export const masterParameterType = {
mainVolume: 0,
masterPan: 1,
voicesCap: 2,
interpolationType: 3,
midiSystem: 4
};
export const ALL_CHANNELS_OR_DIFFERENT_ACTION = -1;
/**
* @typedef {{
* channelNumber: number
* messageType: (workletMessageType|number),
* messageData: (
* boolean|
* number[]
* |undefined
* |boolean[]
* |WorkletVoice[]
* |number
* |{rate: number, depth: number, delay: number}
* |ArrayBuffer
* |{messageType: WorkletSequencerMessageType, messageData: any}
* |{messageType: workletKeyModifierMessageType, messageData: any}
* )
* }} WorkletMessage
*/
/**
* @typedef {Object} WorkletReturnMessage
* @property {returnMessageType} messageType - the message's type
* @property {{
* eventName: string,
* eventData: any
* }|ChannelProperty
* |PresetListElement[]
* |string
* |{messageType: WorkletSequencerReturnMessageType, messageData: any}
* |SynthesizerSnapshot
* |[WorkletSoundfontManagerMessageType, any]} messageData - the message's data
*
* 0 - channel property change -> [channel<number>, property<ChannelProperty>] see message_sending.js line 29
* 1 - event call -> {eventName<string>, eventData:<the event's data>}
* 2 - master parameter change -> [parameter<masterParameterType>, value<string|number>]
* 3 - sequencer specific -> [messageType<WorkletSequencerReturnMessageType> messageData<any>] note: refer to sequencer_message.js
* 4 - synthesizer snapshot -> snapshot<SynthesizerSnapshot> note: refer to synthesizer_snapshot.js
* 5 - isFullyInitialized -> (no data)
* 6 - soundfontError -> errorMessage<string>
*/
/**
* @enum {number}
*/
export const returnMessageType = {
channelPropertyChange: 0,
eventCall: 1,
masterParameterChange: 2,
sequencerSpecific: 3,
synthesizerSnapshot: 4,
isFullyInitialized: 5,
soundfontError: 6
};