spessasynth_lib 3.16.4 → 3.17.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 (61) hide show
  1. package/@types/index.d.ts +5 -4
  2. package/@types/midi_parser/basic_midi.d.ts +125 -0
  3. package/@types/midi_parser/midi_builder.d.ts +69 -0
  4. package/@types/midi_parser/midi_data.d.ts +2 -2
  5. package/@types/midi_parser/midi_editor.d.ts +4 -4
  6. package/@types/midi_parser/midi_loader.d.ts +3 -100
  7. package/@types/midi_parser/midi_writer.d.ts +2 -2
  8. package/@types/midi_parser/rmidi_writer.d.ts +4 -3
  9. package/@types/midi_parser/used_keys_loaded.d.ts +2 -2
  10. package/@types/sequencer/sequencer.d.ts +1 -1
  11. package/@types/soundfont/basic_soundfont/basic_soundfont.d.ts +5 -4
  12. package/@types/soundfont/basic_soundfont/write_sf2/soundfont_trimmer.d.ts +2 -2
  13. package/@types/soundfont/dls/dls_preset.d.ts +11 -0
  14. package/@types/soundfont/dls/dls_soundfont.d.ts +24 -0
  15. package/@types/soundfont/dls/read_instrument.d.ts +5 -0
  16. package/@types/soundfont/dls/read_instrument_list.d.ts +5 -0
  17. package/@types/soundfont/load_soundfont.d.ts +6 -0
  18. package/@types/soundfont/soundfont.d.ts +2 -1
  19. package/@types/synthetizer/synthetizer.d.ts +2 -2
  20. package/@types/synthetizer/worklet_system/worklet_utilities/worklet_processor_channel.d.ts +2 -2
  21. package/@types/utils/byte_functions/little_endian.d.ts +1 -1
  22. package/README.md +17 -15
  23. package/index.js +6 -4
  24. package/midi_parser/basic_midi.js +146 -0
  25. package/midi_parser/midi_builder.js +281 -0
  26. package/midi_parser/midi_data.js +1 -1
  27. package/midi_parser/midi_editor.js +2 -2
  28. package/midi_parser/midi_loader.js +17 -53
  29. package/midi_parser/midi_writer.js +1 -1
  30. package/midi_parser/rmidi_writer.js +227 -246
  31. package/midi_parser/used_keys_loaded.js +1 -1
  32. package/package.json +1 -1
  33. package/sequencer/sequencer.js +1 -1
  34. package/sequencer/worklet_sequencer/song_control.js +3 -3
  35. package/sequencer/worklet_sequencer/worklet_sequencer.js +1 -1
  36. package/soundfont/basic_soundfont/basic_soundfont.js +25 -10
  37. package/soundfont/basic_soundfont/riff_chunk.js +2 -2
  38. package/soundfont/basic_soundfont/write_sf2/soundfont_trimmer.js +1 -1
  39. package/soundfont/dls/dls_preset.js +25 -0
  40. package/soundfont/dls/dls_soundfont.js +93 -0
  41. package/soundfont/dls/read_instrument.js +22 -0
  42. package/soundfont/dls/read_instrument_list.js +17 -0
  43. package/soundfont/load_soundfont.js +21 -0
  44. package/soundfont/read_sf2/instruments.js +2 -2
  45. package/soundfont/read_sf2/modulators.js +5 -5
  46. package/soundfont/read_sf2/presets.js +7 -7
  47. package/soundfont/read_sf2/samples.js +8 -8
  48. package/soundfont/read_sf2/zones.js +5 -5
  49. package/soundfont/soundfont.js +8 -3
  50. package/synthetizer/synthetizer.js +1 -1
  51. package/synthetizer/worklet_processor.min.js +7 -6
  52. package/synthetizer/worklet_system/main_processor.js +1 -2
  53. package/synthetizer/worklet_system/worklet_methods/program_control.js +12 -20
  54. package/synthetizer/worklet_system/worklet_methods/worklet_soundfont_manager/worklet_soundfont_manager.js +5 -5
  55. package/synthetizer/worklet_system/worklet_utilities/worklet_processor_channel.js +1 -1
  56. package/utils/byte_functions/little_endian.js +1 -1
  57. /package/@types/{midi_handler → external_midi}/midi_handler.d.ts +0 -0
  58. /package/@types/{midi_handler → external_midi}/web_midi_link.d.ts +0 -0
  59. /package/{midi_handler → external_midi}/README.md +0 -0
  60. /package/{midi_handler → external_midi}/midi_handler.js +0 -0
  61. /package/{midi_handler → external_midi}/web_midi_link.js +0 -0
@@ -1,5 +1,4 @@
1
1
  import { DEFAULT_PERCUSSION, DEFAULT_SYNTH_MODE, VOICE_CAP } from '../synthetizer.js'
2
- import { SoundFont2 } from '../../soundfont/soundfont.js'
3
2
  import { WorkletSequencer } from '../../sequencer/worklet_sequencer/worklet_sequencer.js'
4
3
  import { SpessaSynthInfo } from '../../utils/loggin.js'
5
4
  import { consoleColors } from '../../utils/other.js'
@@ -134,7 +133,7 @@ class SpessaSynthProcessor extends AudioWorkletProcessor
134
133
 
135
134
  /**
136
135
  * Overrides the main soundfont (embedded for example
137
- * @type {SoundFont2}
136
+ * @type {BasicSoundFont}
138
137
  */
139
138
  this.overrideSoundfont = undefined;
140
139
 
@@ -1,10 +1,10 @@
1
1
  import { midiControllers } from '../../../midi_parser/midi_message.js'
2
- import { SoundFont2 } from '../../../soundfont/soundfont.js'
3
2
  import { clearSamplesList } from '../worklet_utilities/worklet_voice.js'
4
3
  import { generatorTypes } from '../../../soundfont/read_sf2/generators.js'
5
4
  import { returnMessageType } from '../message_protocol/worklet_message.js'
6
5
  import { SpessaSynthInfo } from '../../../utils/loggin.js'
7
6
  import { consoleColors } from '../../../utils/other.js'
7
+ import { loadSoundFont } from '../../../soundfont/load_soundfont.js'
8
8
 
9
9
  /**
10
10
  * executes a program change
@@ -31,8 +31,8 @@ export function programChange(channel, programNumber, userChange=false)
31
31
  // check if override
32
32
  if(this.overrideSoundfont)
33
33
  {
34
- const bankWithOffset = bank === 128 ? 128 : Math.max(0, bank - this.soundfontBankOffset);
35
- const p = this.overrideSoundfont.presets.find(p => p.program === programNumber && p.bank === bankWithOffset);
34
+ const bankWithOffset = bank === 128 ? 128 : bank - this.soundfontBankOffset;
35
+ const p = this.overrideSoundfont.getPresetNoFallback(bankWithOffset, programNumber);
36
36
  if(p)
37
37
  {
38
38
  sentBank = bank;
@@ -40,12 +40,6 @@ export function programChange(channel, programNumber, userChange=false)
40
40
  channelObject.presetUsesOverride = true;
41
41
  }
42
42
  else
43
- if(this.soundfontBankOffset === 0)
44
- {
45
- preset = this.overrideSoundfont.getPreset(0, programNumber);
46
- sentBank = preset.bank;
47
- }
48
- else
49
43
  {
50
44
  preset = this.soundfontManager.getPreset(bank, programNumber);
51
45
  sentBank = preset.bank;
@@ -71,24 +65,19 @@ export function programChange(channel, programNumber, userChange=false)
71
65
  * @this {SpessaSynthProcessor}
72
66
  * @param program {number}
73
67
  * @param bank {number}
74
- * @returns {Preset}
68
+ * @returns {BasicPreset}
75
69
  */
76
70
  export function getPreset(bank, program)
77
71
  {
78
72
  if(this.overrideSoundfont)
79
73
  {
80
74
  // if overriden soundfont
81
- const bankWithOffset = bank === 128 ? 128 : Math.max(0, bank - this.soundfontBankOffset);
82
- const preset = this.overrideSoundfont.presets.find(p => p.program === program && p.bank === bankWithOffset);
75
+ const bankWithOffset = bank === 128 ? 128 : bank - this.soundfontBankOffset;
76
+ const preset = this.overrideSoundfont.getPresetNoFallback(bankWithOffset, program);
83
77
  if(preset)
84
78
  {
85
79
  return preset;
86
80
  }
87
- else
88
- if(this.soundfontBankOffset === 0)
89
- {
90
- return this.overrideSoundfont.getPreset(0, program);
91
- }
92
81
  }
93
82
  return this.soundfontManager.getPreset(bank, program);
94
83
  }
@@ -97,7 +86,7 @@ export function getPreset(bank, program)
97
86
 
98
87
  /**
99
88
  * @param channel {number}
100
- * @param preset {Preset}
89
+ * @param preset {BasicPreset}
101
90
  * @this {SpessaSynthProcessor}
102
91
  */
103
92
  export function setPreset(channel, preset)
@@ -207,7 +196,10 @@ export function clearSoundFont(sendPresets = true, clearOverride = true)
207
196
  {
208
197
  channelObject.cachedVoices.push([]);
209
198
  }
210
- channelObject.lockPreset = false;
199
+ if(!clearOverride)
200
+ {
201
+ channelObject.lockPreset = false;
202
+ }
211
203
  this.programChange(i, channelObject.preset.program);
212
204
  }
213
205
  if(sendPresets)
@@ -228,7 +220,7 @@ export function reloadSoundFont(buffer, isOverride = false)
228
220
  {
229
221
  if(isOverride)
230
222
  {
231
- this.overrideSoundfont = new SoundFont2(buffer);
223
+ this.overrideSoundfont = loadSoundFont(buffer);
232
224
  // assign sample offset
233
225
  this.overrideSoundfont.setSampleIDOffset(this.soundfontManager.totalSoundfontOffset)
234
226
  }
@@ -1,11 +1,11 @@
1
- import { SoundFont2 } from '../../../../soundfont/soundfont.js'
2
1
  import { SpessaSynthWarn } from '../../../../utils/loggin.js'
3
2
  import { WorkletSoundfontManagerMessageType } from './sfman_message.js'
3
+ import { loadSoundFont } from '../../../../soundfont/load_soundfont.js'
4
4
 
5
5
  /**
6
6
  * @typedef {Object} SoundFontType
7
7
  * @property {string} id - unique id for the soundfont
8
- * @property {SoundFont2} soundfont - the soundfont itself
8
+ * @property {BasicSoundFont} soundfont - the soundfont itself
9
9
  * @property {number} bankOffset - the soundfont's bank offset
10
10
  */
11
11
 
@@ -110,7 +110,7 @@ export class WorkletSoundfontManager
110
110
  */
111
111
  reloadManager(soundFontArrayBuffer)
112
112
  {
113
- const font = new SoundFont2(soundFontArrayBuffer);
113
+ const font = loadSoundFont(soundFontArrayBuffer);
114
114
  /**
115
115
  * All the soundfonts, ordered from the most important to the least.
116
116
  * @type {SoundFontType[]}
@@ -159,7 +159,7 @@ export class WorkletSoundfontManager
159
159
  }
160
160
  this.soundfontList.push({
161
161
  id: id,
162
- soundfont: new SoundFont2(buffer),
162
+ soundfont: loadSoundFont(buffer),
163
163
  bankOffset: bankOffset
164
164
  });
165
165
  this.generatePresetList();
@@ -182,7 +182,7 @@ export class WorkletSoundfontManager
182
182
  * Gets a given preset from the soundfont stack
183
183
  * @param bankNumber {number}
184
184
  * @param programNumber {number}
185
- * @returns {Preset} the preset
185
+ * @returns {BasicPreset} the preset
186
186
  */
187
187
  getPreset(bankNumber, programNumber)
188
188
  {
@@ -16,7 +16,7 @@ import { modulatorSources } from '../../../soundfont/read_sf2/modulators.js'
16
16
  * @property {number} NRPFine - the current fine value of the Non-Registered Parameter
17
17
  * @property {number} RPValue - the current value of the Registered Parameter
18
18
  *
19
- * @property {Preset} preset - the channel's preset
19
+ * @property {BasicPreset} preset - the channel's preset
20
20
  * @property {boolean} lockPreset - indicates whether the program on the channel is locked
21
21
  * @property {boolean} presetUsesOverride - indcates if the channel uses a preset from the override soundfont.
22
22
  *
@@ -4,7 +4,7 @@
4
4
  * @param bytesAmount {number}
5
5
  * @returns {number}
6
6
  */
7
- export function readBytesAsUintLittleEndian(dataArray, bytesAmount){
7
+ export function readLittleEndian(dataArray, bytesAmount){
8
8
  let out = 0;
9
9
  for(let i = 0; i < bytesAmount; i++)
10
10
  {
File without changes
File without changes