spessasynth_lib 3.9.9

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 (148) hide show
  1. package/@types/externals/stbvorbis_sync/stbvorbis_sync.min.d.ts +1 -0
  2. package/@types/index.d.ts +34 -0
  3. package/@types/midi_handler/midi_handler.d.ts +39 -0
  4. package/@types/midi_handler/web_midi_link.d.ts +12 -0
  5. package/@types/midi_parser/midi_data.d.ts +95 -0
  6. package/@types/midi_parser/midi_editor.d.ts +45 -0
  7. package/@types/midi_parser/midi_loader.d.ts +100 -0
  8. package/@types/midi_parser/midi_message.d.ts +154 -0
  9. package/@types/midi_parser/midi_writer.d.ts +6 -0
  10. package/@types/midi_parser/rmidi_writer.d.ts +9 -0
  11. package/@types/midi_parser/used_keys_loaded.d.ts +7 -0
  12. package/@types/sequencer/sequencer.d.ts +180 -0
  13. package/@types/sequencer/worklet_sequencer/sequencer_message.d.ts +28 -0
  14. package/@types/soundfont/read/generators.d.ts +98 -0
  15. package/@types/soundfont/read/instruments.d.ts +50 -0
  16. package/@types/soundfont/read/modulators.d.ts +73 -0
  17. package/@types/soundfont/read/presets.d.ts +87 -0
  18. package/@types/soundfont/read/riff_chunk.d.ts +31 -0
  19. package/@types/soundfont/read/samples.d.ts +134 -0
  20. package/@types/soundfont/read/zones.d.ts +141 -0
  21. package/@types/soundfont/soundfont.d.ts +76 -0
  22. package/@types/soundfont/write/ibag.d.ts +6 -0
  23. package/@types/soundfont/write/igen.d.ts +6 -0
  24. package/@types/soundfont/write/imod.d.ts +6 -0
  25. package/@types/soundfont/write/inst.d.ts +6 -0
  26. package/@types/soundfont/write/pbag.d.ts +6 -0
  27. package/@types/soundfont/write/pgen.d.ts +6 -0
  28. package/@types/soundfont/write/phdr.d.ts +6 -0
  29. package/@types/soundfont/write/pmod.d.ts +6 -0
  30. package/@types/soundfont/write/sdta.d.ts +11 -0
  31. package/@types/soundfont/write/shdr.d.ts +8 -0
  32. package/@types/soundfont/write/soundfont_trimmer.d.ts +6 -0
  33. package/@types/soundfont/write/write.d.ts +21 -0
  34. package/@types/synthetizer/audio_effects/effects_config.d.ts +29 -0
  35. package/@types/synthetizer/audio_effects/fancy_chorus.d.ts +93 -0
  36. package/@types/synthetizer/audio_effects/reverb.d.ts +7 -0
  37. package/@types/synthetizer/synth_event_handler.d.ts +161 -0
  38. package/@types/synthetizer/synthetizer.d.ts +286 -0
  39. package/@types/synthetizer/worklet_system/message_protocol/worklet_message.d.ts +88 -0
  40. package/@types/synthetizer/worklet_system/worklet_utilities/worklet_processor_channel.d.ts +134 -0
  41. package/@types/synthetizer/worklet_url.d.ts +5 -0
  42. package/@types/utils/buffer_to_wav.d.ts +8 -0
  43. package/@types/utils/byte_functions/big_endian.d.ts +13 -0
  44. package/@types/utils/byte_functions/little_endian.d.ts +35 -0
  45. package/@types/utils/byte_functions/string.d.ts +22 -0
  46. package/@types/utils/byte_functions/variable_length_quantity.d.ts +12 -0
  47. package/@types/utils/indexed_array.d.ts +21 -0
  48. package/@types/utils/loggin.d.ts +26 -0
  49. package/@types/utils/other.d.ts +32 -0
  50. package/LICENSE +26 -0
  51. package/README.md +83 -0
  52. package/externals/NOTICE +9 -0
  53. package/externals/libvorbis/@types/OggVorbisEncoder.d.ts +34 -0
  54. package/externals/libvorbis/OggVorbisEncoder.min.js +1 -0
  55. package/externals/stbvorbis_sync/@types/stbvorbis_sync.d.ts +12 -0
  56. package/externals/stbvorbis_sync/LICENSE +202 -0
  57. package/externals/stbvorbis_sync/stbvorbis_sync.min.js +1 -0
  58. package/index.js +73 -0
  59. package/midi_handler/README.md +3 -0
  60. package/midi_handler/midi_handler.js +118 -0
  61. package/midi_handler/web_midi_link.js +41 -0
  62. package/midi_parser/README.md +3 -0
  63. package/midi_parser/midi_data.js +121 -0
  64. package/midi_parser/midi_editor.js +557 -0
  65. package/midi_parser/midi_loader.js +502 -0
  66. package/midi_parser/midi_message.js +234 -0
  67. package/midi_parser/midi_writer.js +95 -0
  68. package/midi_parser/rmidi_writer.js +271 -0
  69. package/midi_parser/used_keys_loaded.js +172 -0
  70. package/package.json +44 -0
  71. package/sequencer/README.md +23 -0
  72. package/sequencer/sequencer.js +439 -0
  73. package/sequencer/worklet_sequencer/events.js +92 -0
  74. package/sequencer/worklet_sequencer/play.js +309 -0
  75. package/sequencer/worklet_sequencer/process_event.js +167 -0
  76. package/sequencer/worklet_sequencer/process_tick.js +85 -0
  77. package/sequencer/worklet_sequencer/sequencer_message.js +39 -0
  78. package/sequencer/worklet_sequencer/song_control.js +193 -0
  79. package/sequencer/worklet_sequencer/worklet_sequencer.js +218 -0
  80. package/soundfont/README.md +8 -0
  81. package/soundfont/read/generators.js +212 -0
  82. package/soundfont/read/instruments.js +125 -0
  83. package/soundfont/read/modulators.js +249 -0
  84. package/soundfont/read/presets.js +300 -0
  85. package/soundfont/read/riff_chunk.js +81 -0
  86. package/soundfont/read/samples.js +398 -0
  87. package/soundfont/read/zones.js +310 -0
  88. package/soundfont/soundfont.js +357 -0
  89. package/soundfont/write/ibag.js +39 -0
  90. package/soundfont/write/igen.js +75 -0
  91. package/soundfont/write/imod.js +46 -0
  92. package/soundfont/write/inst.js +34 -0
  93. package/soundfont/write/pbag.js +39 -0
  94. package/soundfont/write/pgen.js +77 -0
  95. package/soundfont/write/phdr.js +42 -0
  96. package/soundfont/write/pmod.js +46 -0
  97. package/soundfont/write/sdta.js +72 -0
  98. package/soundfont/write/shdr.js +54 -0
  99. package/soundfont/write/soundfont_trimmer.js +169 -0
  100. package/soundfont/write/write.js +180 -0
  101. package/synthetizer/README.md +6 -0
  102. package/synthetizer/audio_effects/effects_config.js +21 -0
  103. package/synthetizer/audio_effects/fancy_chorus.js +120 -0
  104. package/synthetizer/audio_effects/impulse_response_2.flac +0 -0
  105. package/synthetizer/audio_effects/reverb.js +24 -0
  106. package/synthetizer/synth_event_handler.js +156 -0
  107. package/synthetizer/synthetizer.js +750 -0
  108. package/synthetizer/worklet_processor.min.js +13 -0
  109. package/synthetizer/worklet_system/README.md +6 -0
  110. package/synthetizer/worklet_system/main_processor.js +363 -0
  111. package/synthetizer/worklet_system/message_protocol/handle_message.js +193 -0
  112. package/synthetizer/worklet_system/message_protocol/message_sending.js +74 -0
  113. package/synthetizer/worklet_system/message_protocol/worklet_message.js +118 -0
  114. package/synthetizer/worklet_system/minify_processor.sh +4 -0
  115. package/synthetizer/worklet_system/worklet_methods/controller_control.js +230 -0
  116. package/synthetizer/worklet_system/worklet_methods/data_entry.js +277 -0
  117. package/synthetizer/worklet_system/worklet_methods/note_off.js +109 -0
  118. package/synthetizer/worklet_system/worklet_methods/note_on.js +91 -0
  119. package/synthetizer/worklet_system/worklet_methods/program_control.js +183 -0
  120. package/synthetizer/worklet_system/worklet_methods/reset_controllers.js +177 -0
  121. package/synthetizer/worklet_system/worklet_methods/snapshot.js +129 -0
  122. package/synthetizer/worklet_system/worklet_methods/system_exclusive.js +272 -0
  123. package/synthetizer/worklet_system/worklet_methods/tuning_control.js +195 -0
  124. package/synthetizer/worklet_system/worklet_methods/vibrato_control.js +29 -0
  125. package/synthetizer/worklet_system/worklet_methods/voice_control.js +233 -0
  126. package/synthetizer/worklet_system/worklet_processor.js +9 -0
  127. package/synthetizer/worklet_system/worklet_utilities/lfo.js +23 -0
  128. package/synthetizer/worklet_system/worklet_utilities/lowpass_filter.js +130 -0
  129. package/synthetizer/worklet_system/worklet_utilities/modulation_envelope.js +73 -0
  130. package/synthetizer/worklet_system/worklet_utilities/modulator_curves.js +86 -0
  131. package/synthetizer/worklet_system/worklet_utilities/stereo_panner.js +81 -0
  132. package/synthetizer/worklet_system/worklet_utilities/unit_converter.js +66 -0
  133. package/synthetizer/worklet_system/worklet_utilities/volume_envelope.js +265 -0
  134. package/synthetizer/worklet_system/worklet_utilities/wavetable_oscillator.js +83 -0
  135. package/synthetizer/worklet_system/worklet_utilities/worklet_modulator.js +234 -0
  136. package/synthetizer/worklet_system/worklet_utilities/worklet_processor_channel.js +116 -0
  137. package/synthetizer/worklet_system/worklet_utilities/worklet_voice.js +272 -0
  138. package/synthetizer/worklet_url.js +5 -0
  139. package/utils/README.md +4 -0
  140. package/utils/buffer_to_wav.js +101 -0
  141. package/utils/byte_functions/big_endian.js +28 -0
  142. package/utils/byte_functions/little_endian.js +74 -0
  143. package/utils/byte_functions/string.js +97 -0
  144. package/utils/byte_functions/variable_length_quantity.js +37 -0
  145. package/utils/encode_vorbis.js +30 -0
  146. package/utils/indexed_array.js +41 -0
  147. package/utils/loggin.js +79 -0
  148. package/utils/other.js +54 -0
@@ -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";
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Reads the given instrument zone read
3
+ * @param zonesChunk {RiffChunk}
4
+ * @param instrumentGenerators {Generator[]}
5
+ * @param instrumentModulators {Modulator[]}
6
+ * @param instrumentSamples {Sample[]}
7
+ * @returns {InstrumentZone[]}
8
+ */
9
+ export function readInstrumentZones(zonesChunk: RiffChunk, instrumentGenerators: Generator[], instrumentModulators: Modulator[], instrumentSamples: Sample[]): InstrumentZone[];
10
+ /**
11
+ * Reads the given preset zone read
12
+ * @param zonesChunk {RiffChunk}
13
+ * @param presetGenerators {Generator[]}
14
+ * @param instruments {Instrument[]}
15
+ * @param presetModulators {Modulator[]}
16
+ * @returns {PresetZone[]}
17
+ */
18
+ export function readPresetZones(zonesChunk: RiffChunk, presetGenerators: Generator[], presetModulators: Modulator[], instruments: Instrument[]): PresetZone[];
19
+ /**
20
+ * zones.js
21
+ * purpose: reads instrumend and preset zones from soundfont and gets their respective samples and generators and modulators
22
+ */
23
+ export class InstrumentZone {
24
+ /**
25
+ * Creates a zone (instrument)
26
+ * @param dataArray {IndexedByteArray}
27
+ * @param index {number}
28
+ */
29
+ constructor(dataArray: IndexedByteArray, index: number);
30
+ generatorZoneStartIndex: number;
31
+ modulatorZoneStartIndex: number;
32
+ modulatorZoneSize: number;
33
+ generatorZoneSize: number;
34
+ zoneID: number;
35
+ keyRange: {
36
+ min: number;
37
+ max: number;
38
+ };
39
+ velRange: {
40
+ min: number;
41
+ max: number;
42
+ };
43
+ isGlobal: boolean;
44
+ useCount: number;
45
+ /**
46
+ * @type {Generator[]}
47
+ */
48
+ generators: Generator[];
49
+ /**
50
+ * @type {Modulator[]}
51
+ */
52
+ modulators: Modulator[];
53
+ deleteZone(): void;
54
+ setZoneSize(modulatorZoneSize: any, generatorZoneSize: any): void;
55
+ /**
56
+ * grab the generators
57
+ * @param generators {Generator[]}
58
+ */
59
+ getGenerators(generators: Generator[]): void;
60
+ /**
61
+ * grab the modulators
62
+ * @param modulators {Modulator[]}
63
+ */
64
+ getModulators(modulators: Modulator[]): void;
65
+ /**
66
+ * Loads the zone's sample
67
+ * @param samples {Sample[]}
68
+ */
69
+ getSample(samples: Sample[]): void;
70
+ sample: Sample;
71
+ /**
72
+ * Reads the keyRange of the zone
73
+ */
74
+ getKeyRange(): void;
75
+ /**
76
+ * reads the velolicty range of the zone
77
+ */
78
+ getVelRange(): void;
79
+ }
80
+ export class PresetZone {
81
+ /**
82
+ * Creates a zone (preset)
83
+ * @param dataArray {IndexedByteArray}
84
+ * @param index {number}
85
+ */
86
+ constructor(dataArray: IndexedByteArray, index: number);
87
+ generatorZoneStartIndex: number;
88
+ modulatorZoneStartIndex: number;
89
+ modulatorZoneSize: number;
90
+ generatorZoneSize: number;
91
+ zoneID: number;
92
+ keyRange: {
93
+ min: number;
94
+ max: number;
95
+ };
96
+ velRange: {
97
+ min: number;
98
+ max: number;
99
+ };
100
+ isGlobal: boolean;
101
+ /**
102
+ * @type {Generator[]}
103
+ */
104
+ generators: Generator[];
105
+ /**
106
+ * @type {Modulator[]}
107
+ */
108
+ modulators: Modulator[];
109
+ setZoneSize(modulatorZoneSize: any, generatorZoneSize: any): void;
110
+ deleteZone(): void;
111
+ /**
112
+ * grab the generators
113
+ * @param generators {Generator[]}
114
+ */
115
+ getGenerators(generators: Generator[]): void;
116
+ /**
117
+ * grab the modulators
118
+ * @param modulators {Modulator[]}
119
+ */
120
+ getModulators(modulators: Modulator[]): void;
121
+ /**
122
+ * grab the instrument
123
+ * @param instruments {Instrument[]}
124
+ */
125
+ getInstrument(instruments: Instrument[]): void;
126
+ instrument: Instrument;
127
+ /**
128
+ * Reads the keyRange of the zone
129
+ */
130
+ getKeyRange(): void;
131
+ /**
132
+ * reads the velolicty range of the zone
133
+ */
134
+ getVelRange(): void;
135
+ }
136
+ import { RiffChunk } from "./riff_chunk.js";
137
+ import { Generator } from "./generators.js";
138
+ import { Modulator } from "./modulators.js";
139
+ import { Sample } from "./samples.js";
140
+ import { Instrument } from "./instruments.js";
141
+ import { IndexedByteArray } from "../../utils/indexed_array.js";