spessasynth_core 3.27.7 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/README.md +188 -116
  2. package/dist/index.d.ts +4057 -0
  3. package/dist/index.js +17188 -0
  4. package/dist/index.js.map +1 -0
  5. package/package.json +23 -6
  6. package/index.js +0 -132
  7. package/src/externals/README.md +0 -6
  8. package/src/externals/fflate/LICENSE +0 -21
  9. package/src/externals/fflate/fflate.min.js +0 -1
  10. package/src/externals/stbvorbis_sync/@types/stbvorbis_sync.d.ts +0 -12
  11. package/src/externals/stbvorbis_sync/LICENSE +0 -202
  12. package/src/externals/stbvorbis_sync/NOTICE +0 -6
  13. package/src/externals/stbvorbis_sync/stbvorbis_sync.min.js +0 -1
  14. package/src/midi/README.md +0 -32
  15. package/src/midi/basic_midi.js +0 -587
  16. package/src/midi/midi_builder.js +0 -203
  17. package/src/midi/midi_loader.js +0 -321
  18. package/src/midi/midi_message.js +0 -254
  19. package/src/midi/midi_sequence.js +0 -230
  20. package/src/midi/midi_tools/get_note_times.js +0 -154
  21. package/src/midi/midi_tools/midi_editor.js +0 -611
  22. package/src/midi/midi_tools/midi_writer.js +0 -105
  23. package/src/midi/midi_tools/rmidi_writer.js +0 -566
  24. package/src/midi/midi_tools/used_keys_loaded.js +0 -256
  25. package/src/midi/xmf_loader.js +0 -454
  26. package/src/sequencer/README.md +0 -9
  27. package/src/sequencer/events.js +0 -81
  28. package/src/sequencer/play.js +0 -362
  29. package/src/sequencer/process_event.js +0 -165
  30. package/src/sequencer/process_tick.js +0 -104
  31. package/src/sequencer/sequencer_engine.js +0 -372
  32. package/src/sequencer/song_control.js +0 -196
  33. package/src/soundfont/README.md +0 -11
  34. package/src/soundfont/basic_soundfont/basic_global_zone.js +0 -6
  35. package/src/soundfont/basic_soundfont/basic_instrument.js +0 -115
  36. package/src/soundfont/basic_soundfont/basic_instrument_zone.js +0 -45
  37. package/src/soundfont/basic_soundfont/basic_preset.js +0 -313
  38. package/src/soundfont/basic_soundfont/basic_preset_zone.js +0 -39
  39. package/src/soundfont/basic_soundfont/basic_sample.js +0 -477
  40. package/src/soundfont/basic_soundfont/basic_soundbank.js +0 -740
  41. package/src/soundfont/basic_soundfont/basic_zone.js +0 -145
  42. package/src/soundfont/basic_soundfont/generator.js +0 -76
  43. package/src/soundfont/basic_soundfont/generator_types.js +0 -151
  44. package/src/soundfont/basic_soundfont/modulator.js +0 -581
  45. package/src/soundfont/basic_soundfont/riff_chunk.js +0 -195
  46. package/src/soundfont/basic_soundfont/write_dls/art2.js +0 -174
  47. package/src/soundfont/basic_soundfont/write_dls/articulator.js +0 -49
  48. package/src/soundfont/basic_soundfont/write_dls/combine_zones.js +0 -374
  49. package/src/soundfont/basic_soundfont/write_dls/ins.js +0 -85
  50. package/src/soundfont/basic_soundfont/write_dls/lins.js +0 -15
  51. package/src/soundfont/basic_soundfont/write_dls/modulator_converter.js +0 -330
  52. package/src/soundfont/basic_soundfont/write_dls/rgn2.js +0 -120
  53. package/src/soundfont/basic_soundfont/write_dls/wave.js +0 -71
  54. package/src/soundfont/basic_soundfont/write_dls/write_dls.js +0 -124
  55. package/src/soundfont/basic_soundfont/write_dls/wsmp.js +0 -78
  56. package/src/soundfont/basic_soundfont/write_dls/wvpl.js +0 -35
  57. package/src/soundfont/basic_soundfont/write_sf2/ibag.js +0 -60
  58. package/src/soundfont/basic_soundfont/write_sf2/igen.js +0 -91
  59. package/src/soundfont/basic_soundfont/write_sf2/imod.js +0 -62
  60. package/src/soundfont/basic_soundfont/write_sf2/inst.js +0 -42
  61. package/src/soundfont/basic_soundfont/write_sf2/pbag.js +0 -57
  62. package/src/soundfont/basic_soundfont/write_sf2/pgen.js +0 -92
  63. package/src/soundfont/basic_soundfont/write_sf2/phdr.js +0 -61
  64. package/src/soundfont/basic_soundfont/write_sf2/pmod.js +0 -62
  65. package/src/soundfont/basic_soundfont/write_sf2/sdta.js +0 -131
  66. package/src/soundfont/basic_soundfont/write_sf2/shdr.js +0 -77
  67. package/src/soundfont/basic_soundfont/write_sf2/write.js +0 -287
  68. package/src/soundfont/dls/articulator_converter.js +0 -402
  69. package/src/soundfont/dls/dls_destinations.js +0 -38
  70. package/src/soundfont/dls/dls_instrument.js +0 -20
  71. package/src/soundfont/dls/dls_preset.js +0 -43
  72. package/src/soundfont/dls/dls_sample.js +0 -238
  73. package/src/soundfont/dls/dls_soundfont.js +0 -183
  74. package/src/soundfont/dls/dls_sources.js +0 -63
  75. package/src/soundfont/dls/dls_zone.js +0 -89
  76. package/src/soundfont/dls/read_articulation.js +0 -300
  77. package/src/soundfont/dls/read_instrument.js +0 -118
  78. package/src/soundfont/dls/read_instrument_list.js +0 -17
  79. package/src/soundfont/dls/read_lart.js +0 -35
  80. package/src/soundfont/dls/read_region.js +0 -157
  81. package/src/soundfont/dls/read_samples.js +0 -154
  82. package/src/soundfont/load_soundfont.js +0 -21
  83. package/src/soundfont/read_sf2/generators.js +0 -43
  84. package/src/soundfont/read_sf2/instrument_zones.js +0 -75
  85. package/src/soundfont/read_sf2/instruments.js +0 -71
  86. package/src/soundfont/read_sf2/modulators.js +0 -25
  87. package/src/soundfont/read_sf2/preset_zones.js +0 -79
  88. package/src/soundfont/read_sf2/presets.js +0 -80
  89. package/src/soundfont/read_sf2/samples.js +0 -317
  90. package/src/soundfont/read_sf2/soundfont.js +0 -452
  91. package/src/soundfont/read_sf2/zones.js +0 -28
  92. package/src/synthetizer/README.md +0 -7
  93. package/src/synthetizer/audio_engine/README.md +0 -9
  94. package/src/synthetizer/audio_engine/engine_components/compute_modulator.js +0 -289
  95. package/src/synthetizer/audio_engine/engine_components/controller_tables.js +0 -90
  96. package/src/synthetizer/audio_engine/engine_components/dynamic_modulator_system.js +0 -95
  97. package/src/synthetizer/audio_engine/engine_components/enums.js +0 -18
  98. package/src/synthetizer/audio_engine/engine_components/key_modifier_manager.js +0 -151
  99. package/src/synthetizer/audio_engine/engine_components/lfo.js +0 -26
  100. package/src/synthetizer/audio_engine/engine_components/lowpass_filter.js +0 -282
  101. package/src/synthetizer/audio_engine/engine_components/midi_audio_channel.js +0 -551
  102. package/src/synthetizer/audio_engine/engine_components/modulation_envelope.js +0 -181
  103. package/src/synthetizer/audio_engine/engine_components/modulator_curves.js +0 -89
  104. package/src/synthetizer/audio_engine/engine_components/soundfont_manager.js +0 -265
  105. package/src/synthetizer/audio_engine/engine_components/stereo_panner.js +0 -124
  106. package/src/synthetizer/audio_engine/engine_components/unit_converter.js +0 -73
  107. package/src/synthetizer/audio_engine/engine_components/voice.js +0 -525
  108. package/src/synthetizer/audio_engine/engine_components/volume_envelope.js +0 -402
  109. package/src/synthetizer/audio_engine/engine_components/wavetable_oscillator.js +0 -274
  110. package/src/synthetizer/audio_engine/engine_methods/controller_control/controller_change.js +0 -159
  111. package/src/synthetizer/audio_engine/engine_methods/controller_control/master_parameters.js +0 -48
  112. package/src/synthetizer/audio_engine/engine_methods/controller_control/reset_controllers.js +0 -254
  113. package/src/synthetizer/audio_engine/engine_methods/create_midi_channel.js +0 -20
  114. package/src/synthetizer/audio_engine/engine_methods/data_entry/awe32.js +0 -198
  115. package/src/synthetizer/audio_engine/engine_methods/data_entry/data_entry_coarse.js +0 -281
  116. package/src/synthetizer/audio_engine/engine_methods/data_entry/data_entry_fine.js +0 -109
  117. package/src/synthetizer/audio_engine/engine_methods/mute_channel.js +0 -17
  118. package/src/synthetizer/audio_engine/engine_methods/note_on.js +0 -214
  119. package/src/synthetizer/audio_engine/engine_methods/portamento_time.js +0 -92
  120. package/src/synthetizer/audio_engine/engine_methods/program_change.js +0 -35
  121. package/src/synthetizer/audio_engine/engine_methods/render_voice.js +0 -214
  122. package/src/synthetizer/audio_engine/engine_methods/soundfont_management/embedded_sound_bank.js +0 -42
  123. package/src/synthetizer/audio_engine/engine_methods/soundfont_management/get_preset.js +0 -0
  124. package/src/synthetizer/audio_engine/engine_methods/soundfont_management/update_preset_list.js +0 -19
  125. package/src/synthetizer/audio_engine/engine_methods/stopping_notes/kill_note.js +0 -23
  126. package/src/synthetizer/audio_engine/engine_methods/stopping_notes/note_off.js +0 -56
  127. package/src/synthetizer/audio_engine/engine_methods/stopping_notes/stop_all_channels.js +0 -16
  128. package/src/synthetizer/audio_engine/engine_methods/stopping_notes/stop_all_notes.js +0 -30
  129. package/src/synthetizer/audio_engine/engine_methods/stopping_notes/voice_killing.js +0 -63
  130. package/src/synthetizer/audio_engine/engine_methods/system_exclusive.js +0 -1058
  131. package/src/synthetizer/audio_engine/engine_methods/tuning_control/channel_pressure.js +0 -23
  132. package/src/synthetizer/audio_engine/engine_methods/tuning_control/pitch_wheel.js +0 -31
  133. package/src/synthetizer/audio_engine/engine_methods/tuning_control/poly_pressure.js +0 -29
  134. package/src/synthetizer/audio_engine/engine_methods/tuning_control/set_master_tuning.js +0 -15
  135. package/src/synthetizer/audio_engine/engine_methods/tuning_control/set_modulation_depth.js +0 -27
  136. package/src/synthetizer/audio_engine/engine_methods/tuning_control/set_octave_tuning.js +0 -19
  137. package/src/synthetizer/audio_engine/engine_methods/tuning_control/set_tuning.js +0 -27
  138. package/src/synthetizer/audio_engine/engine_methods/tuning_control/transpose_all_channels.js +0 -15
  139. package/src/synthetizer/audio_engine/engine_methods/tuning_control/transpose_channel.js +0 -34
  140. package/src/synthetizer/audio_engine/main_processor.js +0 -813
  141. package/src/synthetizer/audio_engine/snapshot/apply_synthesizer_snapshot.js +0 -16
  142. package/src/synthetizer/audio_engine/snapshot/channel_snapshot.js +0 -175
  143. package/src/synthetizer/audio_engine/snapshot/synthesizer_snapshot.js +0 -116
  144. package/src/synthetizer/audio_engine/synth_processor_options.js +0 -18
  145. package/src/synthetizer/synth_constants.js +0 -26
  146. package/src/utils/README.md +0 -8
  147. package/src/utils/buffer_to_wav.js +0 -197
  148. package/src/utils/byte_functions/big_endian.js +0 -32
  149. package/src/utils/byte_functions/little_endian.js +0 -77
  150. package/src/utils/byte_functions/string.js +0 -92
  151. package/src/utils/byte_functions/variable_length_quantity.js +0 -42
  152. package/src/utils/fill_with_defaults.js +0 -21
  153. package/src/utils/indexed_array.js +0 -34
  154. package/src/utils/loggin.js +0 -71
  155. package/src/utils/other.js +0 -92
  156. package/src/utils/sysex_detector.js +0 -58
  157. package/src/utils/xg_hacks.js +0 -193
@@ -1,145 +0,0 @@
1
- /**
2
- * @typedef {Object} SoundFontRange
3
- * @property {number} min - the minimum midi note
4
- * @property {number} max - the maximum midi note
5
- */
6
- import { generatorTypes } from "./generator_types.js";
7
- import { Generator } from "./generator.js";
8
- import { Modulator } from "./modulator.js";
9
-
10
- export class BasicZone
11
- {
12
- /**
13
- * The zone's velocity range
14
- * min -1 means that it is a default value
15
- * @type {SoundFontRange}
16
- */
17
- velRange = { min: -1, max: 127 };
18
-
19
- /**
20
- * The zone's key range
21
- * min -1 means that it is a default value
22
- * @type {SoundFontRange}
23
- */
24
- keyRange = { min: -1, max: 127 };
25
-
26
- /**
27
- * The zone's generators
28
- * @type {Generator[]}
29
- */
30
- generators = [];
31
- /**
32
- * The zone's modulators
33
- * @type {Modulator[]}
34
- */
35
- modulators = [];
36
-
37
- /**
38
- * @returns {boolean}
39
- */
40
- get hasKeyRange()
41
- {
42
- return this.keyRange.min !== -1;
43
- }
44
-
45
- /**
46
- * @returns {boolean}
47
- */
48
- get hasVelRange()
49
- {
50
- return this.velRange.min !== -1;
51
- }
52
-
53
- /**
54
- * Adds at the start
55
- * @param generator {Generator}
56
- */
57
- prependGenerator(generator)
58
- {
59
- this.generators.unshift(generator);
60
- }
61
-
62
- // noinspection JSUnusedGlobalSymbols
63
- /**
64
- * @param type {generatorTypes}
65
- * @param value {number}
66
- */
67
- setGenerator(type, value)
68
- {
69
- switch (type)
70
- {
71
- case generatorTypes.sampleID:
72
- throw new Error("Use setSample()");
73
- case generatorTypes.instrument:
74
- throw new Error("Use setInstrument()");
75
-
76
- case generatorTypes.velRange:
77
- case generatorTypes.keyRange:
78
- throw new Error("Set the range manually");
79
- }
80
- let generator = this.generators.find(g => g.generatorType === type);
81
- if (generator)
82
- {
83
- generator.generatorValue = value;
84
- }
85
- else
86
- {
87
- this.addGenerators(new Generator(type, value));
88
- }
89
- }
90
-
91
- /**
92
- * @param generators {Generator}
93
- */
94
- addGenerators(...generators)
95
- {
96
- generators.forEach(g =>
97
- {
98
- switch (g.generatorType)
99
- {
100
- default:
101
- this.generators.push(g);
102
- break;
103
-
104
- case generatorTypes.velRange:
105
- this.velRange.min = g.generatorValue & 0x7F;
106
- this.velRange.max = (g.generatorValue >> 8) & 0x7F;
107
- break;
108
-
109
- case generatorTypes.keyRange:
110
- this.keyRange.min = g.generatorValue & 0x7F;
111
- this.keyRange.max = (g.generatorValue >> 8) & 0x7F;
112
- }
113
- });
114
- }
115
-
116
- /**
117
- * @param modulators {Modulator}
118
- */
119
- addModulators(...modulators)
120
- {
121
- this.modulators.push(...modulators);
122
- }
123
-
124
- /**
125
- * @param generatorType {generatorTypes}
126
- * @param notFoundValue {number}
127
- * @returns {number}
128
- */
129
- getGeneratorValue(generatorType, notFoundValue)
130
- {
131
- return this.generators.find(g => g.generatorType === generatorType)?.generatorValue ?? notFoundValue;
132
- }
133
-
134
- /**
135
- * @param zone {BasicZone}
136
- */
137
- copyFrom(zone)
138
- {
139
- this.generators = [...zone.generators];
140
- this.modulators = zone.modulators.map(m => Modulator.copy(m));
141
- this.velRange = { ...zone.velRange };
142
- this.keyRange = { ...zone.keyRange };
143
- }
144
- }
145
-
@@ -1,76 +0,0 @@
1
- import { generatorLimits, generatorTypes } from "./generator_types.js";
2
-
3
- export const GEN_BYTE_SIZE = 4;
4
-
5
- export class Generator
6
- {
7
- /**
8
- * The generator's enum number
9
- * @type {generatorTypes|number}
10
- */
11
- generatorType = generatorTypes.INVALID;
12
- /**
13
- * The generator's 16-bit value
14
- * @type {number}
15
- */
16
- generatorValue = 0;
17
-
18
- /**
19
- * Constructs a new generator
20
- * @param type {generatorTypes|number}
21
- * @param value {number}
22
- * @param validate {boolean}
23
- */
24
- constructor(type = generatorTypes.INVALID, value = 0, validate = true)
25
- {
26
- this.generatorType = type;
27
- if (value === undefined)
28
- {
29
- throw new Error("No value provided.");
30
- }
31
- this.generatorValue = Math.round(value);
32
- if (validate)
33
- {
34
- const lim = generatorLimits[type];
35
-
36
- if (lim !== undefined)
37
- {
38
- this.generatorValue = Math.max(lim.min, Math.min(lim.max, this.generatorValue));
39
- }
40
- }
41
- }
42
- }
43
-
44
- /**
45
- * generator.js
46
- * purpose: contains enums for generators,
47
- * and their limis parses reads soundfont generators, sums them and applies limits
48
- */
49
- /**
50
- * @param generatorType {number}
51
- * @param presetGens {Generator[]}
52
- * @param instrumentGens {Generator[]}
53
- */
54
- export function addAndClampGenerator(generatorType, presetGens, instrumentGens)
55
- {
56
- const limits = generatorLimits[generatorType] || { min: 0, max: 32768, def: 0 };
57
- let presetGen = presetGens.find(g => g.generatorType === generatorType);
58
- let presetValue = 0;
59
- if (presetGen)
60
- {
61
- presetValue = presetGen.generatorValue;
62
- }
63
-
64
- let instruGen = instrumentGens.find(g => g.generatorType === generatorType);
65
- let instruValue = limits.def;
66
- if (instruGen)
67
- {
68
- instruValue = instruGen.generatorValue;
69
- }
70
-
71
- // limits are applied in the compute_modulator function
72
- // clamp to prevent short from overflowing
73
- // testcase: Sega Genesis soundfont (spessasynth/#169) adds 20,999 and the default 13,500 to initialFilterFc
74
- // which is more than 32k
75
- return Math.max(-32767, Math.min(32767, instruValue + presetValue));
76
- }
@@ -1,151 +0,0 @@
1
- /**
2
- * @enum {number}
3
- */
4
- export const generatorTypes = {
5
- INVALID: -1, // invalid generator
6
- startAddrsOffset: 0, // sample control - moves sample start point
7
- endAddrOffset: 1, // sample control - moves sample end point
8
- startloopAddrsOffset: 2, // loop control - moves loop start point
9
- endloopAddrsOffset: 3, // loop control - moves loop end point
10
- startAddrsCoarseOffset: 4, // sample control - moves sample start point in 32,768 increments
11
- modLfoToPitch: 5, // pitch modulation - modulation lfo pitch modulation in cents
12
- vibLfoToPitch: 6, // pitch modulation - vibrato lfo pitch modulation in cents
13
- modEnvToPitch: 7, // pitch modulation - modulation envelope pitch modulation in cents
14
- initialFilterFc: 8, // filter - lowpass filter cutoff in cents
15
- initialFilterQ: 9, // filter - lowpass filter resonance
16
- modLfoToFilterFc: 10, // filter modulation - modulation lfo lowpass filter cutoff in cents
17
- modEnvToFilterFc: 11, // filter modulation - modulation envelope lowpass filter cutoff in cents
18
- endAddrsCoarseOffset: 12, // ample control - move sample end point in 32,768 increments
19
- modLfoToVolume: 13, // modulation lfo - volume (tremolo), where 100 = 10dB
20
- unused1: 14, // unused
21
- chorusEffectsSend: 15, // effect send - how much is sent to chorus 0 - 1000
22
- reverbEffectsSend: 16, // effect send - how much is sent to reverb 0 - 1000
23
- pan: 17, // panning - where -500 = left, 0 = center, 500 = right
24
- unused2: 18, // unused
25
- unused3: 19, // unused
26
- unused4: 20, // unused
27
- delayModLFO: 21, // mod lfo - delay for mod lfo to start from zero
28
- freqModLFO: 22, // mod lfo - frequency of mod lfo, 0 = 8.176 Hz, units: f => 1200log2(f/8.176)
29
- delayVibLFO: 23, // vib lfo - delay for vibrato lfo to start from zero
30
- freqVibLFO: 24, // vib lfo - frequency of vibrato lfo, 0 = 8.176Hz, unit: f => 1200log2(f/8.176)
31
- delayModEnv: 25, // mod env - 0 = 1 s decay till mod env starts
32
- attackModEnv: 26, // mod env - attack of mod env
33
- holdModEnv: 27, // mod env - hold of mod env
34
- decayModEnv: 28, // mod env - decay of mod env
35
- sustainModEnv: 29, // mod env - sustain of mod env
36
- releaseModEnv: 30, // mod env - release of mod env
37
- keyNumToModEnvHold: 31, // mod env - also modulating mod envelope hold with key number
38
- keyNumToModEnvDecay: 32, // mod env - also modulating mod envelope decay with key number
39
- delayVolEnv: 33, // vol env - delay of envelope from zero (weird scale)
40
- attackVolEnv: 34, // vol env - attack of envelope
41
- holdVolEnv: 35, // vol env - hold of envelope
42
- decayVolEnv: 36, // vol env - decay of envelope
43
- sustainVolEnv: 37, // vol env - sustain of envelope
44
- releaseVolEnv: 38, // vol env - release of envelope
45
- keyNumToVolEnvHold: 39, // vol env - key number to volume envelope hold
46
- keyNumToVolEnvDecay: 40, // vol env - key number to volume envelope decay
47
- instrument: 41, // zone - instrument index to use for preset zone
48
- reserved1: 42, // reserved
49
- keyRange: 43, // zone - key range for which preset / instrument zone is active
50
- velRange: 44, // zone - velocity range for which preset / instrument zone is active
51
- startloopAddrsCoarseOffset: 45, // sample control - moves sample loop start point in 32,768 increments
52
- keyNum: 46, // zone - instrument only: always use this midi number (ignore what's pressed)
53
- velocity: 47, // zone - instrument only: always use this velocity (ignore what's pressed)
54
- initialAttenuation: 48, // zone - allows turning down the volume, 10 = -1dB
55
- reserved2: 49, // reserved
56
- endloopAddrsCoarseOffset: 50, // sample control - moves sample loop end point in 32,768 increments
57
- coarseTune: 51, // tune - pitch offset in semitones
58
- fineTune: 52, // tune - pitch offset in cents
59
- sampleID: 53, // sample - instrument zone only: which sample to use
60
- sampleModes: 54, // sample - 0 = no loop, 1 = loop, 2 = reserved, 3 = loop and play till the end in release phase
61
- reserved3: 55, // reserved
62
- scaleTuning: 56, // sample - the degree to which MIDI key number influences pitch, 100 = default
63
- exclusiveClass: 57, // sample - = cut = choke group
64
- overridingRootKey: 58, // sample - can override the sample's original pitch
65
- unused5: 59, // unused
66
- endOper: 60, // end marker
67
-
68
- // additional generators that are used in system exclusives and will not be saved
69
- vibLfoToVolume: 61,
70
- vibLfoToFilterFc: 62
71
- };
72
- export const GENERATORS_AMOUNT = Object.keys(generatorTypes).length;
73
- export const MAX_GENERATOR = Math.max(...Object.values(generatorTypes));
74
- /**
75
- * @type {{min: number, max: number, def: number, nrpn: number}[]}
76
- * min: minimum value, max: maximum value, def: default value, nrpn: nprn scale...
77
- */
78
- const generatorLimits = [];
79
- // offsets
80
- generatorLimits[generatorTypes.startAddrsOffset] = { min: 0, max: 32768, def: 0, nrpn: 1 };
81
- generatorLimits[generatorTypes.endAddrOffset] = { min: -32768, max: 32768, def: 0, nrpn: 1 };
82
- generatorLimits[generatorTypes.startloopAddrsOffset] = { min: -32768, max: 32768, def: 0, nrpn: 1 };
83
- generatorLimits[generatorTypes.endloopAddrsOffset] = { min: -32768, max: 32768, def: 0, nrpn: 1 };
84
- generatorLimits[generatorTypes.startAddrsCoarseOffset] = { min: 0, max: 32768, def: 0, nrpn: 1 };
85
-
86
- // pitch influence
87
- generatorLimits[generatorTypes.modLfoToPitch] = { min: -12000, max: 12000, def: 0, nrpn: 2 };
88
- generatorLimits[generatorTypes.vibLfoToPitch] = { min: -12000, max: 12000, def: 0, nrpn: 2 };
89
- generatorLimits[generatorTypes.modEnvToPitch] = { min: -12000, max: 12000, def: 0, nrpn: 2 };
90
-
91
- // lowpass
92
- generatorLimits[generatorTypes.initialFilterFc] = { min: 1500, max: 13500, def: 13500, nrpn: 2 };
93
- generatorLimits[generatorTypes.initialFilterQ] = { min: 0, max: 960, def: 0, nrpn: 1 };
94
- generatorLimits[generatorTypes.modLfoToFilterFc] = { min: -12000, max: 12000, def: 0, nrpn: 2 };
95
- generatorLimits[generatorTypes.vibLfoToFilterFc] = { min: -12000, max: 12000, def: 0, nrpn: 2 }; // NON-STANDARD
96
- generatorLimits[generatorTypes.modEnvToFilterFc] = { min: -12000, max: 12000, def: 0, nrpn: 2 };
97
-
98
- generatorLimits[generatorTypes.endAddrsCoarseOffset] = { min: -32768, max: 32768, def: 0, nrpn: 1 };
99
-
100
- generatorLimits[generatorTypes.modLfoToVolume] = { min: -960, max: 960, def: 0, nrpn: 1 };
101
- generatorLimits[generatorTypes.vibLfoToVolume] = { min: -960, max: 960, def: 0, nrpn: 1 }; // NON-STANDARD
102
-
103
- // effects, pan
104
- generatorLimits[generatorTypes.chorusEffectsSend] = { min: 0, max: 1000, def: 0, nrpn: 1 };
105
- generatorLimits[generatorTypes.reverbEffectsSend] = { min: 0, max: 1000, def: 0, nrpn: 1 };
106
- generatorLimits[generatorTypes.pan] = { min: -500, max: 500, def: 0, nrpn: 1 };
107
-
108
- // lfo
109
- generatorLimits[generatorTypes.delayModLFO] = { min: -12000, max: 5000, def: -12000, nrpn: 2 };
110
- generatorLimits[generatorTypes.freqModLFO] = { min: -16000, max: 4500, def: 0, nrpn: 4 };
111
- generatorLimits[generatorTypes.delayVibLFO] = { min: -12000, max: 5000, def: -12000, nrpn: 2 };
112
- generatorLimits[generatorTypes.freqVibLFO] = { min: -16000, max: 4500, def: 0, nrpn: 4 };
113
-
114
- // mod env
115
- generatorLimits[generatorTypes.delayModEnv] = { min: -32768, max: 5000, def: -32768, nrpn: 2 }; // -32,768 indicates instant phase,
116
- // this is done to prevent click at the start of filter modenv
117
- generatorLimits[generatorTypes.attackModEnv] = { min: -32768, max: 8000, def: -32768, nrpn: 2 };
118
- generatorLimits[generatorTypes.holdModEnv] = { min: -12000, max: 5000, def: -12000, nrpn: 2 };
119
- generatorLimits[generatorTypes.decayModEnv] = { min: -12000, max: 8000, def: -12000, nrpn: 2 };
120
- generatorLimits[generatorTypes.sustainModEnv] = { min: 0, max: 1000, def: 0, nrpn: 1 };
121
- generatorLimits[generatorTypes.releaseModEnv] = { min: -7200, max: 8000, def: -12000, nrpn: 2 }; // min is set to -7200 to prevent lowpass clicks
122
- // key num to mod env
123
- generatorLimits[generatorTypes.keyNumToModEnvHold] = { min: -1200, max: 1200, def: 0, nrpn: 1 };
124
- generatorLimits[generatorTypes.keyNumToModEnvDecay] = { min: -1200, max: 1200, def: 0, nrpn: 1 };
125
-
126
- // vol env
127
- generatorLimits[generatorTypes.delayVolEnv] = { min: -12000, max: 5000, def: -12000, nrpn: 2 };
128
- generatorLimits[generatorTypes.attackVolEnv] = { min: -12000, max: 8000, def: -12000, nrpn: 2 };
129
- generatorLimits[generatorTypes.holdVolEnv] = { min: -12000, max: 5000, def: -12000, nrpn: 2 };
130
- generatorLimits[generatorTypes.decayVolEnv] = { min: -12000, max: 8000, def: -12000, nrpn: 2 };
131
- generatorLimits[generatorTypes.sustainVolEnv] = { min: 0, max: 1440, def: 0, nrpn: 1 };
132
- generatorLimits[generatorTypes.releaseVolEnv] = { min: -7200, max: 8000, def: -12000, nrpn: 2 }; // min is set to -7200 prevent clicks
133
- // key num to vol env
134
- generatorLimits[generatorTypes.keyNumToVolEnvHold] = { min: -1200, max: 1200, def: 0, nrpn: 1 };
135
- generatorLimits[generatorTypes.keyNumToVolEnvDecay] = { min: -1200, max: 1200, def: 0, nrpn: 1 };
136
-
137
- generatorLimits[generatorTypes.startloopAddrsCoarseOffset] = { min: -32768, max: 32768, def: 0, nrpn: 1 };
138
- generatorLimits[generatorTypes.keyNum] = { min: -1, max: 127, def: -1, nrpn: 1 };
139
- generatorLimits[generatorTypes.velocity] = { min: -1, max: 127, def: -1, nrpn: 1 };
140
-
141
- generatorLimits[generatorTypes.initialAttenuation] = { min: 0, max: 1440, def: 0, nrpn: 1 };
142
-
143
- generatorLimits[generatorTypes.endloopAddrsCoarseOffset] = { min: -32768, max: 32768, def: 0, nrpn: 1 };
144
-
145
- generatorLimits[generatorTypes.coarseTune] = { min: -120, max: 120, def: 0, nrpn: 1 };
146
- generatorLimits[generatorTypes.fineTune] = { min: -12700, max: 12700, def: 0, nrpn: 1 }; // this generator is used as initial pitch, hence this range
147
- generatorLimits[generatorTypes.scaleTuning] = { min: 0, max: 1200, def: 100, nrpn: 1 };
148
- generatorLimits[generatorTypes.exclusiveClass] = { min: 0, max: 99999, def: 0, nrpn: 0 };
149
- generatorLimits[generatorTypes.overridingRootKey] = { min: 0 - 1, max: 127, def: -1, nrpn: 0 };
150
- generatorLimits[generatorTypes.sampleModes] = { min: 0, max: 3, def: 0, nrpn: 0 };
151
- export { generatorLimits };