libadlmidi-js 1.1.1 → 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 -63
- 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 +468 -22
- 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 -54
- 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 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,37 +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 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
|
-
}>;
|
|
108
55
|
export class AdlMidi {
|
|
109
56
|
/**
|
|
110
57
|
* Create a new AdlMidi instance
|
|
@@ -215,7 +162,7 @@ export class AdlMidi {
|
|
|
215
162
|
* @param {ArrayBuffer} arrayBuffer - Bank file data
|
|
216
163
|
* @returns {Promise<void>}
|
|
217
164
|
*/
|
|
218
|
-
|
|
165
|
+
loadBankData(arrayBuffer: ArrayBuffer): Promise<void>;
|
|
219
166
|
/**
|
|
220
167
|
* Set the embedded bank by number
|
|
221
168
|
* @param {number} bank - Bank number
|
|
@@ -252,6 +199,11 @@ export class AdlMidi {
|
|
|
252
199
|
* @returns {Promise<number>}
|
|
253
200
|
*/
|
|
254
201
|
getNumFourOpChannels(): Promise<number>;
|
|
202
|
+
/**
|
|
203
|
+
* Get the number of 4-operator channels obtained
|
|
204
|
+
* @returns {Promise<number>}
|
|
205
|
+
*/
|
|
206
|
+
getNumFourOpChannelsObtained(): Promise<number>;
|
|
255
207
|
/**
|
|
256
208
|
* Enable/disable scaling of modulators by volume
|
|
257
209
|
* @param {boolean} enabled
|
|
@@ -283,25 +235,35 @@ export class AdlMidi {
|
|
|
283
235
|
*/
|
|
284
236
|
getChannelAllocMode(): Promise<number>;
|
|
285
237
|
/**
|
|
286
|
-
* Set the volume model
|
|
238
|
+
* Set the volume range model
|
|
287
239
|
* @param {number} model - Volume model number
|
|
288
240
|
*/
|
|
289
|
-
|
|
241
|
+
setVolumeRangeModel(model: number): void;
|
|
290
242
|
/**
|
|
291
|
-
* Enable/disable
|
|
243
|
+
* Enable/disable soft stereo panning
|
|
292
244
|
* @param {boolean} enabled
|
|
293
245
|
*/
|
|
294
|
-
|
|
246
|
+
setSoftPanEnabled(enabled: boolean): void;
|
|
295
247
|
/**
|
|
296
248
|
* Enable/disable deep vibrato
|
|
297
249
|
* @param {boolean} enabled
|
|
298
250
|
*/
|
|
299
|
-
|
|
251
|
+
setDeepVibrato(enabled: boolean): void;
|
|
252
|
+
/**
|
|
253
|
+
* Get deep vibrato state
|
|
254
|
+
* @returns {Promise<boolean>}
|
|
255
|
+
*/
|
|
256
|
+
getDeepVibrato(): Promise<boolean>;
|
|
300
257
|
/**
|
|
301
258
|
* Enable/disable deep tremolo
|
|
302
259
|
* @param {boolean} enabled
|
|
303
260
|
*/
|
|
304
|
-
|
|
261
|
+
setDeepTremolo(enabled: boolean): void;
|
|
262
|
+
/**
|
|
263
|
+
* Get deep tremolo state
|
|
264
|
+
* @returns {Promise<boolean>}
|
|
265
|
+
*/
|
|
266
|
+
getDeepTremolo(): Promise<boolean>;
|
|
305
267
|
/**
|
|
306
268
|
* Run emulator with PCM rate to reduce CPU usage
|
|
307
269
|
* @param {boolean} enabled
|
|
@@ -314,7 +276,7 @@ export class AdlMidi {
|
|
|
314
276
|
* - nuked profile: NUKED only
|
|
315
277
|
* - dosbox profile: DOSBOX only
|
|
316
278
|
* - light profile: NUKED, DOSBOX
|
|
317
|
-
* - full profile: NUKED, DOSBOX, OPAL, JAVA,
|
|
279
|
+
* - full profile: NUKED, DOSBOX, OPAL, JAVA, ESFMu, YMFM_OPL2, YMFM_OPL3
|
|
318
280
|
*
|
|
319
281
|
* @param {number} emulator - Emulator ID from the Emulator enum
|
|
320
282
|
* @returns {Promise<void>} Resolves when emulator is switched, rejects if unavailable
|
|
@@ -331,6 +293,11 @@ export class AdlMidi {
|
|
|
331
293
|
* console.log(`Using: ${name}`);
|
|
332
294
|
*/
|
|
333
295
|
getEmulatorName(): Promise<string>;
|
|
296
|
+
/**
|
|
297
|
+
* Get the last error info for the player instance
|
|
298
|
+
* @returns {Promise<string>}
|
|
299
|
+
*/
|
|
300
|
+
getErrorInfo(): Promise<string>;
|
|
334
301
|
/**
|
|
335
302
|
* Get the version string of the linked libADLMIDI library
|
|
336
303
|
* @returns {Promise<string>}
|
|
@@ -359,7 +326,7 @@ export class AdlMidi {
|
|
|
359
326
|
* Get the volume range model
|
|
360
327
|
* @returns {Promise<number>}
|
|
361
328
|
*/
|
|
362
|
-
|
|
329
|
+
getVolumeRangeModel(): Promise<number>;
|
|
363
330
|
/**
|
|
364
331
|
* Get list of embedded banks available in this build
|
|
365
332
|
* Note: Slim builds have no embedded banks and will return an empty array
|
|
@@ -372,6 +339,49 @@ export class AdlMidi {
|
|
|
372
339
|
id: number;
|
|
373
340
|
name: string;
|
|
374
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
|
+
}>;
|
|
375
385
|
/**
|
|
376
386
|
* Reset the synthesizer
|
|
377
387
|
* @returns {void}
|
|
@@ -395,6 +405,22 @@ export class AdlMidi {
|
|
|
395
405
|
* @returns {Promise<string>}
|
|
396
406
|
*/
|
|
397
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>;
|
|
398
424
|
/**
|
|
399
425
|
* Start or resume MIDI file playback
|
|
400
426
|
* @returns {void}
|
|
@@ -416,7 +442,58 @@ export class AdlMidi {
|
|
|
416
442
|
* @param {boolean} enabled - Whether to loop
|
|
417
443
|
* @returns {void}
|
|
418
444
|
*/
|
|
419
|
-
|
|
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>;
|
|
420
497
|
/**
|
|
421
498
|
* Set the playback tempo multiplier
|
|
422
499
|
* @param {number} tempo - Tempo multiplier (1.0 = normal speed)
|
|
@@ -641,3 +718,6 @@ export type ConfigureSettings = {
|
|
|
641
718
|
*/
|
|
642
719
|
deepTremolo?: boolean | undefined;
|
|
643
720
|
};
|
|
721
|
+
import { Emulator } from './utils/constants.js';
|
|
722
|
+
import { TrackOption } from './utils/constants.js';
|
|
723
|
+
export { Emulator, TrackOption };
|