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/src/processor.js
CHANGED
|
@@ -333,8 +333,8 @@ class AdlMidiProcessor extends AudioWorkletProcessor {
|
|
|
333
333
|
this.port.postMessage({ type: 'configured' });
|
|
334
334
|
break;
|
|
335
335
|
|
|
336
|
-
case '
|
|
337
|
-
this.
|
|
336
|
+
case 'loadBankData':
|
|
337
|
+
this.loadBankData(msg.data);
|
|
338
338
|
break;
|
|
339
339
|
|
|
340
340
|
case 'setBank': {
|
|
@@ -367,6 +367,10 @@ class AdlMidiProcessor extends AudioWorkletProcessor {
|
|
|
367
367
|
this.port.postMessage({ type: 'numFourOpChannels', channels: this.adl._adl_getNumFourOpsChn(this.midi) });
|
|
368
368
|
break;
|
|
369
369
|
|
|
370
|
+
case 'getNumFourOpChannelsObtained':
|
|
371
|
+
this.port.postMessage({ type: 'numFourOpChannelsObtained', channels: this.adl._adl_getNumFourOpsChnObtained(this.midi) });
|
|
372
|
+
break;
|
|
373
|
+
|
|
370
374
|
case 'setScaleModulators':
|
|
371
375
|
this.adl._adl_setScaleModulators(this.midi, msg.enabled ? 1 : 0);
|
|
372
376
|
break;
|
|
@@ -391,22 +395,30 @@ class AdlMidiProcessor extends AudioWorkletProcessor {
|
|
|
391
395
|
this.port.postMessage({ type: 'channelAllocMode', mode: this.adl._adl_getChannelAllocMode(this.midi) });
|
|
392
396
|
break;
|
|
393
397
|
|
|
394
|
-
case '
|
|
398
|
+
case 'setVolumeRangeModel':
|
|
395
399
|
this.adl._adl_setVolumeRangeModel(this.midi, msg.model);
|
|
396
400
|
break;
|
|
397
401
|
|
|
398
|
-
case '
|
|
399
|
-
this.adl.
|
|
402
|
+
case 'setDeepVibrato':
|
|
403
|
+
this.adl._adl_setHVibrato(this.midi, msg.enabled ? 1 : 0);
|
|
400
404
|
break;
|
|
401
405
|
|
|
402
|
-
case '
|
|
403
|
-
this.adl.
|
|
406
|
+
case 'getDeepVibrato':
|
|
407
|
+
this.port.postMessage({ type: 'deepVibrato', enabled: this.adl._adl_getHVibrato(this.midi) !== 0 });
|
|
404
408
|
break;
|
|
405
409
|
|
|
406
|
-
case '
|
|
410
|
+
case 'setDeepTremolo':
|
|
407
411
|
this.adl._adl_setHTremolo(this.midi, msg.enabled ? 1 : 0);
|
|
408
412
|
break;
|
|
409
413
|
|
|
414
|
+
case 'getDeepTremolo':
|
|
415
|
+
this.port.postMessage({ type: 'deepTremolo', enabled: this.adl._adl_getHTremolo(this.midi) !== 0 });
|
|
416
|
+
break;
|
|
417
|
+
|
|
418
|
+
case 'setSoftPanEnabled':
|
|
419
|
+
this.adl._adl_setSoftPanEnabled(this.midi, msg.enabled ? 1 : 0);
|
|
420
|
+
break;
|
|
421
|
+
|
|
410
422
|
case 'setRunAtPcmRate':
|
|
411
423
|
this.adl._adl_setRunAtPcmRate(this.midi, msg.enabled ? 1 : 0);
|
|
412
424
|
break;
|
|
@@ -425,6 +437,13 @@ class AdlMidiProcessor extends AudioWorkletProcessor {
|
|
|
425
437
|
break;
|
|
426
438
|
}
|
|
427
439
|
|
|
440
|
+
case 'getErrorInfo': {
|
|
441
|
+
const ptr = this.adl._adl_errorInfo(this.midi);
|
|
442
|
+
const info = ptr ? this.adl.UTF8ToString(ptr) : '';
|
|
443
|
+
this.port.postMessage({ type: 'errorInfo', info });
|
|
444
|
+
break;
|
|
445
|
+
}
|
|
446
|
+
|
|
428
447
|
case 'getLibraryVersion': {
|
|
429
448
|
const ptr = this.adl._adl_linkedLibraryVersion();
|
|
430
449
|
const version = ptr ? this.adl.UTF8ToString(ptr) : 'Unknown';
|
|
@@ -451,8 +470,8 @@ class AdlMidiProcessor extends AudioWorkletProcessor {
|
|
|
451
470
|
this.port.postMessage({ type: 'numChipsObtained', chips: this.adl._adl_getNumChipsObtained(this.midi) });
|
|
452
471
|
break;
|
|
453
472
|
|
|
454
|
-
case '
|
|
455
|
-
this.port.postMessage({ type: '
|
|
473
|
+
case 'getVolumeRangeModel':
|
|
474
|
+
this.port.postMessage({ type: 'volumeRangeModel', model: this.adl._adl_getVolumeRangeModel(this.midi) });
|
|
456
475
|
break;
|
|
457
476
|
|
|
458
477
|
case 'getEmbeddedBanks': {
|
|
@@ -480,6 +499,21 @@ class AdlMidiProcessor extends AudioWorkletProcessor {
|
|
|
480
499
|
break;
|
|
481
500
|
}
|
|
482
501
|
|
|
502
|
+
case 'getTrackTitleCount':
|
|
503
|
+
this.port.postMessage({ type: 'trackTitleCount', count: this.adl._adl_metaTrackTitleCount(this.midi) });
|
|
504
|
+
break;
|
|
505
|
+
|
|
506
|
+
case 'getTrackTitle': {
|
|
507
|
+
const ptr = this.adl._adl_metaTrackTitle(this.midi, msg.index);
|
|
508
|
+
const title = ptr ? this.adl.UTF8ToString(ptr) : '';
|
|
509
|
+
this.port.postMessage({ type: 'trackTitle', title, index: msg.index, reqId: msg.reqId });
|
|
510
|
+
break;
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
case 'getMarkerCount':
|
|
514
|
+
this.port.postMessage({ type: 'markerCount', count: this.adl._adl_metaMarkerCount(this.midi) });
|
|
515
|
+
break;
|
|
516
|
+
|
|
483
517
|
case 'play':
|
|
484
518
|
// If at end, rewind first so play works as expected
|
|
485
519
|
if (this.adl._adl_atEnd(this.midi) !== 0) {
|
|
@@ -498,10 +532,50 @@ class AdlMidiProcessor extends AudioWorkletProcessor {
|
|
|
498
532
|
this.adl._adl_positionSeek(this.midi, msg.position);
|
|
499
533
|
break;
|
|
500
534
|
|
|
501
|
-
case '
|
|
535
|
+
case 'setLoopEnabled':
|
|
502
536
|
this.adl._adl_setLoopEnabled(this.midi, msg.enabled ? 1 : 0);
|
|
503
537
|
break;
|
|
504
538
|
|
|
539
|
+
case 'setLoopCount':
|
|
540
|
+
this.adl._adl_setLoopCount(this.midi, msg.count);
|
|
541
|
+
break;
|
|
542
|
+
|
|
543
|
+
case 'setLoopHooksOnly':
|
|
544
|
+
this.adl._adl_setLoopHooksOnly(this.midi, msg.enabled ? 1 : 0);
|
|
545
|
+
break;
|
|
546
|
+
|
|
547
|
+
case 'getLoopStartTime':
|
|
548
|
+
this.port.postMessage({ type: 'loopStartTime', time: this.adl._adl_loopStartTime(this.midi) });
|
|
549
|
+
break;
|
|
550
|
+
|
|
551
|
+
case 'getLoopEndTime':
|
|
552
|
+
this.port.postMessage({ type: 'loopEndTime', time: this.adl._adl_loopEndTime(this.midi) });
|
|
553
|
+
break;
|
|
554
|
+
|
|
555
|
+
case 'selectSongNum':
|
|
556
|
+
this.adl._adl_selectSongNum(this.midi, msg.num);
|
|
557
|
+
break;
|
|
558
|
+
|
|
559
|
+
case 'getSongsCount':
|
|
560
|
+
this.port.postMessage({ type: 'songsCount', count: this.adl._adl_getSongsCount(this.midi) });
|
|
561
|
+
break;
|
|
562
|
+
|
|
563
|
+
case 'getTrackCount':
|
|
564
|
+
this.port.postMessage({ type: 'trackCount', count: this.adl._adl_trackCount(this.midi) });
|
|
565
|
+
break;
|
|
566
|
+
|
|
567
|
+
case 'setTrackOptions': {
|
|
568
|
+
const result = this.adl._adl_setTrackOptions(this.midi, msg.track, msg.options);
|
|
569
|
+
this.port.postMessage({ type: 'trackOptionsSet', success: result === 0, track: msg.track, reqId: msg.reqId });
|
|
570
|
+
break;
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
case 'setChannelEnabled': {
|
|
574
|
+
const result = this.adl._adl_setChannelEnabled(this.midi, msg.channel, msg.enabled ? 1 : 0);
|
|
575
|
+
this.port.postMessage({ type: 'channelEnabledSet', success: result === 0, channel: msg.channel, reqId: msg.reqId });
|
|
576
|
+
break;
|
|
577
|
+
}
|
|
578
|
+
|
|
505
579
|
case 'setTempo':
|
|
506
580
|
this.adl._adl_setTempo(this.midi, msg.tempo);
|
|
507
581
|
break;
|
|
@@ -520,6 +594,124 @@ class AdlMidiProcessor extends AudioWorkletProcessor {
|
|
|
520
594
|
this.adl._adl_reset(this.midi);
|
|
521
595
|
this.playMode = 'realtime';
|
|
522
596
|
break;
|
|
597
|
+
|
|
598
|
+
// ================== Bank Management ==================
|
|
599
|
+
|
|
600
|
+
case 'reserveBanks': {
|
|
601
|
+
// adl_reserveBanks returns the resulting capacity (>= 0), not 0 on success
|
|
602
|
+
const result = this.adl._adl_reserveBanks(this.midi, msg.count);
|
|
603
|
+
this.port.postMessage({ type: 'banksReserved', success: result >= 0, reqId: msg.reqId });
|
|
604
|
+
break;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
case 'getBankId': {
|
|
608
|
+
const bankIdPtr = this.adl._malloc(AdlMidiProcessor.SIZEOF_ADL_BANK_ID);
|
|
609
|
+
this.adl.HEAPU8[bankIdPtr] = msg.bankId.percussive ? 1 : 0;
|
|
610
|
+
this.adl.HEAPU8[bankIdPtr + 1] = msg.bankId.msb || 0;
|
|
611
|
+
this.adl.HEAPU8[bankIdPtr + 2] = msg.bankId.lsb || 0;
|
|
612
|
+
|
|
613
|
+
const bankPtr = this.adl._malloc(AdlMidiProcessor.SIZEOF_ADL_BANK);
|
|
614
|
+
const bankResult = this.adl._adl_getBank(this.midi, bankIdPtr, 0, bankPtr);
|
|
615
|
+
|
|
616
|
+
let id = null;
|
|
617
|
+
if (bankResult === 0) {
|
|
618
|
+
const outIdPtr = this.adl._malloc(AdlMidiProcessor.SIZEOF_ADL_BANK_ID);
|
|
619
|
+
const idResult = this.adl._adl_getBankId(this.midi, bankPtr, outIdPtr);
|
|
620
|
+
if (idResult === 0) {
|
|
621
|
+
id = {
|
|
622
|
+
percussive: this.adl.HEAPU8[outIdPtr],
|
|
623
|
+
msb: this.adl.HEAPU8[outIdPtr + 1],
|
|
624
|
+
lsb: this.adl.HEAPU8[outIdPtr + 2],
|
|
625
|
+
};
|
|
626
|
+
}
|
|
627
|
+
this.adl._free(outIdPtr);
|
|
628
|
+
}
|
|
629
|
+
this.adl._free(bankIdPtr);
|
|
630
|
+
this.adl._free(bankPtr);
|
|
631
|
+
// Echo bankId for concurrent request correlation
|
|
632
|
+
this.port.postMessage({ type: 'bankId', id, bankId: msg.bankId, reqId: msg.reqId });
|
|
633
|
+
break;
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
case 'removeBank': {
|
|
637
|
+
const bankIdPtr = this.adl._malloc(AdlMidiProcessor.SIZEOF_ADL_BANK_ID);
|
|
638
|
+
this.adl.HEAPU8[bankIdPtr] = msg.bankId.percussive ? 1 : 0;
|
|
639
|
+
this.adl.HEAPU8[bankIdPtr + 1] = msg.bankId.msb || 0;
|
|
640
|
+
this.adl.HEAPU8[bankIdPtr + 2] = msg.bankId.lsb || 0;
|
|
641
|
+
|
|
642
|
+
const bankPtr = this.adl._malloc(AdlMidiProcessor.SIZEOF_ADL_BANK);
|
|
643
|
+
const bankResult = this.adl._adl_getBank(this.midi, bankIdPtr, 0, bankPtr);
|
|
644
|
+
|
|
645
|
+
let success = false;
|
|
646
|
+
if (bankResult === 0) {
|
|
647
|
+
success = this.adl._adl_removeBank(this.midi, bankPtr) === 0;
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
this.adl._free(bankIdPtr);
|
|
651
|
+
this.adl._free(bankPtr);
|
|
652
|
+
// Echo bankId for concurrent request correlation
|
|
653
|
+
this.port.postMessage({ type: 'bankRemoved', success, bankId: msg.bankId, reqId: msg.reqId });
|
|
654
|
+
break;
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
case 'loadEmbeddedBank': {
|
|
658
|
+
const bankIdPtr = this.adl._malloc(AdlMidiProcessor.SIZEOF_ADL_BANK_ID);
|
|
659
|
+
this.adl.HEAPU8[bankIdPtr] = msg.bankId.percussive ? 1 : 0;
|
|
660
|
+
this.adl.HEAPU8[bankIdPtr + 1] = msg.bankId.msb || 0;
|
|
661
|
+
this.adl.HEAPU8[bankIdPtr + 2] = msg.bankId.lsb || 0;
|
|
662
|
+
|
|
663
|
+
const bankPtr = this.adl._malloc(AdlMidiProcessor.SIZEOF_ADL_BANK);
|
|
664
|
+
|
|
665
|
+
// Check if bank already exists before creating
|
|
666
|
+
const existed = this.adl._adl_getBank(this.midi, bankIdPtr, 0, bankPtr) === 0;
|
|
667
|
+
const bankResult = existed ? 0 : this.adl._adl_getBank(this.midi, bankIdPtr, 1, bankPtr);
|
|
668
|
+
|
|
669
|
+
let success = false;
|
|
670
|
+
if (bankResult === 0) {
|
|
671
|
+
success = this.adl._adl_loadEmbeddedBank(this.midi, bankPtr, msg.num) === 0;
|
|
672
|
+
// Clean up: if we created a new slot but load failed, remove it
|
|
673
|
+
if (!success && !existed) {
|
|
674
|
+
this.adl._adl_removeBank(this.midi, bankPtr);
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
this.adl._free(bankIdPtr);
|
|
679
|
+
this.adl._free(bankPtr);
|
|
680
|
+
// Echo bankId for concurrent request correlation
|
|
681
|
+
this.port.postMessage({ type: 'embeddedBankLoaded', success, bankId: msg.bankId, reqId: msg.reqId });
|
|
682
|
+
break;
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
// ================== SysEx ==================
|
|
686
|
+
|
|
687
|
+
case 'systemExclusive': {
|
|
688
|
+
const bytes = new Uint8Array(msg.data);
|
|
689
|
+
const ptr = this.adl._malloc(bytes.length);
|
|
690
|
+
this.adl.HEAPU8.set(bytes, ptr);
|
|
691
|
+
const result = this.adl._adl_rt_systemExclusive(this.midi, ptr, bytes.length);
|
|
692
|
+
this.adl._free(ptr);
|
|
693
|
+
// adl_rt_systemExclusive returns 1 when processed, 0 when rejected
|
|
694
|
+
this.port.postMessage({ type: 'systemExclusiveSent', success: result !== 0, reqId: msg.reqId });
|
|
695
|
+
break;
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
// ================== Debug / Diagnostics ==================
|
|
699
|
+
|
|
700
|
+
case 'describeChannels': {
|
|
701
|
+
// Size buffers based on actual chip count (~23 channels per OPL3 chip)
|
|
702
|
+
const numChips = this.adl._adl_getNumChipsObtained(this.midi);
|
|
703
|
+
const size = Math.max(256, (numChips + 1) * 23);
|
|
704
|
+
const textPtr = this.adl._malloc(size);
|
|
705
|
+
const attrPtr = this.adl._malloc(size);
|
|
706
|
+
this.adl._adl_describeChannels(this.midi, textPtr, attrPtr, size);
|
|
707
|
+
const text = this.adl.UTF8ToString(textPtr);
|
|
708
|
+
// attr contains raw per-channel bytes; one byte per channel char in text
|
|
709
|
+
const attr = Array.from(this.adl.HEAPU8.slice(attrPtr, attrPtr + text.length));
|
|
710
|
+
this.adl._free(textPtr);
|
|
711
|
+
this.adl._free(attrPtr);
|
|
712
|
+
this.port.postMessage({ type: 'channelsDescribed', text, attr, reqId: msg.reqId });
|
|
713
|
+
break;
|
|
714
|
+
}
|
|
523
715
|
}
|
|
524
716
|
}
|
|
525
717
|
|
|
@@ -575,7 +767,7 @@ class AdlMidiProcessor extends AudioWorkletProcessor {
|
|
|
575
767
|
return banks;
|
|
576
768
|
}
|
|
577
769
|
|
|
578
|
-
|
|
770
|
+
loadBankData(arrayBuffer) {
|
|
579
771
|
try {
|
|
580
772
|
const data = new Uint8Array(arrayBuffer);
|
|
581
773
|
const dataPtr = this.adl._malloc(data.length);
|
package/src/profiles/dosbox.js
CHANGED
|
@@ -72,11 +72,14 @@ export class AdlMidiCore {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
// Re-export struct utilities for convenience
|
|
75
|
-
export {
|
|
76
|
-
encodeInstrument,
|
|
77
|
-
decodeInstrument,
|
|
75
|
+
export {
|
|
76
|
+
encodeInstrument,
|
|
77
|
+
decodeInstrument,
|
|
78
78
|
defaultInstrument,
|
|
79
79
|
encodeOperator,
|
|
80
80
|
decodeOperator,
|
|
81
|
-
defaultOperator
|
|
81
|
+
defaultOperator
|
|
82
82
|
} from '../utils/struct.js';
|
|
83
|
+
|
|
84
|
+
// Re-export enums
|
|
85
|
+
export { Emulator, TrackOption } from '../utils/constants.js';
|
|
@@ -72,11 +72,14 @@ export class AdlMidiCore {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
// Re-export struct utilities for convenience
|
|
75
|
-
export {
|
|
76
|
-
encodeInstrument,
|
|
77
|
-
decodeInstrument,
|
|
75
|
+
export {
|
|
76
|
+
encodeInstrument,
|
|
77
|
+
decodeInstrument,
|
|
78
78
|
defaultInstrument,
|
|
79
79
|
encodeOperator,
|
|
80
80
|
decodeOperator,
|
|
81
|
-
defaultOperator
|
|
81
|
+
defaultOperator
|
|
82
82
|
} from '../utils/struct.js';
|
|
83
|
+
|
|
84
|
+
// Re-export enums
|
|
85
|
+
export { Emulator, TrackOption } from '../utils/constants.js';
|
package/src/profiles/full.js
CHANGED
|
@@ -72,11 +72,14 @@ export class AdlMidiCore {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
// Re-export struct utilities for convenience
|
|
75
|
-
export {
|
|
76
|
-
encodeInstrument,
|
|
77
|
-
decodeInstrument,
|
|
75
|
+
export {
|
|
76
|
+
encodeInstrument,
|
|
77
|
+
decodeInstrument,
|
|
78
78
|
defaultInstrument,
|
|
79
79
|
encodeOperator,
|
|
80
80
|
decodeOperator,
|
|
81
|
-
defaultOperator
|
|
81
|
+
defaultOperator
|
|
82
82
|
} from '../utils/struct.js';
|
|
83
|
+
|
|
84
|
+
// Re-export enums
|
|
85
|
+
export { Emulator, TrackOption } from '../utils/constants.js';
|
|
@@ -72,11 +72,14 @@ export class AdlMidiCore {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
// Re-export struct utilities for convenience
|
|
75
|
-
export {
|
|
76
|
-
encodeInstrument,
|
|
77
|
-
decodeInstrument,
|
|
75
|
+
export {
|
|
76
|
+
encodeInstrument,
|
|
77
|
+
decodeInstrument,
|
|
78
78
|
defaultInstrument,
|
|
79
79
|
encodeOperator,
|
|
80
80
|
decodeOperator,
|
|
81
|
-
defaultOperator
|
|
81
|
+
defaultOperator
|
|
82
82
|
} from '../utils/struct.js';
|
|
83
|
+
|
|
84
|
+
// Re-export enums
|
|
85
|
+
export { Emulator, TrackOption } from '../utils/constants.js';
|
package/src/profiles/light.js
CHANGED
|
@@ -72,11 +72,14 @@ export class AdlMidiCore {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
// Re-export struct utilities for convenience
|
|
75
|
-
export {
|
|
76
|
-
encodeInstrument,
|
|
77
|
-
decodeInstrument,
|
|
75
|
+
export {
|
|
76
|
+
encodeInstrument,
|
|
77
|
+
decodeInstrument,
|
|
78
78
|
defaultInstrument,
|
|
79
79
|
encodeOperator,
|
|
80
80
|
decodeOperator,
|
|
81
|
-
defaultOperator
|
|
81
|
+
defaultOperator
|
|
82
82
|
} from '../utils/struct.js';
|
|
83
|
+
|
|
84
|
+
// Re-export enums
|
|
85
|
+
export { Emulator, TrackOption } from '../utils/constants.js';
|
|
@@ -72,11 +72,14 @@ export class AdlMidiCore {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
// Re-export struct utilities for convenience
|
|
75
|
-
export {
|
|
76
|
-
encodeInstrument,
|
|
77
|
-
decodeInstrument,
|
|
75
|
+
export {
|
|
76
|
+
encodeInstrument,
|
|
77
|
+
decodeInstrument,
|
|
78
78
|
defaultInstrument,
|
|
79
79
|
encodeOperator,
|
|
80
80
|
decodeOperator,
|
|
81
|
-
defaultOperator
|
|
81
|
+
defaultOperator
|
|
82
82
|
} from '../utils/struct.js';
|
|
83
|
+
|
|
84
|
+
// Re-export enums
|
|
85
|
+
export { Emulator, TrackOption } from '../utils/constants.js';
|
package/src/profiles/nuked.js
CHANGED
|
@@ -72,11 +72,14 @@ export class AdlMidiCore {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
// Re-export struct utilities for convenience
|
|
75
|
-
export {
|
|
76
|
-
encodeInstrument,
|
|
77
|
-
decodeInstrument,
|
|
75
|
+
export {
|
|
76
|
+
encodeInstrument,
|
|
77
|
+
decodeInstrument,
|
|
78
78
|
defaultInstrument,
|
|
79
79
|
encodeOperator,
|
|
80
80
|
decodeOperator,
|
|
81
|
-
defaultOperator
|
|
81
|
+
defaultOperator
|
|
82
82
|
} from '../utils/struct.js';
|
|
83
|
+
|
|
84
|
+
// Re-export enums
|
|
85
|
+
export { Emulator, TrackOption } from '../utils/constants.js';
|
|
@@ -72,11 +72,14 @@ export class AdlMidiCore {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
// Re-export struct utilities for convenience
|
|
75
|
-
export {
|
|
76
|
-
encodeInstrument,
|
|
77
|
-
decodeInstrument,
|
|
75
|
+
export {
|
|
76
|
+
encodeInstrument,
|
|
77
|
+
decodeInstrument,
|
|
78
78
|
defaultInstrument,
|
|
79
79
|
encodeOperator,
|
|
80
80
|
decodeOperator,
|
|
81
|
-
defaultOperator
|
|
81
|
+
defaultOperator
|
|
82
82
|
} from '../utils/struct.js';
|
|
83
|
+
|
|
84
|
+
// Re-export enums
|
|
85
|
+
export { Emulator, TrackOption } from '../utils/constants.js';
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants for libADLMIDI-JS
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Available OPL2/OPL3 emulator cores.
|
|
7
|
+
* Use with switchEmulator() to change the synthesis engine at runtime.
|
|
8
|
+
* Note: Only emulators compiled into the current profile are available.
|
|
9
|
+
* @readonly
|
|
10
|
+
* @enum {number}
|
|
11
|
+
*/
|
|
12
|
+
export const Emulator = Object.freeze({
|
|
13
|
+
/** Nuked OPL3 v1.8 - Most accurate, higher CPU usage */
|
|
14
|
+
NUKED: 0,
|
|
15
|
+
/** Nuked OPL3 v1.7.4 - Slightly older version */
|
|
16
|
+
NUKED_174: 1,
|
|
17
|
+
/** DosBox OPL3 - Good accuracy, lower CPU usage */
|
|
18
|
+
DOSBOX: 2,
|
|
19
|
+
/** Opal - Reality Adlib Tracker emulator */
|
|
20
|
+
OPAL: 3,
|
|
21
|
+
/** Java OPL3 - Port of emu8950 */
|
|
22
|
+
JAVA: 4,
|
|
23
|
+
/** ESFMu - ESFM chip emulator */
|
|
24
|
+
ESFMu: 5,
|
|
25
|
+
/** MAME OPL2 */
|
|
26
|
+
MAME_OPL2: 6,
|
|
27
|
+
/** YMFM OPL2 */
|
|
28
|
+
YMFM_OPL2: 7,
|
|
29
|
+
/** YMFM OPL3 */
|
|
30
|
+
YMFM_OPL3: 8,
|
|
31
|
+
/** Nuked OPL2 LLE - Transistor-level emulation */
|
|
32
|
+
NUKED_OPL2_LLE: 9,
|
|
33
|
+
/** Nuked OPL3 LLE - Transistor-level emulation */
|
|
34
|
+
NUKED_OPL3_LLE: 10,
|
|
35
|
+
/** Nuked OPL2 Lite - Lightweight OPL2 emulation for AdLib-era music */
|
|
36
|
+
NUKED_OPL2_LITE: 11,
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Track option flags for use with setTrackOptions().
|
|
41
|
+
* @readonly
|
|
42
|
+
* @enum {number}
|
|
43
|
+
*/
|
|
44
|
+
export const TrackOption = Object.freeze({
|
|
45
|
+
/** Enable the track (default state) */
|
|
46
|
+
ON: 1,
|
|
47
|
+
/** Mute/disable the track */
|
|
48
|
+
OFF: 2,
|
|
49
|
+
/** Solo the track (mute all others) */
|
|
50
|
+
SOLO: 3,
|
|
51
|
+
});
|