spessasynth_lib 3.25.23 → 3.26.1

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 (162) hide show
  1. package/README.md +29 -114
  2. package/external_midi/midi_handler.js +14 -14
  3. package/external_midi/web_midi_link.js +3 -3
  4. package/index.js +33 -33
  5. package/package.json +19 -6
  6. package/{midi → sequencer}/midi_data.js +1 -1
  7. package/sequencer/{worklet_wrapper/sequencer.js → sequencer.js} +13 -12
  8. package/sequencer/{worklet_wrapper/sequencer_message.js → sequencer_message.js} +1 -1
  9. package/synthetizer/README.md +29 -1
  10. package/synthetizer/audio_effects/reverb_as_binary.js +2 -2
  11. package/synthetizer/{worklet_wrapper/key_modifier_manager.js → key_modifier_manager.js} +11 -2
  12. package/synthetizer/{worklet_wrapper/synth_event_handler.js → synth_event_handler.js} +16 -13
  13. package/synthetizer/{worklet_wrapper/synth_soundfont_manager.js → synth_soundfont_manager.js} +8 -5
  14. package/synthetizer/{worklet_wrapper/synthetizer.js → synthetizer.js} +29 -23
  15. package/synthetizer/{audio_engine/message_protocol/worklet_message.js → worklet_message.js} +15 -2
  16. package/synthetizer/{worklet_wrapper/worklet_processor.js → worklet_processor.js} +214 -31
  17. package/synthetizer/worklet_processor.min.js +13 -12
  18. package/synthetizer/worklet_processor.min.js.map +7 -0
  19. package/synthetizer/{worklet_wrapper/worklet_url.js → worklet_url.js} +2 -0
  20. package/utils/buffer_to_wav.js +7 -165
  21. package/utils/other.js +3 -84
  22. package/externals/fflate/LICENSE +0 -21
  23. package/externals/fflate/fflate.min.js +0 -1
  24. package/externals/stbvorbis_sync/@types/stbvorbis_sync.d.ts +0 -12
  25. package/externals/stbvorbis_sync/LICENSE +0 -202
  26. package/externals/stbvorbis_sync/NOTICE +0 -6
  27. package/externals/stbvorbis_sync/stbvorbis_sync.min.js +0 -1
  28. package/midi/README.md +0 -32
  29. package/midi/basic_midi.js +0 -565
  30. package/midi/midi_builder.js +0 -202
  31. package/midi/midi_loader.js +0 -324
  32. package/midi/midi_message.js +0 -254
  33. package/midi/midi_sequence.js +0 -225
  34. package/midi/midi_tools/get_note_times.js +0 -154
  35. package/midi/midi_tools/midi_editor.js +0 -611
  36. package/midi/midi_tools/midi_writer.js +0 -99
  37. package/midi/midi_tools/rmidi_writer.js +0 -567
  38. package/midi/midi_tools/used_keys_loaded.js +0 -238
  39. package/midi/xmf_loader.js +0 -454
  40. package/sequencer/sequencer_engine/events.js +0 -104
  41. package/sequencer/sequencer_engine/play.js +0 -353
  42. package/sequencer/sequencer_engine/process_event.js +0 -169
  43. package/sequencer/sequencer_engine/process_tick.js +0 -106
  44. package/sequencer/sequencer_engine/sequencer_engine.js +0 -335
  45. package/sequencer/sequencer_engine/song_control.js +0 -229
  46. package/soundfont/README.md +0 -13
  47. package/soundfont/basic_soundfont/basic_instrument.js +0 -77
  48. package/soundfont/basic_soundfont/basic_preset.js +0 -336
  49. package/soundfont/basic_soundfont/basic_sample.js +0 -197
  50. package/soundfont/basic_soundfont/basic_soundfont.js +0 -565
  51. package/soundfont/basic_soundfont/basic_zone.js +0 -64
  52. package/soundfont/basic_soundfont/basic_zones.js +0 -43
  53. package/soundfont/basic_soundfont/generator.js +0 -220
  54. package/soundfont/basic_soundfont/modulator.js +0 -378
  55. package/soundfont/basic_soundfont/riff_chunk.js +0 -149
  56. package/soundfont/basic_soundfont/write_dls/art2.js +0 -173
  57. package/soundfont/basic_soundfont/write_dls/articulator.js +0 -49
  58. package/soundfont/basic_soundfont/write_dls/combine_zones.js +0 -400
  59. package/soundfont/basic_soundfont/write_dls/ins.js +0 -103
  60. package/soundfont/basic_soundfont/write_dls/lins.js +0 -18
  61. package/soundfont/basic_soundfont/write_dls/modulator_converter.js +0 -330
  62. package/soundfont/basic_soundfont/write_dls/rgn2.js +0 -121
  63. package/soundfont/basic_soundfont/write_dls/wave.js +0 -94
  64. package/soundfont/basic_soundfont/write_dls/write_dls.js +0 -119
  65. package/soundfont/basic_soundfont/write_dls/wsmp.js +0 -78
  66. package/soundfont/basic_soundfont/write_dls/wvpl.js +0 -32
  67. package/soundfont/basic_soundfont/write_sf2/ibag.js +0 -39
  68. package/soundfont/basic_soundfont/write_sf2/igen.js +0 -80
  69. package/soundfont/basic_soundfont/write_sf2/imod.js +0 -46
  70. package/soundfont/basic_soundfont/write_sf2/inst.js +0 -34
  71. package/soundfont/basic_soundfont/write_sf2/pbag.js +0 -39
  72. package/soundfont/basic_soundfont/write_sf2/pgen.js +0 -82
  73. package/soundfont/basic_soundfont/write_sf2/phdr.js +0 -42
  74. package/soundfont/basic_soundfont/write_sf2/pmod.js +0 -46
  75. package/soundfont/basic_soundfont/write_sf2/sdta.js +0 -80
  76. package/soundfont/basic_soundfont/write_sf2/shdr.js +0 -55
  77. package/soundfont/basic_soundfont/write_sf2/write.js +0 -222
  78. package/soundfont/dls/articulator_converter.js +0 -396
  79. package/soundfont/dls/dls_destinations.js +0 -38
  80. package/soundfont/dls/dls_preset.js +0 -44
  81. package/soundfont/dls/dls_sample.js +0 -75
  82. package/soundfont/dls/dls_soundfont.js +0 -186
  83. package/soundfont/dls/dls_sources.js +0 -62
  84. package/soundfont/dls/dls_zone.js +0 -95
  85. package/soundfont/dls/read_articulation.js +0 -299
  86. package/soundfont/dls/read_instrument.js +0 -121
  87. package/soundfont/dls/read_instrument_list.js +0 -17
  88. package/soundfont/dls/read_lart.js +0 -35
  89. package/soundfont/dls/read_region.js +0 -152
  90. package/soundfont/dls/read_samples.js +0 -270
  91. package/soundfont/load_soundfont.js +0 -21
  92. package/soundfont/read_sf2/generators.js +0 -46
  93. package/soundfont/read_sf2/instruments.js +0 -66
  94. package/soundfont/read_sf2/modulators.js +0 -36
  95. package/soundfont/read_sf2/presets.js +0 -80
  96. package/soundfont/read_sf2/samples.js +0 -304
  97. package/soundfont/read_sf2/soundfont.js +0 -305
  98. package/soundfont/read_sf2/zones.js +0 -263
  99. package/synthetizer/audio_engine/README.md +0 -25
  100. package/synthetizer/audio_engine/engine_components/compute_modulator.js +0 -266
  101. package/synthetizer/audio_engine/engine_components/controller_tables.js +0 -88
  102. package/synthetizer/audio_engine/engine_components/key_modifier_manager.js +0 -149
  103. package/synthetizer/audio_engine/engine_components/lfo.js +0 -26
  104. package/synthetizer/audio_engine/engine_components/lowpass_filter.js +0 -282
  105. package/synthetizer/audio_engine/engine_components/midi_audio_channel.js +0 -471
  106. package/synthetizer/audio_engine/engine_components/modulation_envelope.js +0 -181
  107. package/synthetizer/audio_engine/engine_components/modulator_curves.js +0 -89
  108. package/synthetizer/audio_engine/engine_components/soundfont_manager.js +0 -228
  109. package/synthetizer/audio_engine/engine_components/stereo_panner.js +0 -120
  110. package/synthetizer/audio_engine/engine_components/unit_converter.js +0 -73
  111. package/synthetizer/audio_engine/engine_components/voice.js +0 -519
  112. package/synthetizer/audio_engine/engine_components/volume_envelope.js +0 -401
  113. package/synthetizer/audio_engine/engine_components/wavetable_oscillator.js +0 -263
  114. package/synthetizer/audio_engine/engine_methods/controller_control/controller_change.js +0 -132
  115. package/synthetizer/audio_engine/engine_methods/controller_control/master_parameters.js +0 -48
  116. package/synthetizer/audio_engine/engine_methods/controller_control/reset_controllers.js +0 -241
  117. package/synthetizer/audio_engine/engine_methods/create_midi_channel.js +0 -27
  118. package/synthetizer/audio_engine/engine_methods/data_entry/data_entry_coarse.js +0 -253
  119. package/synthetizer/audio_engine/engine_methods/data_entry/data_entry_fine.js +0 -66
  120. package/synthetizer/audio_engine/engine_methods/mute_channel.js +0 -17
  121. package/synthetizer/audio_engine/engine_methods/note_on.js +0 -175
  122. package/synthetizer/audio_engine/engine_methods/portamento_time.js +0 -92
  123. package/synthetizer/audio_engine/engine_methods/program_change.js +0 -61
  124. package/synthetizer/audio_engine/engine_methods/render_voice.js +0 -196
  125. package/synthetizer/audio_engine/engine_methods/soundfont_management/clear_sound_font.js +0 -30
  126. package/synthetizer/audio_engine/engine_methods/soundfont_management/get_preset.js +0 -22
  127. package/synthetizer/audio_engine/engine_methods/soundfont_management/reload_sound_font.js +0 -40
  128. package/synthetizer/audio_engine/engine_methods/soundfont_management/send_preset_list.js +0 -34
  129. package/synthetizer/audio_engine/engine_methods/soundfont_management/set_embedded_sound_font.js +0 -21
  130. package/synthetizer/audio_engine/engine_methods/stopping_notes/kill_note.js +0 -20
  131. package/synthetizer/audio_engine/engine_methods/stopping_notes/note_off.js +0 -55
  132. package/synthetizer/audio_engine/engine_methods/stopping_notes/stop_all_channels.js +0 -16
  133. package/synthetizer/audio_engine/engine_methods/stopping_notes/stop_all_notes.js +0 -30
  134. package/synthetizer/audio_engine/engine_methods/stopping_notes/voice_killing.js +0 -63
  135. package/synthetizer/audio_engine/engine_methods/system_exclusive.js +0 -776
  136. package/synthetizer/audio_engine/engine_methods/tuning_control/channel_pressure.js +0 -24
  137. package/synthetizer/audio_engine/engine_methods/tuning_control/pitch_wheel.js +0 -33
  138. package/synthetizer/audio_engine/engine_methods/tuning_control/poly_pressure.js +0 -31
  139. package/synthetizer/audio_engine/engine_methods/tuning_control/set_master_tuning.js +0 -15
  140. package/synthetizer/audio_engine/engine_methods/tuning_control/set_modulation_depth.js +0 -27
  141. package/synthetizer/audio_engine/engine_methods/tuning_control/set_octave_tuning.js +0 -19
  142. package/synthetizer/audio_engine/engine_methods/tuning_control/set_tuning.js +0 -27
  143. package/synthetizer/audio_engine/engine_methods/tuning_control/transpose_all_channels.js +0 -15
  144. package/synthetizer/audio_engine/engine_methods/tuning_control/transpose_channel.js +0 -34
  145. package/synthetizer/audio_engine/main_processor.js +0 -765
  146. package/synthetizer/audio_engine/message_protocol/README.md +0 -13
  147. package/synthetizer/audio_engine/message_protocol/message_sending.js +0 -22
  148. package/synthetizer/audio_engine/snapshot/apply_synthesizer_snapshot.js +0 -14
  149. package/synthetizer/audio_engine/snapshot/channel_snapshot.js +0 -175
  150. package/synthetizer/audio_engine/snapshot/synthesizer_snapshot.js +0 -122
  151. package/synthetizer/synth_constants.js +0 -20
  152. package/utils/README.md +0 -5
  153. package/utils/byte_functions/big_endian.js +0 -32
  154. package/utils/byte_functions/little_endian.js +0 -77
  155. package/utils/byte_functions/string.js +0 -107
  156. package/utils/byte_functions/variable_length_quantity.js +0 -42
  157. package/utils/indexed_array.js +0 -52
  158. package/utils/loggin.js +0 -79
  159. package/utils/sysex_detector.js +0 -58
  160. package/utils/xg_hacks.js +0 -193
  161. /package/sequencer/{worklet_wrapper/default_sequencer_options.js → default_sequencer_options.js} +0 -0
  162. /package/synthetizer/{worklet_wrapper/sfman_message.js → sfman_message.js} +0 -0
@@ -1,24 +0,0 @@
1
- import { NON_CC_INDEX_OFFSET } from "../../engine_components/controller_tables.js";
2
- import { modulatorSources } from "../../../../soundfont/basic_soundfont/modulator.js";
3
- import { computeModulators } from "../../engine_components/compute_modulator.js";
4
-
5
- /**
6
- * Sets the pressure of the given channel
7
- * @this {MidiAudioChannel}
8
- * @param pressure {number} the pressure of the channel
9
- */
10
- export function channelPressure(pressure)
11
- {
12
- this.midiControllers[NON_CC_INDEX_OFFSET + modulatorSources.channelPressure] = pressure << 7;
13
- this.voices.forEach(v =>
14
- computeModulators(
15
- v,
16
- this.midiControllers,
17
- 0,
18
- modulatorSources.channelPressure
19
- ));
20
- this.synth.callEvent("channelpressure", {
21
- channel: this.channelNumber,
22
- pressure: pressure
23
- });
24
- }
@@ -1,33 +0,0 @@
1
- import { NON_CC_INDEX_OFFSET } from "../../engine_components/controller_tables.js";
2
- import { modulatorSources } from "../../../../soundfont/basic_soundfont/modulator.js";
3
- import { computeModulators } from "../../engine_components/compute_modulator.js";
4
-
5
- /**
6
- * Sets the pitch of the given channel
7
- * @this {MidiAudioChannel}
8
- * @param MSB {number} SECOND byte of the MIDI pitchWheel message
9
- * @param LSB {number} FIRST byte of the MIDI pitchWheel message
10
- */
11
- export function pitchWheel(MSB, LSB)
12
- {
13
- if (this.lockedControllers[NON_CC_INDEX_OFFSET + modulatorSources.pitchWheel])
14
- {
15
- return;
16
- }
17
- const bend = (LSB | (MSB << 7));
18
- this.synth.callEvent("pitchwheel", {
19
- channel: this.channelNumber,
20
- MSB: MSB,
21
- LSB: LSB
22
- });
23
- this.midiControllers[NON_CC_INDEX_OFFSET + modulatorSources.pitchWheel] = bend;
24
- this.voices.forEach(v =>
25
- // compute pitch modulators
26
- computeModulators(
27
- v,
28
- this.midiControllers,
29
- 0,
30
- modulatorSources.pitchWheel
31
- ));
32
- this.sendChannelProperty();
33
- }
@@ -1,31 +0,0 @@
1
- import { computeModulators } from "../../engine_components/compute_modulator.js";
2
- import { modulatorSources } from "../../../../soundfont/basic_soundfont/modulator.js";
3
-
4
- /**
5
- * Sets the pressure of the given note on a specific channel
6
- * @this {MidiAudioChannel}
7
- * @param midiNote {number} 0-127
8
- * @param pressure {number} the pressure of the note
9
- */
10
- export function polyPressure(midiNote, pressure)
11
- {
12
- this.voices.forEach(v =>
13
- {
14
- if (v.midiNote !== midiNote)
15
- {
16
- return;
17
- }
18
- v.pressure = pressure;
19
- computeModulators(
20
- v,
21
- this.midiControllers,
22
- 0,
23
- modulatorSources.polyPressure
24
- );
25
- });
26
- this.synth.callEvent("polypressure", {
27
- channel: this.channelNumber,
28
- midiNote: midiNote,
29
- pressure: pressure
30
- });
31
- }
@@ -1,15 +0,0 @@
1
- import { customControllers } from "../../engine_components/controller_tables.js";
2
-
3
- /**
4
- * Sets the worklet's primary tuning
5
- * @this {SpessaSynthProcessor}
6
- * @param cents {number}
7
- */
8
- export function setMasterTuning(cents)
9
- {
10
- cents = Math.round(cents);
11
- for (let i = 0; i < this.midiAudioChannels.length; i++)
12
- {
13
- this.midiAudioChannels[i].setCustomController(customControllers.masterTuning, cents);
14
- }
15
- }
@@ -1,27 +0,0 @@
1
- import { SpessaSynthInfo } from "../../../../utils/loggin.js";
2
- import { consoleColors } from "../../../../utils/other.js";
3
- import { customControllers } from "../../engine_components/controller_tables.js";
4
-
5
- /**
6
- * @this {MidiAudioChannel}
7
- * @param cents {number}
8
- */
9
- export function setModulationDepth(cents)
10
- {
11
- cents = Math.round(cents);
12
- SpessaSynthInfo(
13
- `%cChannel ${this.channelNumber} modulation depth. Cents: %c${cents}`,
14
- consoleColors.info,
15
- consoleColors.value
16
- );
17
- /* ==============
18
- IMPORTANT
19
- here we convert cents into a multiplier.
20
- midi spec assumes the default is 50 cents,
21
- but it might be different for the soundfont,
22
- so we create a multiplier by dividing cents by 50.
23
- for example, if we want 100 cents, then multiplier will be 2,
24
- which for a preset with depth of 50 will create 100.
25
- ================ */
26
- this.setCustomController(customControllers.modulationMultiplier, cents / 50);
27
- }
@@ -1,19 +0,0 @@
1
- /**
2
- * Sets the octave tuning for a given channel
3
- * @this {MidiAudioChannel}
4
- * @param tuning {Int8Array} LENGTH of 12!
5
- * relative cent tuning.
6
- * min -128 max 127.
7
- */
8
- export function setOctaveTuning(tuning)
9
- {
10
- if (tuning.length !== 12)
11
- {
12
- throw new Error("Tuning is not the length of 12.");
13
- }
14
- this.channelOctaveTuning = new Int8Array(128);
15
- for (let i = 0; i < 128; i++)
16
- {
17
- this.channelOctaveTuning[i] = tuning[i % 12];
18
- }
19
- }
@@ -1,27 +0,0 @@
1
- import { customControllers } from "../../engine_components/controller_tables.js";
2
- import { SpessaSynthInfo } from "../../../../utils/loggin.js";
3
- import { consoleColors } from "../../../../utils/other.js";
4
-
5
- /**
6
- * Sets the channel's tuning
7
- * @this {MidiAudioChannel}
8
- * @param cents {number}
9
- * @param log {boolean}
10
- */
11
- export function setTuning(cents, log = true)
12
- {
13
- cents = Math.round(cents);
14
- this.setCustomController(customControllers.channelTuning, cents);
15
- if (!log)
16
- {
17
- return;
18
- }
19
- SpessaSynthInfo(
20
- `%cFine tuning for %c${this.channelNumber}%c is now set to %c${cents}%c cents.`,
21
- consoleColors.info,
22
- consoleColors.recognized,
23
- consoleColors.info,
24
- consoleColors.value,
25
- consoleColors.info
26
- );
27
- }
@@ -1,15 +0,0 @@
1
- /**
2
- * Transposes all channels by given amount of semitones
3
- * @this {SpessaSynthProcessor}
4
- * @param semitones {number} Can be float
5
- * @param force {boolean} defaults to false, if true transposes the channel even if it's a drum channel
6
- */
7
- export function transposeAllChannels(semitones, force = false)
8
- {
9
- this.transposition = 0;
10
- for (let i = 0; i < this.midiAudioChannels.length; i++)
11
- {
12
- this.midiAudioChannels[i].transposeChannel(semitones, force);
13
- }
14
- this.transposition = semitones;
15
- }
@@ -1,34 +0,0 @@
1
- import { customControllers } from "../../engine_components/controller_tables.js";
2
- import { midiControllers } from "../../../../midi/midi_message.js";
3
-
4
- /**
5
- * Transposes the channel by given amount of semitones
6
- * @this {MidiAudioChannel}
7
- * @param semitones {number} Can be float
8
- * @param force {boolean} defaults to false, if true transposes the channel even if it's a drum channel
9
- */
10
- export function transposeChannel(semitones, force = false)
11
- {
12
- if (!this.drumChannel)
13
- {
14
- semitones += this.synth.transposition;
15
- }
16
- const keyShift = Math.trunc(semitones);
17
- const currentTranspose = this.channelTransposeKeyShift + this.customControllers[customControllers.channelTransposeFine] / 100;
18
- if (
19
- (this.drumChannel && !force)
20
- || semitones === currentTranspose
21
- )
22
- {
23
- return;
24
- }
25
- if (keyShift !== this.channelTransposeKeyShift)
26
- {
27
- // stop all (and emit cc change)
28
- this.controllerChange(midiControllers.allNotesOff, 127);
29
- }
30
- // apply transpose
31
- this.channelTransposeKeyShift = keyShift;
32
- this.setCustomController(customControllers.channelTransposeFine, (semitones - keyShift) * 100);
33
- this.sendChannelProperty();
34
- }