spessasynth_lib 0.0.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 (154) hide show
  1. package/.idea/modules.xml +8 -0
  2. package/.idea/spessasynth_lib.iml +12 -0
  3. package/.idea/vcs.xml +6 -0
  4. package/copy_version.sh +38 -0
  5. package/index.js +73 -0
  6. package/package/@types/externals/stbvorbis_sync/stbvorbis_sync.min.d.ts +1 -0
  7. package/package/@types/index.d.ts +34 -0
  8. package/package/@types/midi_handler/midi_handler.d.ts +39 -0
  9. package/package/@types/midi_handler/web_midi_link.d.ts +12 -0
  10. package/package/@types/midi_parser/midi_data.d.ts +95 -0
  11. package/package/@types/midi_parser/midi_editor.d.ts +45 -0
  12. package/package/@types/midi_parser/midi_loader.d.ts +100 -0
  13. package/package/@types/midi_parser/midi_message.d.ts +154 -0
  14. package/package/@types/midi_parser/midi_writer.d.ts +6 -0
  15. package/package/@types/midi_parser/rmidi_writer.d.ts +9 -0
  16. package/package/@types/midi_parser/used_keys_loaded.d.ts +7 -0
  17. package/package/@types/sequencer/sequencer.d.ts +180 -0
  18. package/package/@types/sequencer/worklet_sequencer/sequencer_message.d.ts +28 -0
  19. package/package/@types/soundfont/read/generators.d.ts +98 -0
  20. package/package/@types/soundfont/read/instruments.d.ts +50 -0
  21. package/package/@types/soundfont/read/modulators.d.ts +73 -0
  22. package/package/@types/soundfont/read/presets.d.ts +87 -0
  23. package/package/@types/soundfont/read/riff_chunk.d.ts +31 -0
  24. package/package/@types/soundfont/read/samples.d.ts +134 -0
  25. package/package/@types/soundfont/read/zones.d.ts +141 -0
  26. package/package/@types/soundfont/soundfont.d.ts +76 -0
  27. package/package/@types/soundfont/write/ibag.d.ts +6 -0
  28. package/package/@types/soundfont/write/igen.d.ts +6 -0
  29. package/package/@types/soundfont/write/imod.d.ts +6 -0
  30. package/package/@types/soundfont/write/inst.d.ts +6 -0
  31. package/package/@types/soundfont/write/pbag.d.ts +6 -0
  32. package/package/@types/soundfont/write/pgen.d.ts +6 -0
  33. package/package/@types/soundfont/write/phdr.d.ts +6 -0
  34. package/package/@types/soundfont/write/pmod.d.ts +6 -0
  35. package/package/@types/soundfont/write/sdta.d.ts +11 -0
  36. package/package/@types/soundfont/write/shdr.d.ts +8 -0
  37. package/package/@types/soundfont/write/soundfont_trimmer.d.ts +6 -0
  38. package/package/@types/soundfont/write/write.d.ts +21 -0
  39. package/package/@types/synthetizer/audio_effects/effects_config.d.ts +29 -0
  40. package/package/@types/synthetizer/audio_effects/fancy_chorus.d.ts +93 -0
  41. package/package/@types/synthetizer/audio_effects/reverb.d.ts +7 -0
  42. package/package/@types/synthetizer/synth_event_handler.d.ts +161 -0
  43. package/package/@types/synthetizer/synthetizer.d.ts +294 -0
  44. package/package/@types/synthetizer/worklet_system/message_protocol/worklet_message.d.ts +89 -0
  45. package/package/@types/synthetizer/worklet_system/worklet_utilities/worklet_processor_channel.d.ts +134 -0
  46. package/package/@types/synthetizer/worklet_url.d.ts +5 -0
  47. package/package/@types/utils/buffer_to_wav.d.ts +8 -0
  48. package/package/@types/utils/byte_functions/big_endian.d.ts +13 -0
  49. package/package/@types/utils/byte_functions/little_endian.d.ts +35 -0
  50. package/package/@types/utils/byte_functions/string.d.ts +22 -0
  51. package/package/@types/utils/byte_functions/variable_length_quantity.d.ts +12 -0
  52. package/package/@types/utils/indexed_array.d.ts +21 -0
  53. package/package/@types/utils/loggin.d.ts +26 -0
  54. package/package/@types/utils/other.d.ts +32 -0
  55. package/package/LICENSE +26 -0
  56. package/package/README.md +84 -0
  57. package/package/externals/NOTICE +9 -0
  58. package/package/externals/libvorbis/@types/OggVorbisEncoder.d.ts +34 -0
  59. package/package/externals/libvorbis/OggVorbisEncoder.min.js +1 -0
  60. package/package/externals/stbvorbis_sync/@types/stbvorbis_sync.d.ts +12 -0
  61. package/package/externals/stbvorbis_sync/LICENSE +202 -0
  62. package/package/externals/stbvorbis_sync/stbvorbis_sync.min.js +1 -0
  63. package/package/index.js +73 -0
  64. package/package/midi_handler/README.md +3 -0
  65. package/package/midi_handler/midi_handler.js +118 -0
  66. package/package/midi_handler/web_midi_link.js +41 -0
  67. package/package/midi_parser/README.md +3 -0
  68. package/package/midi_parser/midi_data.js +121 -0
  69. package/package/midi_parser/midi_editor.js +557 -0
  70. package/package/midi_parser/midi_loader.js +502 -0
  71. package/package/midi_parser/midi_message.js +234 -0
  72. package/package/midi_parser/midi_writer.js +95 -0
  73. package/package/midi_parser/rmidi_writer.js +271 -0
  74. package/package/midi_parser/used_keys_loaded.js +172 -0
  75. package/package/package.json +43 -0
  76. package/package/sequencer/README.md +23 -0
  77. package/package/sequencer/sequencer.js +439 -0
  78. package/package/sequencer/worklet_sequencer/events.js +92 -0
  79. package/package/sequencer/worklet_sequencer/play.js +309 -0
  80. package/package/sequencer/worklet_sequencer/process_event.js +167 -0
  81. package/package/sequencer/worklet_sequencer/process_tick.js +85 -0
  82. package/package/sequencer/worklet_sequencer/sequencer_message.js +39 -0
  83. package/package/sequencer/worklet_sequencer/song_control.js +193 -0
  84. package/package/sequencer/worklet_sequencer/worklet_sequencer.js +218 -0
  85. package/package/soundfont/README.md +8 -0
  86. package/package/soundfont/read/generators.js +212 -0
  87. package/package/soundfont/read/instruments.js +125 -0
  88. package/package/soundfont/read/modulators.js +249 -0
  89. package/package/soundfont/read/presets.js +300 -0
  90. package/package/soundfont/read/riff_chunk.js +81 -0
  91. package/package/soundfont/read/samples.js +398 -0
  92. package/package/soundfont/read/zones.js +310 -0
  93. package/package/soundfont/soundfont.js +357 -0
  94. package/package/soundfont/write/ibag.js +39 -0
  95. package/package/soundfont/write/igen.js +75 -0
  96. package/package/soundfont/write/imod.js +46 -0
  97. package/package/soundfont/write/inst.js +34 -0
  98. package/package/soundfont/write/pbag.js +39 -0
  99. package/package/soundfont/write/pgen.js +77 -0
  100. package/package/soundfont/write/phdr.js +42 -0
  101. package/package/soundfont/write/pmod.js +46 -0
  102. package/package/soundfont/write/sdta.js +72 -0
  103. package/package/soundfont/write/shdr.js +54 -0
  104. package/package/soundfont/write/soundfont_trimmer.js +169 -0
  105. package/package/soundfont/write/write.js +180 -0
  106. package/package/synthetizer/README.md +6 -0
  107. package/package/synthetizer/audio_effects/effects_config.js +21 -0
  108. package/package/synthetizer/audio_effects/fancy_chorus.js +120 -0
  109. package/package/synthetizer/audio_effects/impulse_response_2.flac +0 -0
  110. package/package/synthetizer/audio_effects/reverb.js +24 -0
  111. package/package/synthetizer/synth_event_handler.js +156 -0
  112. package/package/synthetizer/synthetizer.js +766 -0
  113. package/package/synthetizer/worklet_processor.min.js +13 -0
  114. package/package/synthetizer/worklet_system/README.md +6 -0
  115. package/package/synthetizer/worklet_system/main_processor.js +363 -0
  116. package/package/synthetizer/worklet_system/message_protocol/handle_message.js +197 -0
  117. package/package/synthetizer/worklet_system/message_protocol/message_sending.js +74 -0
  118. package/package/synthetizer/worklet_system/message_protocol/worklet_message.js +121 -0
  119. package/package/synthetizer/worklet_system/minify_processor.sh +4 -0
  120. package/package/synthetizer/worklet_system/worklet_methods/controller_control.js +230 -0
  121. package/package/synthetizer/worklet_system/worklet_methods/data_entry.js +277 -0
  122. package/package/synthetizer/worklet_system/worklet_methods/note_off.js +109 -0
  123. package/package/synthetizer/worklet_system/worklet_methods/note_on.js +91 -0
  124. package/package/synthetizer/worklet_system/worklet_methods/program_control.js +183 -0
  125. package/package/synthetizer/worklet_system/worklet_methods/reset_controllers.js +177 -0
  126. package/package/synthetizer/worklet_system/worklet_methods/snapshot.js +129 -0
  127. package/package/synthetizer/worklet_system/worklet_methods/system_exclusive.js +272 -0
  128. package/package/synthetizer/worklet_system/worklet_methods/tuning_control.js +195 -0
  129. package/package/synthetizer/worklet_system/worklet_methods/vibrato_control.js +29 -0
  130. package/package/synthetizer/worklet_system/worklet_methods/voice_control.js +233 -0
  131. package/package/synthetizer/worklet_system/worklet_processor.js +9 -0
  132. package/package/synthetizer/worklet_system/worklet_utilities/lfo.js +23 -0
  133. package/package/synthetizer/worklet_system/worklet_utilities/lowpass_filter.js +130 -0
  134. package/package/synthetizer/worklet_system/worklet_utilities/modulation_envelope.js +73 -0
  135. package/package/synthetizer/worklet_system/worklet_utilities/modulator_curves.js +86 -0
  136. package/package/synthetizer/worklet_system/worklet_utilities/stereo_panner.js +81 -0
  137. package/package/synthetizer/worklet_system/worklet_utilities/unit_converter.js +66 -0
  138. package/package/synthetizer/worklet_system/worklet_utilities/volume_envelope.js +265 -0
  139. package/package/synthetizer/worklet_system/worklet_utilities/wavetable_oscillator.js +83 -0
  140. package/package/synthetizer/worklet_system/worklet_utilities/worklet_modulator.js +234 -0
  141. package/package/synthetizer/worklet_system/worklet_utilities/worklet_processor_channel.js +116 -0
  142. package/package/synthetizer/worklet_system/worklet_utilities/worklet_voice.js +272 -0
  143. package/package/synthetizer/worklet_url.js +5 -0
  144. package/package/utils/README.md +4 -0
  145. package/package/utils/buffer_to_wav.js +101 -0
  146. package/package/utils/byte_functions/big_endian.js +28 -0
  147. package/package/utils/byte_functions/little_endian.js +74 -0
  148. package/package/utils/byte_functions/string.js +97 -0
  149. package/package/utils/byte_functions/variable_length_quantity.js +37 -0
  150. package/package/utils/encode_vorbis.js +30 -0
  151. package/package/utils/indexed_array.js +41 -0
  152. package/package/utils/loggin.js +79 -0
  153. package/package/utils/other.js +54 -0
  154. package/package.json +43 -0
@@ -0,0 +1,180 @@
1
+ /**
2
+ * sequencer.js
3
+ * purpose: plays back the midi file decoded by midi_loader.js, including support for multi-channel midis (adding channels when more than 1 midi port is detected)
4
+ */
5
+ /**
6
+ * @typedef MidFile {Object}
7
+ * @property {ArrayBuffer} binary - the binary data of the file.
8
+ * @property {string|undefined} altName - the alternative name for the file
9
+ */
10
+ /**
11
+ * @typedef {MIDI|MidFile} MIDIFile
12
+ */
13
+ export class Sequencer {
14
+ /**
15
+ * Creates a new Midi sequencer for playing back MIDI files
16
+ * @param midiBinaries {MIDIFile[]} List of the buffers of the MIDI files
17
+ * @param synth {Synthetizer} synth to send events to
18
+ */
19
+ constructor(midiBinaries: MIDIFile[], synth: Synthetizer);
20
+ ignoreEvents: boolean;
21
+ synth: Synthetizer;
22
+ highResTimeOffset: number;
23
+ /**
24
+ * Absolute playback startTime, bases on the synth's time
25
+ * @type {number}
26
+ */
27
+ absoluteStartTime: number;
28
+ /**
29
+ * @type {function(MIDI)}
30
+ * @private
31
+ */
32
+ private _getMIDIResolve;
33
+ /**
34
+ * Controls the playback's rate
35
+ * @type {number}
36
+ */
37
+ _playbackRate: number;
38
+ songIndex: number;
39
+ _loop: boolean;
40
+ /**
41
+ * Indicates whether the sequencer has finished playing a sequence
42
+ * @type {boolean}
43
+ */
44
+ isFinished: boolean;
45
+ /**
46
+ * The current sequence's length, in seconds
47
+ * @type {number}
48
+ */
49
+ duration: number;
50
+ resetMIDIOut(): void;
51
+ set loop(value: boolean);
52
+ get loop(): boolean;
53
+ /**
54
+ * @param messageType {WorkletSequencerMessageType}
55
+ * @param messageData {any}
56
+ * @private
57
+ */
58
+ private _sendMessage;
59
+ /**
60
+ * Executes when MIDI parsing has an error.
61
+ * @type {function(string)}
62
+ */
63
+ onError: (arg0: string) => any;
64
+ /**
65
+ * @param {WorkletSequencerReturnMessageType} messageType
66
+ * @param {any} messageData
67
+ * @private
68
+ */
69
+ private _handleMessage;
70
+ /**
71
+ * The sequence's data, except for the track data.
72
+ * @type {MidiData}
73
+ */
74
+ midiData: MidiData;
75
+ pausedTime: number;
76
+ /**
77
+ * @param value {number}
78
+ */
79
+ set playbackRate(value: number);
80
+ /**
81
+ * @returns {number}
82
+ */
83
+ get playbackRate(): number;
84
+ /**
85
+ * Adds a new event that gets called when the song changes
86
+ * @param callback {function(MidiData)}
87
+ * @param id {string} must be unique
88
+ */
89
+ addOnSongChangeEvent(callback: (arg0: MidiData) => any, id: string): void;
90
+ /**
91
+ * Adds a new event that gets called when the time changes
92
+ * @param callback {function(number)} the new time, in seconds
93
+ * @param id {string} must be unique
94
+ */
95
+ addOnTimeChangeEvent(callback: (arg0: number) => any, id: string): void;
96
+ /**
97
+ * @returns {Promise<MIDI>}
98
+ */
99
+ getMIDI(): Promise<MIDI>;
100
+ /**
101
+ * @param midiBuffers {MIDIFile[]}
102
+ */
103
+ loadNewSongList(midiBuffers: MIDIFile[]): void;
104
+ songsAmount: number;
105
+ nextSong(): void;
106
+ previousSong(): void;
107
+ set currentTime(time: number);
108
+ /**
109
+ * @returns {number} Current playback time, in seconds
110
+ */
111
+ get currentTime(): number;
112
+ /**
113
+ * @param time
114
+ * @private
115
+ */
116
+ private _recalculateStartTime;
117
+ /**
118
+ * Use for visualization as it's not affected by the audioContext stutter
119
+ * @returns {number}
120
+ */
121
+ get currentHighResolutionTime(): number;
122
+ /**
123
+ * @param output {MIDIOutput}
124
+ */
125
+ connectMidiOutput(output: MIDIOutput): void;
126
+ MIDIout: MIDIOutput;
127
+ /**
128
+ * Pauses the playback
129
+ */
130
+ pause(): void;
131
+ unpause(): void;
132
+ /**
133
+ * true if paused, false if playing or stopped
134
+ * @returns {boolean}
135
+ */
136
+ get paused(): boolean;
137
+ /**
138
+ * Starts the playback
139
+ * @param resetTime {boolean} If true, time is set to 0s
140
+ */
141
+ play(resetTime?: boolean): void;
142
+ /**
143
+ * Stops the playback
144
+ */
145
+ stop(): void;
146
+ /**
147
+ * @type {Object<string, function(MidiData)>}
148
+ * @private
149
+ */
150
+ private onSongChange;
151
+ /**
152
+ * Fires on text event
153
+ * @param data {Uint8Array} the data text
154
+ * @param type {number} the status byte of the message (the meta status byte)
155
+ */
156
+ onTextEvent: any;
157
+ /**
158
+ * Fires when CurrentTime changes
159
+ * @type {Object<string, function(number)>} the time that was changed to
160
+ * @private
161
+ */
162
+ private onTimeChange;
163
+ }
164
+ /**
165
+ * {Object}
166
+ */
167
+ export type MidFile = {
168
+ /**
169
+ * - the binary data of the file.
170
+ */
171
+ binary: ArrayBuffer;
172
+ /**
173
+ * - the alternative name for the file
174
+ */
175
+ altName: string | undefined;
176
+ };
177
+ export type MIDIFile = MIDI | MidFile;
178
+ import { Synthetizer } from '../synthetizer/synthetizer.js';
179
+ import { MidiData } from '../midi_parser/midi_data.js';
180
+ import { MIDI } from '../midi_parser/midi_loader.js';
@@ -0,0 +1,28 @@
1
+ /**
2
+ * *
3
+ */
4
+ export type WorkletSequencerMessageType = number;
5
+ export namespace WorkletSequencerMessageType {
6
+ let loadNewSongList: number;
7
+ let pause: number;
8
+ let stop: number;
9
+ let play: number;
10
+ let setTime: number;
11
+ let changeMIDIMessageSending: number;
12
+ let setPlaybackRate: number;
13
+ let setLoop: number;
14
+ let changeSong: number;
15
+ let getMIDI: number;
16
+ }
17
+ export type WorkletSequencerReturnMessageType = number;
18
+ export namespace WorkletSequencerReturnMessageType {
19
+ export let midiEvent: number;
20
+ export let songChange: number;
21
+ export let textEvent: number;
22
+ export let timeChange: number;
23
+ let pause_1: number;
24
+ export { pause_1 as pause };
25
+ let getMIDI_1: number;
26
+ export { getMIDI_1 as getMIDI };
27
+ export let midiError: number;
28
+ }
@@ -0,0 +1,98 @@
1
+ /**
2
+ * @param generatorType {number}
3
+ * @param presetGens {Generator[]}
4
+ * @param instrumentGens {Generator[]}
5
+ */
6
+ export function addAndClampGenerator(generatorType: number, presetGens: Generator[], instrumentGens: Generator[]): number;
7
+ /**
8
+ * Reads the generator read
9
+ * @param generatorChunk {RiffChunk}
10
+ * @returns {Generator[]}
11
+ */
12
+ export function readGenerators(generatorChunk: RiffChunk): Generator[];
13
+ export type generatorTypes = number;
14
+ export namespace generatorTypes {
15
+ let startAddrsOffset: number;
16
+ let endAddrOffset: number;
17
+ let startloopAddrsOffset: number;
18
+ let endloopAddrsOffset: number;
19
+ let startAddrsCoarseOffset: number;
20
+ let modLfoToPitch: number;
21
+ let vibLfoToPitch: number;
22
+ let modEnvToPitch: number;
23
+ let initialFilterFc: number;
24
+ let initialFilterQ: number;
25
+ let modLfoToFilterFc: number;
26
+ let modEnvToFilterFc: number;
27
+ let endAddrsCoarseOffset: number;
28
+ let modLfoToVolume: number;
29
+ let unused1: number;
30
+ let chorusEffectsSend: number;
31
+ let reverbEffectsSend: number;
32
+ let pan: number;
33
+ let unused2: number;
34
+ let unused3: number;
35
+ let unused4: number;
36
+ let delayModLFO: number;
37
+ let freqModLFO: number;
38
+ let delayVibLFO: number;
39
+ let freqVibLFO: number;
40
+ let delayModEnv: number;
41
+ let attackModEnv: number;
42
+ let holdModEnv: number;
43
+ let decayModEnv: number;
44
+ let sustainModEnv: number;
45
+ let releaseModEnv: number;
46
+ let keyNumToModEnvHold: number;
47
+ let keyNumToModEnvDecay: number;
48
+ let delayVolEnv: number;
49
+ let attackVolEnv: number;
50
+ let holdVolEnv: number;
51
+ let decayVolEnv: number;
52
+ let sustainVolEnv: number;
53
+ let releaseVolEnv: number;
54
+ let keyNumToVolEnvHold: number;
55
+ let keyNumToVolEnvDecay: number;
56
+ let instrument: number;
57
+ let reserved1: number;
58
+ let keyRange: number;
59
+ let velRange: number;
60
+ let startloopAddrsCoarseOffset: number;
61
+ let keyNum: number;
62
+ let velocity: number;
63
+ let initialAttenuation: number;
64
+ let reserved2: number;
65
+ let endloopAddrsCoarseOffset: number;
66
+ let coarseTune: number;
67
+ let fineTune: number;
68
+ let sampleID: number;
69
+ let sampleModes: number;
70
+ let reserved3: number;
71
+ let scaleTuning: number;
72
+ let exclusiveClass: number;
73
+ let overridingRootKey: number;
74
+ let unused5: number;
75
+ let endOper: number;
76
+ }
77
+ /**
78
+ * @type {{min: number, max: number, def: number}[]}
79
+ */
80
+ export const generatorLimits: {
81
+ min: number;
82
+ max: number;
83
+ def: number;
84
+ }[];
85
+ export class Generator {
86
+ /**
87
+ * Creates a generator
88
+ * @param dataArray {IndexedByteArray}
89
+ */
90
+ constructor(dataArray: IndexedByteArray);
91
+ /**
92
+ * @type {generatorTypes}
93
+ **/
94
+ generatorType: generatorTypes;
95
+ generatorValue: number;
96
+ }
97
+ import { RiffChunk } from './riff_chunk.js';
98
+ import { IndexedByteArray } from '../../utils/indexed_array.js';
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Reads the instruments
3
+ * @param instrumentChunk {RiffChunk}
4
+ * @param instrumentZones {InstrumentZone[]}
5
+ * @returns {Instrument[]}
6
+ */
7
+ export function readInstruments(instrumentChunk: RiffChunk, instrumentZones: InstrumentZone[]): Instrument[];
8
+ /**
9
+ * instrument.js
10
+ * purpose: parses soundfont instrument and stores them as a class
11
+ */
12
+ export class Instrument {
13
+ /**
14
+ * Creates an instrument
15
+ * @param instrumentChunk {RiffChunk}
16
+ */
17
+ constructor(instrumentChunk: RiffChunk);
18
+ instrumentName: string;
19
+ instrumentZoneIndex: number;
20
+ instrumentZonesAmount: number;
21
+ /**
22
+ * @type {InstrumentZone[]}
23
+ */
24
+ instrumentZones: InstrumentZone[];
25
+ _useCount: number;
26
+ addUseCount(): void;
27
+ removeUseCount(): void;
28
+ /**
29
+ * @returns {number}
30
+ */
31
+ get useCount(): number;
32
+ deleteInstrument(): void;
33
+ /**
34
+ * @param index {number}
35
+ * @returns {boolean} is the zone has been deleted
36
+ */
37
+ safeDeleteZone(index: number): boolean;
38
+ /**
39
+ * @param index {number}
40
+ */
41
+ deleteZone(index: number): void;
42
+ /**
43
+ * Loads all the instrument zones, given the amount
44
+ * @param amount {number}
45
+ * @param zones {InstrumentZone[]}
46
+ */
47
+ getInstrumentZones(amount: number, zones: InstrumentZone[]): void;
48
+ }
49
+ import { RiffChunk } from "./riff_chunk.js";
50
+ import { InstrumentZone } from "./zones.js";
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Reads the modulator read
3
+ * @param modulatorChunk {RiffChunk}
4
+ * @returns {Modulator[]}
5
+ */
6
+ export function readModulators(modulatorChunk: RiffChunk): Modulator[];
7
+ export namespace modulatorSources {
8
+ let noController: number;
9
+ let noteOnVelocity: number;
10
+ let noteOnKeyNum: number;
11
+ let polyPressure: number;
12
+ let channelPressure: number;
13
+ let pitchWheel: number;
14
+ let pitchWheelRange: number;
15
+ let link: number;
16
+ }
17
+ export namespace modulatorCurveTypes {
18
+ export let linear: number;
19
+ export let concave: number;
20
+ export let convex: number;
21
+ let _switch: number;
22
+ export { _switch as switch };
23
+ }
24
+ /**
25
+ *
26
+ * type, polarity, direction
27
+ * @type {Float32Array[][][]}
28
+ */
29
+ export const precomputedTransforms: Float32Array[][][];
30
+ export class Modulator {
31
+ /**
32
+ * Creates a modulator
33
+ * @param dataArray {IndexedByteArray|{srcEnum: number, secSrcEnum: number, dest:number, amt: number, transform: number}}
34
+ */
35
+ constructor(dataArray: IndexedByteArray | {
36
+ srcEnum: number;
37
+ secSrcEnum: number;
38
+ dest: number;
39
+ amt: number;
40
+ transform: number;
41
+ });
42
+ modulatorSource: any;
43
+ /**
44
+ * @type {generatorTypes}
45
+ */
46
+ modulatorDestination: generatorTypes;
47
+ modulationSecondarySrc: any;
48
+ transformAmount: any;
49
+ transformType: any;
50
+ sourcePolarity: number;
51
+ sourceDirection: number;
52
+ sourceUsesCC: number;
53
+ sourceIndex: number;
54
+ sourceCurveType: number;
55
+ secSrcPolarity: number;
56
+ secSrcDirection: number;
57
+ secSrcUsesCC: number;
58
+ secSrcIndex: number;
59
+ secSrcCurveType: number;
60
+ /**
61
+ * Sums transform and creates a NEW modulator
62
+ * @param modulator {Modulator}
63
+ * @returns {Modulator}
64
+ */
65
+ sumTransform(modulator: Modulator): Modulator;
66
+ /**
67
+ * @returns {string}
68
+ */
69
+ debugString(): string;
70
+ }
71
+ export const defaultModulators: Modulator[];
72
+ import { generatorTypes } from './generators.js';
73
+ import { IndexedByteArray } from '../../utils/indexed_array.js';
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Reads the presets
3
+ * @param presetChunk {RiffChunk}
4
+ * @param presetZones {PresetZone[]}
5
+ * @returns {Preset[]}
6
+ */
7
+ export function readPresets(presetChunk: RiffChunk, presetZones: PresetZone[]): Preset[];
8
+ /**
9
+ * parses soundfont presets, also includes function for getting the generators and samples from midi note and velocity
10
+ */
11
+ export class Preset {
12
+ /**
13
+ * Creates a preset
14
+ * @param presetChunk {RiffChunk}
15
+ */
16
+ constructor(presetChunk: RiffChunk);
17
+ presetName: string;
18
+ program: number;
19
+ bank: number;
20
+ presetZoneStartIndex: number;
21
+ presetZonesAmount: number;
22
+ /**
23
+ * @type {PresetZone[]}
24
+ */
25
+ presetZones: PresetZone[];
26
+ /**
27
+ * Stores already found getSamplesAndGenerators for reuse
28
+ * @type {SampleAndGenerators[][][]}
29
+ */
30
+ foundSamplesAndGenerators: {
31
+ instrumentGenerators: Generator[];
32
+ presetGenerators: Generator[];
33
+ modulators: Modulator[];
34
+ sample: Sample;
35
+ sampleID: number;
36
+ }[][][];
37
+ library: number;
38
+ genre: number;
39
+ morphology: number;
40
+ /**
41
+ * Loads all the preset zones, given the amount
42
+ * @param amount {number}
43
+ * @param zones {PresetZone[]}
44
+ */
45
+ getPresetZones(amount: number, zones: PresetZone[]): void;
46
+ deletePreset(): void;
47
+ /**
48
+ * @param index {number}
49
+ */
50
+ deleteZone(index: number): void;
51
+ /**
52
+ * Preloads all samples (async)
53
+ */
54
+ preload(keyMin: any, keyMax: any): void;
55
+ /**
56
+ * Preloads a specific key/velocity combo
57
+ * @param key {number}
58
+ * @param velocity {number}
59
+ */
60
+ preloadSpecific(key: number, velocity: number): void;
61
+ /**
62
+ * @typedef {{
63
+ * instrumentGenerators: Generator[],
64
+ * presetGenerators: Generator[],
65
+ * modulators: Modulator[],
66
+ * sample: Sample,
67
+ * sampleID: number,
68
+ * }} SampleAndGenerators
69
+ */
70
+ /**
71
+ * Returns generatorTranslator and generators for given note
72
+ * @param midiNote {number}
73
+ * @param velocity {number}
74
+ * @returns {SampleAndGenerators[]}
75
+ */
76
+ getSamplesAndGenerators(midiNote: number, velocity: number): {
77
+ instrumentGenerators: Generator[];
78
+ presetGenerators: Generator[];
79
+ modulators: Modulator[];
80
+ sample: Sample;
81
+ sampleID: number;
82
+ }[];
83
+ }
84
+ import { RiffChunk } from "./riff_chunk.js";
85
+ import { PresetZone } from "./zones.js";
86
+ import { Generator } from './generators.js';
87
+ import { Sample } from "./samples.js";
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @param dataArray {IndexedByteArray}
3
+ * @param readData {boolean}
4
+ * @param forceShift {boolean}
5
+ * @returns {RiffChunk}
6
+ */
7
+ export function readRIFFChunk(dataArray: IndexedByteArray, readData?: boolean, forceShift?: boolean): RiffChunk;
8
+ /**
9
+ * @param chunk {RiffChunk}
10
+ * @param prepend {IndexedByteArray}
11
+ * @returns {IndexedByteArray}
12
+ */
13
+ export function writeRIFFChunk(chunk: RiffChunk, prepend?: IndexedByteArray): IndexedByteArray;
14
+ /**
15
+ * riff_chunk.js
16
+ * reads a riff read and stores it as a class
17
+ */
18
+ export class RiffChunk {
19
+ /**
20
+ * Creates a new riff read
21
+ * @constructor
22
+ * @param header {string}
23
+ * @param size {number}
24
+ * @param data {IndexedByteArray}
25
+ */
26
+ constructor(header: string, size: number, data: IndexedByteArray);
27
+ header: string;
28
+ size: number;
29
+ chunkData: IndexedByteArray;
30
+ }
31
+ import { IndexedByteArray } from '../../utils/indexed_array.js';
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Reads the generatorTranslator from the shdr read
3
+ * @param sampleHeadersChunk {RiffChunk}
4
+ * @param smplChunkData {IndexedByteArray}
5
+ * @returns {Sample[]}
6
+ */
7
+ export function readSamples(sampleHeadersChunk: RiffChunk, smplChunkData: IndexedByteArray): Sample[];
8
+ /**
9
+ * samples.js
10
+ * purpose: parses soundfont samples, resamples if needed.
11
+ * loads sample data, handles async loading of sf3 compressed samples
12
+ */
13
+ export class BasicSample {
14
+ /**
15
+ * The basic representation of a soundfont sample
16
+ * @param sampleName {string}
17
+ * @param sampleRate {number}
18
+ * @param samplePitch {number}
19
+ * @param samplePitchCorrection {number}
20
+ * @param sampleLink {number}
21
+ * @param sampleType {number}
22
+ * @param loopStart {number} relative to sample start
23
+ * @param loopEnd {number} relative to sample start
24
+ */
25
+ constructor(sampleName: string, sampleRate: number, samplePitch: number, samplePitchCorrection: number, sampleLink: number, sampleType: number, loopStart: number, loopEnd: number);
26
+ /**
27
+ * Sample's name
28
+ * @type {string}
29
+ */
30
+ sampleName: string;
31
+ /**
32
+ * Sample rate in Hz
33
+ * @type {number}
34
+ */
35
+ sampleRate: number;
36
+ /**
37
+ * Original pitch of the sample as a MIDI note number
38
+ * @type {number}
39
+ */
40
+ samplePitch: number;
41
+ /**
42
+ * Pitch correction, in cents. Can be negative
43
+ * @type {number}
44
+ */
45
+ samplePitchCorrection: number;
46
+ /**
47
+ * Sample link, currently unused.
48
+ * @type {number}
49
+ */
50
+ sampleLink: number;
51
+ /**
52
+ * Type of the sample, an enum
53
+ * @type {number}
54
+ */
55
+ sampleType: number;
56
+ /**
57
+ * Relative to start of the sample, bytes
58
+ * @type {number}
59
+ */
60
+ sampleLoopStartIndex: number;
61
+ /**
62
+ * Relative to start of the sample, in bytes
63
+ * @type {number}
64
+ */
65
+ sampleLoopEndIndex: number;
66
+ /**
67
+ * Indicates if the sample is compressed
68
+ * @type {boolean}
69
+ */
70
+ isCompressed: boolean;
71
+ /**
72
+ * The compressed sample data if it was compressed by spessasynth
73
+ * @type {Uint8Array}
74
+ */
75
+ compressedData: Uint8Array;
76
+ /**
77
+ * @returns {Uint8Array|IndexedByteArray}
78
+ */
79
+ getRawData(): Uint8Array | IndexedByteArray;
80
+ /**
81
+ * @param quality {number}
82
+ * @param encodeVorbis {EncodeVorbisFunction}
83
+ */
84
+ compressSample(quality: number, encodeVorbis: EncodeVorbisFunction): void;
85
+ /**
86
+ * @returns {Float32Array}
87
+ */
88
+ getAudioData(): Float32Array;
89
+ }
90
+ export class Sample extends BasicSample {
91
+ /**
92
+ * Creates a sample
93
+ * @param sampleName {string}
94
+ * @param sampleStartIndex {number}
95
+ * @param sampleEndIndex {number}
96
+ * @param sampleLoopStartIndex {number}
97
+ * @param sampleLoopEndIndex {number}
98
+ * @param sampleRate {number}
99
+ * @param samplePitch {number}
100
+ * @param samplePitchCorrection {number}
101
+ * @param sampleLink {number}
102
+ * @param sampleType {number}
103
+ * @param smplArr {IndexedByteArray}
104
+ * @param sampleIndex {number} initial sample index when loading the sfont
105
+ */
106
+ constructor(sampleName: string, sampleStartIndex: number, sampleEndIndex: number, sampleLoopStartIndex: number, sampleLoopEndIndex: number, sampleRate: number, samplePitch: number, samplePitchCorrection: number, sampleLink: number, sampleType: number, smplArr: IndexedByteArray, sampleIndex: number);
107
+ sampleStartIndex: number;
108
+ sampleEndIndex: number;
109
+ isSampleLoaded: boolean;
110
+ sampleID: number;
111
+ useCount: number;
112
+ sampleLength: number;
113
+ sampleDataArray: IndexedByteArray;
114
+ sampleData: Float32Array;
115
+ /**
116
+ * Get raw data, whether it's compressed or not as we simply write it to the file
117
+ * @return {Uint8Array}
118
+ */
119
+ getRawData(): Uint8Array;
120
+ /**
121
+ * Decode binary vorbis into a float32 pcm
122
+ */
123
+ decodeVorbis(): void;
124
+ /**
125
+ * @returns {Float32Array}
126
+ */
127
+ loadUncompressedData(): Float32Array;
128
+ /**
129
+ * @returns {Float32Array}
130
+ */
131
+ loadBufferData(): Float32Array;
132
+ }
133
+ import { RiffChunk } from "./riff_chunk.js";
134
+ import { IndexedByteArray } from "../../utils/indexed_array.js";