libadlmidi-js 1.2.0 → 2.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.
- package/dist/core.d.ts +186 -4
- package/dist/fm_banks/manifest.json +1 -1
- package/dist/libadlmidi.d.ts +143 -65
- package/dist/libadlmidi.dosbox.browser.js +1 -1
- package/dist/libadlmidi.dosbox.browser.wasm +0 -0
- package/dist/libadlmidi.dosbox.core.js +1 -1
- package/dist/libadlmidi.dosbox.core.wasm +0 -0
- package/dist/libadlmidi.dosbox.js +0 -0
- package/dist/libadlmidi.dosbox.processor.js +242 -74
- package/dist/libadlmidi.dosbox.slim.browser.js +1 -1
- package/dist/libadlmidi.dosbox.slim.browser.wasm +0 -0
- package/dist/libadlmidi.dosbox.slim.core.js +1 -1
- package/dist/libadlmidi.dosbox.slim.core.wasm +0 -0
- package/dist/libadlmidi.dosbox.slim.js +0 -0
- package/dist/libadlmidi.dosbox.slim.processor.js +242 -74
- package/dist/libadlmidi.full.browser.js +1 -1
- package/dist/libadlmidi.full.browser.wasm +0 -0
- package/dist/libadlmidi.full.core.js +1 -1
- package/dist/libadlmidi.full.core.wasm +0 -0
- package/dist/libadlmidi.full.js +0 -0
- package/dist/libadlmidi.full.processor.js +242 -74
- package/dist/libadlmidi.full.slim.browser.js +1 -1
- package/dist/libadlmidi.full.slim.browser.wasm +0 -0
- package/dist/libadlmidi.full.slim.core.js +1 -1
- package/dist/libadlmidi.full.slim.core.wasm +0 -0
- package/dist/libadlmidi.full.slim.js +0 -0
- package/dist/libadlmidi.full.slim.processor.js +242 -74
- package/dist/libadlmidi.js +465 -21
- package/dist/libadlmidi.js.map +3 -3
- package/dist/libadlmidi.light.browser.js +1 -1
- package/dist/libadlmidi.light.browser.wasm +0 -0
- package/dist/libadlmidi.light.core.js +1 -1
- package/dist/libadlmidi.light.core.wasm +0 -0
- package/dist/libadlmidi.light.js +0 -0
- package/dist/libadlmidi.light.processor.js +242 -74
- package/dist/libadlmidi.light.slim.browser.js +1 -1
- package/dist/libadlmidi.light.slim.browser.wasm +0 -0
- package/dist/libadlmidi.light.slim.core.js +1 -1
- package/dist/libadlmidi.light.slim.core.wasm +0 -0
- package/dist/libadlmidi.light.slim.js +0 -0
- package/dist/libadlmidi.light.slim.processor.js +242 -74
- package/dist/libadlmidi.nuked.browser.js +1 -1
- package/dist/libadlmidi.nuked.browser.wasm +0 -0
- package/dist/libadlmidi.nuked.core.js +1 -1
- package/dist/libadlmidi.nuked.core.wasm +0 -0
- package/dist/libadlmidi.nuked.js +0 -0
- package/dist/libadlmidi.nuked.processor.js +242 -74
- package/dist/libadlmidi.nuked.slim.browser.js +1 -1
- package/dist/libadlmidi.nuked.slim.browser.wasm +0 -0
- package/dist/libadlmidi.nuked.slim.core.js +1 -1
- package/dist/libadlmidi.nuked.slim.core.wasm +0 -0
- package/dist/libadlmidi.nuked.slim.js +0 -0
- package/dist/libadlmidi.nuked.slim.processor.js +242 -74
- package/dist/profiles/dosbox.d.ts +1 -0
- package/dist/profiles/dosbox.slim.d.ts +1 -0
- package/dist/profiles/full.d.ts +1 -0
- package/dist/profiles/full.slim.d.ts +1 -0
- package/dist/profiles/light.d.ts +1 -0
- package/dist/profiles/light.slim.d.ts +1 -0
- package/dist/profiles/nuked.d.ts +1 -0
- package/dist/profiles/nuked.slim.d.ts +1 -0
- package/dist/utils/constants.d.ts +59 -0
- package/package.json +1 -1
- package/src/core.js +352 -4
- package/src/libadlmidi.js +374 -56
- package/src/processor.js +204 -12
- package/src/profiles/dosbox.js +7 -4
- package/src/profiles/dosbox.slim.js +7 -4
- package/src/profiles/full.js +7 -4
- package/src/profiles/full.slim.js +7 -4
- package/src/profiles/light.js +7 -4
- package/src/profiles/light.slim.js +7 -4
- package/src/profiles/nuked.js +7 -4
- package/src/profiles/nuked.slim.js +7 -4
- package/src/utils/constants.js +51 -0
package/dist/core.d.ts
CHANGED
|
@@ -118,6 +118,12 @@ export class AdlMidiCore {
|
|
|
118
118
|
* @returns {number} Count of channels
|
|
119
119
|
*/
|
|
120
120
|
getNumFourOpChannels(): number;
|
|
121
|
+
/**
|
|
122
|
+
* Get the number of 4-operator channels obtained.
|
|
123
|
+
*
|
|
124
|
+
* @returns {number} Count of channels obtained
|
|
125
|
+
*/
|
|
126
|
+
getNumFourOpChannelsObtained(): number;
|
|
121
127
|
/**
|
|
122
128
|
* Enable/disable scaling of modulators by volume.
|
|
123
129
|
*
|
|
@@ -159,19 +165,31 @@ export class AdlMidiCore {
|
|
|
159
165
|
*
|
|
160
166
|
* @param {boolean} enabled
|
|
161
167
|
*/
|
|
162
|
-
|
|
168
|
+
setSoftPanEnabled(enabled: boolean): void;
|
|
163
169
|
/**
|
|
164
170
|
* Enable/disable deep vibrato.
|
|
165
171
|
*
|
|
166
172
|
* @param {boolean} enabled
|
|
167
173
|
*/
|
|
168
174
|
setDeepVibrato(enabled: boolean): void;
|
|
175
|
+
/**
|
|
176
|
+
* Get deep vibrato state.
|
|
177
|
+
*
|
|
178
|
+
* @returns {boolean}
|
|
179
|
+
*/
|
|
180
|
+
getDeepVibrato(): boolean;
|
|
169
181
|
/**
|
|
170
182
|
* Enable/disable deep tremolo.
|
|
171
183
|
*
|
|
172
184
|
* @param {boolean} enabled
|
|
173
185
|
*/
|
|
174
186
|
setDeepTremolo(enabled: boolean): void;
|
|
187
|
+
/**
|
|
188
|
+
* Get deep tremolo state.
|
|
189
|
+
*
|
|
190
|
+
* @returns {boolean}
|
|
191
|
+
*/
|
|
192
|
+
getDeepTremolo(): boolean;
|
|
175
193
|
/**
|
|
176
194
|
* Switch OPL3 emulator (if multiple are compiled in).
|
|
177
195
|
*
|
|
@@ -185,6 +203,18 @@ export class AdlMidiCore {
|
|
|
185
203
|
* @returns {string} Emulator name
|
|
186
204
|
*/
|
|
187
205
|
getEmulatorName(): string;
|
|
206
|
+
/**
|
|
207
|
+
* Get the last global error string (static, no player needed).
|
|
208
|
+
*
|
|
209
|
+
* @returns {string} Error string or empty string
|
|
210
|
+
*/
|
|
211
|
+
getErrorString(): string;
|
|
212
|
+
/**
|
|
213
|
+
* Get the last error info for this player instance.
|
|
214
|
+
*
|
|
215
|
+
* @returns {string} Error info string or empty string
|
|
216
|
+
*/
|
|
217
|
+
getErrorInfo(): string;
|
|
188
218
|
/**
|
|
189
219
|
* Get the version string of the linked libADLMIDI library.
|
|
190
220
|
*
|
|
@@ -218,13 +248,13 @@ export class AdlMidiCore {
|
|
|
218
248
|
*
|
|
219
249
|
* @returns {number}
|
|
220
250
|
*/
|
|
221
|
-
|
|
251
|
+
getVolumeRangeModel(): number;
|
|
222
252
|
/**
|
|
223
253
|
* Set the volume range model.
|
|
224
254
|
*
|
|
225
255
|
* @param {number} model - Volume model type
|
|
226
256
|
*/
|
|
227
|
-
|
|
257
|
+
setVolumeRangeModel(model: number): void;
|
|
228
258
|
/**
|
|
229
259
|
* Run emulator with PCM rate to reduce CPU usage.
|
|
230
260
|
*
|
|
@@ -331,6 +361,25 @@ export class AdlMidiCore {
|
|
|
331
361
|
* @returns {string} Copyright or empty string
|
|
332
362
|
*/
|
|
333
363
|
getMusicCopyright(): string;
|
|
364
|
+
/**
|
|
365
|
+
* Get the number of track titles in the loaded MIDI file.
|
|
366
|
+
*
|
|
367
|
+
* @returns {number} Number of track titles
|
|
368
|
+
*/
|
|
369
|
+
getTrackTitleCount(): number;
|
|
370
|
+
/**
|
|
371
|
+
* Get a track title by index.
|
|
372
|
+
*
|
|
373
|
+
* @param {number} index - Track title index
|
|
374
|
+
* @returns {string} Track title or empty string
|
|
375
|
+
*/
|
|
376
|
+
getTrackTitle(index: number): string;
|
|
377
|
+
/**
|
|
378
|
+
* Get the number of MIDI markers in the loaded file.
|
|
379
|
+
*
|
|
380
|
+
* @returns {number} Number of markers
|
|
381
|
+
*/
|
|
382
|
+
getMarkerCount(): number;
|
|
334
383
|
/**
|
|
335
384
|
* Play MIDI file and generate audio.
|
|
336
385
|
*
|
|
@@ -371,13 +420,127 @@ export class AdlMidiCore {
|
|
|
371
420
|
*
|
|
372
421
|
* @param {boolean} enabled
|
|
373
422
|
*/
|
|
374
|
-
|
|
423
|
+
setLoopEnabled(enabled: boolean): void;
|
|
424
|
+
/**
|
|
425
|
+
* Set the number of loop repetitions.
|
|
426
|
+
*
|
|
427
|
+
* @param {number} count - Loop count (-1 = infinite, 0 = no loops, 1+ = number of loops)
|
|
428
|
+
*/
|
|
429
|
+
setLoopCount(count: number): void;
|
|
430
|
+
/**
|
|
431
|
+
* Enable/disable loop hooks only mode.
|
|
432
|
+
*
|
|
433
|
+
* @param {boolean} enabled
|
|
434
|
+
*/
|
|
435
|
+
setLoopHooksOnly(enabled: boolean): void;
|
|
436
|
+
/**
|
|
437
|
+
* Get the loop start time in seconds.
|
|
438
|
+
*
|
|
439
|
+
* @returns {number} Loop start time in seconds
|
|
440
|
+
*/
|
|
441
|
+
getLoopStartTime(): number;
|
|
442
|
+
/**
|
|
443
|
+
* Get the loop end time in seconds.
|
|
444
|
+
*
|
|
445
|
+
* @returns {number} Loop end time in seconds
|
|
446
|
+
*/
|
|
447
|
+
getLoopEndTime(): number;
|
|
448
|
+
/**
|
|
449
|
+
* Select a song number for multi-song MIDI files.
|
|
450
|
+
*
|
|
451
|
+
* @param {number} num - Song number (0-based)
|
|
452
|
+
*/
|
|
453
|
+
selectSongNum(num: number): void;
|
|
454
|
+
/**
|
|
455
|
+
* Get the number of songs in the loaded MIDI file.
|
|
456
|
+
*
|
|
457
|
+
* @returns {number} Number of songs
|
|
458
|
+
*/
|
|
459
|
+
getSongsCount(): number;
|
|
460
|
+
/**
|
|
461
|
+
* Get the number of tracks in the loaded MIDI file.
|
|
462
|
+
*
|
|
463
|
+
* @returns {number} Number of tracks
|
|
464
|
+
*/
|
|
465
|
+
getTrackCount(): number;
|
|
466
|
+
/**
|
|
467
|
+
* Set track options (enable, mute, or solo).
|
|
468
|
+
* Use the TrackOption enum: TrackOption.ON (1), TrackOption.OFF (2), TrackOption.SOLO (3).
|
|
469
|
+
* Note: Passing 0 is a silent no-op that returns true without changing state.
|
|
470
|
+
*
|
|
471
|
+
* @param {number} track - Track index
|
|
472
|
+
* @param {number} options - Track option from TrackOption enum
|
|
473
|
+
* @returns {boolean} True if successful
|
|
474
|
+
*/
|
|
475
|
+
setTrackOptions(track: number, options: number): boolean;
|
|
476
|
+
/**
|
|
477
|
+
* Enable or disable a MIDI channel.
|
|
478
|
+
*
|
|
479
|
+
* @param {number} channel - MIDI channel (0-15)
|
|
480
|
+
* @param {boolean} enabled - Whether to enable the channel
|
|
481
|
+
* @returns {boolean} True if successful
|
|
482
|
+
*/
|
|
483
|
+
setChannelEnabled(channel: number, enabled: boolean): boolean;
|
|
375
484
|
/**
|
|
376
485
|
* Set playback tempo multiplier.
|
|
377
486
|
*
|
|
378
487
|
* @param {number} tempo - Tempo multiplier (1.0 = normal)
|
|
379
488
|
*/
|
|
380
489
|
setTempo(tempo: number): void;
|
|
490
|
+
/**
|
|
491
|
+
* Reserve a number of banks.
|
|
492
|
+
*
|
|
493
|
+
* @param {number} count - Number of banks to reserve
|
|
494
|
+
* @returns {boolean} True if successful
|
|
495
|
+
*/
|
|
496
|
+
reserveBanks(count: number): boolean;
|
|
497
|
+
/**
|
|
498
|
+
* Get the bank ID for a given bank identifier.
|
|
499
|
+
*
|
|
500
|
+
* @param {Object} bankId - Bank identifier
|
|
501
|
+
* @param {boolean|number} bankId.percussive - True/1 for percussion, false/0 for melodic
|
|
502
|
+
* @param {number} bankId.msb - Bank MSB
|
|
503
|
+
* @param {number} bankId.lsb - Bank LSB
|
|
504
|
+
* @returns {{percussive: number, msb: number, lsb: number}|null} Bank ID or null if not found
|
|
505
|
+
*/
|
|
506
|
+
getBankId(bankId: {
|
|
507
|
+
percussive: boolean | number;
|
|
508
|
+
msb: number;
|
|
509
|
+
lsb: number;
|
|
510
|
+
}): {
|
|
511
|
+
percussive: number;
|
|
512
|
+
msb: number;
|
|
513
|
+
lsb: number;
|
|
514
|
+
} | null;
|
|
515
|
+
/**
|
|
516
|
+
* Remove a bank by its identifier.
|
|
517
|
+
*
|
|
518
|
+
* @param {Object} bankId - Bank identifier
|
|
519
|
+
* @param {boolean|number} bankId.percussive - True/1 for percussion, false/0 for melodic
|
|
520
|
+
* @param {number} bankId.msb - Bank MSB
|
|
521
|
+
* @param {number} bankId.lsb - Bank LSB
|
|
522
|
+
* @returns {boolean} True if successfully removed
|
|
523
|
+
*/
|
|
524
|
+
removeBank(bankId: {
|
|
525
|
+
percussive: boolean | number;
|
|
526
|
+
msb: number;
|
|
527
|
+
lsb: number;
|
|
528
|
+
}): boolean;
|
|
529
|
+
/**
|
|
530
|
+
* Load an embedded bank into a custom bank slot.
|
|
531
|
+
*
|
|
532
|
+
* @param {Object} bankId - Target bank identifier
|
|
533
|
+
* @param {boolean|number} bankId.percussive - True/1 for percussion, false/0 for melodic
|
|
534
|
+
* @param {number} bankId.msb - Bank MSB
|
|
535
|
+
* @param {number} bankId.lsb - Bank LSB
|
|
536
|
+
* @param {number} num - Embedded bank number to load
|
|
537
|
+
* @returns {boolean} True if successful
|
|
538
|
+
*/
|
|
539
|
+
loadEmbeddedBank(bankId: {
|
|
540
|
+
percussive: boolean | number;
|
|
541
|
+
msb: number;
|
|
542
|
+
lsb: number;
|
|
543
|
+
}, num: number): boolean;
|
|
381
544
|
/**
|
|
382
545
|
* Get an instrument from a bank.
|
|
383
546
|
*
|
|
@@ -409,6 +572,22 @@ export class AdlMidiCore {
|
|
|
409
572
|
msb: number;
|
|
410
573
|
lsb: number;
|
|
411
574
|
}, program: number, instrument: import("./utils/struct.js").Instrument): boolean;
|
|
575
|
+
/**
|
|
576
|
+
* Send a System Exclusive (SysEx) message.
|
|
577
|
+
*
|
|
578
|
+
* @param {Uint8Array|ArrayBuffer} data - SysEx message data
|
|
579
|
+
* @returns {boolean} True if successful
|
|
580
|
+
*/
|
|
581
|
+
systemExclusive(data: Uint8Array | ArrayBuffer): boolean;
|
|
582
|
+
/**
|
|
583
|
+
* Describe the current state of all channels (debug utility).
|
|
584
|
+
*
|
|
585
|
+
* @returns {{text: string, attr: Uint8Array}} Channel state text and raw per-channel attribute bytes
|
|
586
|
+
*/
|
|
587
|
+
describeChannels(): {
|
|
588
|
+
text: string;
|
|
589
|
+
attr: Uint8Array;
|
|
590
|
+
};
|
|
412
591
|
/**
|
|
413
592
|
* Get the raw Emscripten module for advanced usage.
|
|
414
593
|
*
|
|
@@ -431,3 +610,6 @@ export class AdlMidiCore {
|
|
|
431
610
|
private _ensurePlayer;
|
|
432
611
|
}
|
|
433
612
|
export default AdlMidiCore;
|
|
613
|
+
import { Emulator } from './utils/constants.js';
|
|
614
|
+
import { TrackOption } from './utils/constants.js';
|
|
615
|
+
export { Emulator, TrackOption };
|
package/dist/libadlmidi.d.ts
CHANGED
|
@@ -1,25 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Available OPL2/OPL3 emulator cores.
|
|
3
|
-
* Use with switchEmulator() to change the synthesis engine at runtime.
|
|
4
|
-
* Note: Only emulators compiled into the current profile are available.
|
|
5
|
-
*/
|
|
6
|
-
export type Emulator = number;
|
|
7
|
-
/**
|
|
8
|
-
* libADLMIDI-JS - Main Thread Interface
|
|
9
|
-
*
|
|
10
|
-
* High-level API for real-time OPL3 FM synthesis in the browser.
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```javascript
|
|
14
|
-
* import { AdlMidi } from 'libadlmidi-js';
|
|
15
|
-
*
|
|
16
|
-
* const synth = new AdlMidi();
|
|
17
|
-
* await synth.init('/path/to/processor.js');
|
|
18
|
-
*
|
|
19
|
-
* synth.noteOn(0, 60, 100); // Middle C on channel 0
|
|
20
|
-
* synth.noteOff(0, 60);
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
1
|
/**
|
|
24
2
|
* Bank identifier for instrument access
|
|
25
3
|
* @typedef {Object} BankId
|
|
@@ -74,39 +52,6 @@ export type Emulator = number;
|
|
|
74
52
|
* @property {boolean} [deepVibrato] - Enable deep vibrato
|
|
75
53
|
* @property {boolean} [deepTremolo] - Enable deep tremolo
|
|
76
54
|
*/
|
|
77
|
-
/**
|
|
78
|
-
* Available OPL2/OPL3 emulator cores.
|
|
79
|
-
* Use with switchEmulator() to change the synthesis engine at runtime.
|
|
80
|
-
* Note: Only emulators compiled into the current profile are available.
|
|
81
|
-
* @readonly
|
|
82
|
-
* @enum {number}
|
|
83
|
-
*/
|
|
84
|
-
export const Emulator: Readonly<{
|
|
85
|
-
/** Nuked OPL3 v1.8 - Most accurate, higher CPU usage */
|
|
86
|
-
NUKED: 0;
|
|
87
|
-
/** Nuked OPL3 v1.7.4 - Slightly older version */
|
|
88
|
-
NUKED_174: 1;
|
|
89
|
-
/** DosBox OPL3 - Good accuracy, lower CPU usage */
|
|
90
|
-
DOSBOX: 2;
|
|
91
|
-
/** Opal - Reality Adlib Tracker emulator */
|
|
92
|
-
OPAL: 3;
|
|
93
|
-
/** Java OPL3 - Port of emu8950 */
|
|
94
|
-
JAVA: 4;
|
|
95
|
-
/** ESFMu - ESFM chip emulator */
|
|
96
|
-
ESFMU: 5;
|
|
97
|
-
/** MAME OPL2 */
|
|
98
|
-
MAME_OPL2: 6;
|
|
99
|
-
/** YMFM OPL2 */
|
|
100
|
-
YMFM_OPL2: 7;
|
|
101
|
-
/** YMFM OPL3 */
|
|
102
|
-
YMFM_OPL3: 8;
|
|
103
|
-
/** Nuked OPL2 LLE - Transistor-level emulation */
|
|
104
|
-
NUKED_OPL2_LLE: 9;
|
|
105
|
-
/** Nuked OPL3 LLE - Transistor-level emulation */
|
|
106
|
-
NUKED_OPL3_LLE: 10;
|
|
107
|
-
/** Nuked OPL2 Lite - Lightweight OPL2 emulation for AdLib-era music */
|
|
108
|
-
NUKED_OPL2_LITE: 11;
|
|
109
|
-
}>;
|
|
110
55
|
export class AdlMidi {
|
|
111
56
|
/**
|
|
112
57
|
* Create a new AdlMidi instance
|
|
@@ -217,7 +162,7 @@ export class AdlMidi {
|
|
|
217
162
|
* @param {ArrayBuffer} arrayBuffer - Bank file data
|
|
218
163
|
* @returns {Promise<void>}
|
|
219
164
|
*/
|
|
220
|
-
|
|
165
|
+
loadBankData(arrayBuffer: ArrayBuffer): Promise<void>;
|
|
221
166
|
/**
|
|
222
167
|
* Set the embedded bank by number
|
|
223
168
|
* @param {number} bank - Bank number
|
|
@@ -254,6 +199,11 @@ export class AdlMidi {
|
|
|
254
199
|
* @returns {Promise<number>}
|
|
255
200
|
*/
|
|
256
201
|
getNumFourOpChannels(): Promise<number>;
|
|
202
|
+
/**
|
|
203
|
+
* Get the number of 4-operator channels obtained
|
|
204
|
+
* @returns {Promise<number>}
|
|
205
|
+
*/
|
|
206
|
+
getNumFourOpChannelsObtained(): Promise<number>;
|
|
257
207
|
/**
|
|
258
208
|
* Enable/disable scaling of modulators by volume
|
|
259
209
|
* @param {boolean} enabled
|
|
@@ -285,25 +235,35 @@ export class AdlMidi {
|
|
|
285
235
|
*/
|
|
286
236
|
getChannelAllocMode(): Promise<number>;
|
|
287
237
|
/**
|
|
288
|
-
* Set the volume model
|
|
238
|
+
* Set the volume range model
|
|
289
239
|
* @param {number} model - Volume model number
|
|
290
240
|
*/
|
|
291
|
-
|
|
241
|
+
setVolumeRangeModel(model: number): void;
|
|
292
242
|
/**
|
|
293
|
-
* Enable/disable
|
|
243
|
+
* Enable/disable soft stereo panning
|
|
294
244
|
* @param {boolean} enabled
|
|
295
245
|
*/
|
|
296
|
-
|
|
246
|
+
setSoftPanEnabled(enabled: boolean): void;
|
|
297
247
|
/**
|
|
298
248
|
* Enable/disable deep vibrato
|
|
299
249
|
* @param {boolean} enabled
|
|
300
250
|
*/
|
|
301
|
-
|
|
251
|
+
setDeepVibrato(enabled: boolean): void;
|
|
252
|
+
/**
|
|
253
|
+
* Get deep vibrato state
|
|
254
|
+
* @returns {Promise<boolean>}
|
|
255
|
+
*/
|
|
256
|
+
getDeepVibrato(): Promise<boolean>;
|
|
302
257
|
/**
|
|
303
258
|
* Enable/disable deep tremolo
|
|
304
259
|
* @param {boolean} enabled
|
|
305
260
|
*/
|
|
306
|
-
|
|
261
|
+
setDeepTremolo(enabled: boolean): void;
|
|
262
|
+
/**
|
|
263
|
+
* Get deep tremolo state
|
|
264
|
+
* @returns {Promise<boolean>}
|
|
265
|
+
*/
|
|
266
|
+
getDeepTremolo(): Promise<boolean>;
|
|
307
267
|
/**
|
|
308
268
|
* Run emulator with PCM rate to reduce CPU usage
|
|
309
269
|
* @param {boolean} enabled
|
|
@@ -316,7 +276,7 @@ export class AdlMidi {
|
|
|
316
276
|
* - nuked profile: NUKED only
|
|
317
277
|
* - dosbox profile: DOSBOX only
|
|
318
278
|
* - light profile: NUKED, DOSBOX
|
|
319
|
-
* - full profile: NUKED, DOSBOX, OPAL, JAVA,
|
|
279
|
+
* - full profile: NUKED, DOSBOX, OPAL, JAVA, ESFMu, YMFM_OPL2, YMFM_OPL3
|
|
320
280
|
*
|
|
321
281
|
* @param {number} emulator - Emulator ID from the Emulator enum
|
|
322
282
|
* @returns {Promise<void>} Resolves when emulator is switched, rejects if unavailable
|
|
@@ -333,6 +293,11 @@ export class AdlMidi {
|
|
|
333
293
|
* console.log(`Using: ${name}`);
|
|
334
294
|
*/
|
|
335
295
|
getEmulatorName(): Promise<string>;
|
|
296
|
+
/**
|
|
297
|
+
* Get the last error info for the player instance
|
|
298
|
+
* @returns {Promise<string>}
|
|
299
|
+
*/
|
|
300
|
+
getErrorInfo(): Promise<string>;
|
|
336
301
|
/**
|
|
337
302
|
* Get the version string of the linked libADLMIDI library
|
|
338
303
|
* @returns {Promise<string>}
|
|
@@ -361,7 +326,7 @@ export class AdlMidi {
|
|
|
361
326
|
* Get the volume range model
|
|
362
327
|
* @returns {Promise<number>}
|
|
363
328
|
*/
|
|
364
|
-
|
|
329
|
+
getVolumeRangeModel(): Promise<number>;
|
|
365
330
|
/**
|
|
366
331
|
* Get list of embedded banks available in this build
|
|
367
332
|
* Note: Slim builds have no embedded banks and will return an empty array
|
|
@@ -374,6 +339,49 @@ export class AdlMidi {
|
|
|
374
339
|
id: number;
|
|
375
340
|
name: string;
|
|
376
341
|
}[]>;
|
|
342
|
+
/**
|
|
343
|
+
* Reserve a number of banks
|
|
344
|
+
* @param {number} count - Number of banks to reserve
|
|
345
|
+
* @returns {Promise<void>} Resolves on success, rejects on failure
|
|
346
|
+
*/
|
|
347
|
+
reserveBanks(count: number): Promise<void>;
|
|
348
|
+
/**
|
|
349
|
+
* Get the bank ID for a given bank identifier
|
|
350
|
+
* @param {BankId} bankId - Bank identifier
|
|
351
|
+
* @returns {Promise<{percussive: number, msb: number, lsb: number}|null>} Bank ID or null if not found
|
|
352
|
+
*/
|
|
353
|
+
getBankId(bankId: BankId): Promise<{
|
|
354
|
+
percussive: number;
|
|
355
|
+
msb: number;
|
|
356
|
+
lsb: number;
|
|
357
|
+
} | null>;
|
|
358
|
+
/**
|
|
359
|
+
* Remove a bank by its identifier
|
|
360
|
+
* @param {BankId} bankId - Bank identifier
|
|
361
|
+
* @returns {Promise<void>} Resolves on success, rejects on failure
|
|
362
|
+
*/
|
|
363
|
+
removeBank(bankId: BankId): Promise<void>;
|
|
364
|
+
/**
|
|
365
|
+
* Load an embedded bank into a custom bank slot
|
|
366
|
+
* @param {BankId} bankId - Target bank identifier
|
|
367
|
+
* @param {number} num - Embedded bank number to load
|
|
368
|
+
* @returns {Promise<void>} Resolves on success, rejects on failure
|
|
369
|
+
*/
|
|
370
|
+
loadEmbeddedBank(bankId: BankId, num: number): Promise<void>;
|
|
371
|
+
/**
|
|
372
|
+
* Send a System Exclusive (SysEx) message
|
|
373
|
+
* @param {Uint8Array|ArrayBuffer} data - SysEx message data
|
|
374
|
+
* @returns {Promise<void>} Resolves on success, rejects on failure
|
|
375
|
+
*/
|
|
376
|
+
systemExclusive(data: Uint8Array | ArrayBuffer): Promise<void>;
|
|
377
|
+
/**
|
|
378
|
+
* Describe the current state of all channels (debug utility)
|
|
379
|
+
* @returns {Promise<{text: string, attr: Uint8Array}>} Channel state text and raw per-channel attribute bytes
|
|
380
|
+
*/
|
|
381
|
+
describeChannels(): Promise<{
|
|
382
|
+
text: string;
|
|
383
|
+
attr: Uint8Array;
|
|
384
|
+
}>;
|
|
377
385
|
/**
|
|
378
386
|
* Reset the synthesizer
|
|
379
387
|
* @returns {void}
|
|
@@ -397,6 +405,22 @@ export class AdlMidi {
|
|
|
397
405
|
* @returns {Promise<string>}
|
|
398
406
|
*/
|
|
399
407
|
getMusicCopyright(): Promise<string>;
|
|
408
|
+
/**
|
|
409
|
+
* Get the number of track titles in the loaded MIDI file
|
|
410
|
+
* @returns {Promise<number>}
|
|
411
|
+
*/
|
|
412
|
+
getTrackTitleCount(): Promise<number>;
|
|
413
|
+
/**
|
|
414
|
+
* Get a track title by index
|
|
415
|
+
* @param {number} index - Track title index
|
|
416
|
+
* @returns {Promise<string>}
|
|
417
|
+
*/
|
|
418
|
+
getTrackTitle(index: number): Promise<string>;
|
|
419
|
+
/**
|
|
420
|
+
* Get the number of MIDI markers in the loaded file
|
|
421
|
+
* @returns {Promise<number>}
|
|
422
|
+
*/
|
|
423
|
+
getMarkerCount(): Promise<number>;
|
|
400
424
|
/**
|
|
401
425
|
* Start or resume MIDI file playback
|
|
402
426
|
* @returns {void}
|
|
@@ -418,7 +442,58 @@ export class AdlMidi {
|
|
|
418
442
|
* @param {boolean} enabled - Whether to loop
|
|
419
443
|
* @returns {void}
|
|
420
444
|
*/
|
|
421
|
-
|
|
445
|
+
setLoopEnabled(enabled: boolean): void;
|
|
446
|
+
/**
|
|
447
|
+
* Set the number of loop repetitions
|
|
448
|
+
* @param {number} count - Loop count (-1 = infinite, 0 = no loops, 1+ = number of loops)
|
|
449
|
+
*/
|
|
450
|
+
setLoopCount(count: number): void;
|
|
451
|
+
/**
|
|
452
|
+
* Enable/disable loop hooks only mode
|
|
453
|
+
* @param {boolean} enabled
|
|
454
|
+
*/
|
|
455
|
+
setLoopHooksOnly(enabled: boolean): void;
|
|
456
|
+
/**
|
|
457
|
+
* Get the loop start time in seconds
|
|
458
|
+
* @returns {Promise<number>}
|
|
459
|
+
*/
|
|
460
|
+
getLoopStartTime(): Promise<number>;
|
|
461
|
+
/**
|
|
462
|
+
* Get the loop end time in seconds
|
|
463
|
+
* @returns {Promise<number>}
|
|
464
|
+
*/
|
|
465
|
+
getLoopEndTime(): Promise<number>;
|
|
466
|
+
/**
|
|
467
|
+
* Select a song number for multi-song MIDI files
|
|
468
|
+
* @param {number} num - Song number (0-based)
|
|
469
|
+
*/
|
|
470
|
+
selectSongNum(num: number): void;
|
|
471
|
+
/**
|
|
472
|
+
* Get the number of songs in the loaded MIDI file
|
|
473
|
+
* @returns {Promise<number>}
|
|
474
|
+
*/
|
|
475
|
+
getSongsCount(): Promise<number>;
|
|
476
|
+
/**
|
|
477
|
+
* Get the number of tracks in the loaded MIDI file
|
|
478
|
+
* @returns {Promise<number>}
|
|
479
|
+
*/
|
|
480
|
+
getTrackCount(): Promise<number>;
|
|
481
|
+
/**
|
|
482
|
+
* Set track options (enable, mute, or solo)
|
|
483
|
+
* Use the TrackOption enum: TrackOption.ON (1), TrackOption.OFF (2), TrackOption.SOLO (3).
|
|
484
|
+
* Note: Passing 0 is a silent no-op that resolves without changing state.
|
|
485
|
+
* @param {number} track - Track index
|
|
486
|
+
* @param {number} options - Track option from TrackOption enum
|
|
487
|
+
* @returns {Promise<void>} Resolves on success, rejects on failure
|
|
488
|
+
*/
|
|
489
|
+
setTrackOptions(track: number, options: number): Promise<void>;
|
|
490
|
+
/**
|
|
491
|
+
* Enable or disable a MIDI channel
|
|
492
|
+
* @param {number} channel - MIDI channel (0-15)
|
|
493
|
+
* @param {boolean} enabled - Whether to enable the channel
|
|
494
|
+
* @returns {Promise<void>} Resolves on success, rejects on failure
|
|
495
|
+
*/
|
|
496
|
+
setChannelEnabled(channel: number, enabled: boolean): Promise<void>;
|
|
422
497
|
/**
|
|
423
498
|
* Set the playback tempo multiplier
|
|
424
499
|
* @param {number} tempo - Tempo multiplier (1.0 = normal speed)
|
|
@@ -643,3 +718,6 @@ export type ConfigureSettings = {
|
|
|
643
718
|
*/
|
|
644
719
|
deepTremolo?: boolean | undefined;
|
|
645
720
|
};
|
|
721
|
+
import { Emulator } from './utils/constants.js';
|
|
722
|
+
import { TrackOption } from './utils/constants.js';
|
|
723
|
+
export { Emulator, TrackOption };
|