spessasynth_lib
Version:
MIDI and SoundFont2/DLS library for the browsers with no compromises
121 lines (115 loc) • 5.63 kB
JavaScript
import { SynthesizerSnapshot } from "spessasynth_core";
/**
* @enum {number}
* // NOTE: Every message needs a channel number (if not relevant or all, set to -1)
* @property {number} midiMessage - 0 -> [messageData<Uint8Array>, channelOffset<number>, force<boolean>, options<SynthMethodOptions>]
* @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} setMasterParameter - 17 -> [parameter<masterParameterType>, value<number>]
* @property {number} setDrums - 18 -> isDrums<boolean>
* @property {number} transpose - 19 -> [semitones<number>, force<boolean>] note: if channel is -1 then transpose all channels
* @property {number} highPerformanceMode - 20 -> isOn<boolean>
* @property {number} lockController - 21 -> [controllerNumber<number>, isLocked<boolean>]
* @property {number} sequencerSpecific - 22 -> [messageType<SpessaSynthSequencerMessageType> messageData<any>] note: refer to sequencer_message.js
* @property {number} requestSynthesizerSnapshot - 23 -> (no data)
* @property {number} setLogLevel - 24 -> [enableInfo<boolean>, enableWarning<boolean>, enableGroup<boolean>, enableTable<boolean>]
* @property {number} keyModifier - 25 -> [messageType<workletKeyModifierMessageType> messageData<any>]
* @property {number} setEffectsGain - 26 -> [reverbGain<number>, chorusGain<number>]
* @property {number} destroyWorklet - 27 -> (no data)
*/
export const workletMessageType = {
midiMessage: 0,
// free 6 slots here, use when needed instead of adding new ones
ccReset: 7,
setChannelVibrato: 8,
soundFontManager: 9,
stopAll: 10,
killNotes: 11,
muteChannel: 12,
addNewChannel: 13,
customCcChange: 14,
debugMessage: 15,
// free slot here
setMasterParameter: 17,
setDrums: 18,
transpose: 19,
highPerformanceMode: 20,
lockController: 21,
sequencerSpecific: 22,
requestSynthesizerSnapshot: 23,
setLogLevel: 24,
keyModifierManager: 25,
setEffectsGain: 26,
destroyWorklet: 27
};
/**
* @typedef {{
* channelNumber: number
* messageType: (workletMessageType|number),
* messageData: (
* boolean|
* (number|Uint8Array|object)[]
* |undefined
* |boolean[]
* |boolean
* |Voice[]
* |number
* |{rate: number, depth: number, delay: number}
* |ArrayBuffer
* |{messageType: SpessaSynthSequencerMessageType, messageData: any}
* |{messageType: workletKeyModifierMessageType, messageData: any}
* |Uint8Array
* )
* }} WorkletMessage
*/
/**
* @typedef {Object} ChannelProperty
* @property {number} voicesAmount - the channel's current voice amount
* @property {number} pitchBend - the channel's current pitch bend from -8192 do 8192
* @property {number} pitchBendRangeSemitones - the pitch bend's range, in semitones
* @property {boolean} isMuted - indicates whether the channel is muted
* @property {boolean} isDrum - indicates whether the channel is a drum channel
* @property {number} transposition - the channel's transposition, in semitones
* @property {number} bank - the bank number of the current preset
* @property {number} program - the MIDI program number of the current preset
*/
/**
* @typedef {Object} WorkletReturnMessage
* @property {returnMessageType} messageType - the message's type
* @property {{
* eventName: string,
* eventData: any
* }|ChannelProperty
* |{presetName: string, bank: number, program: number}[]
* |string
* |{messageType: SpessaSynthSequencerReturnMessageType, 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<SpessaSynthSequencerReturnMessageType> 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
};