libadlmidi-js 1.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/LICENSE +165 -0
- package/README.md +126 -0
- package/dist/core.d.ts +276 -0
- package/dist/fm_banks/ail/MonopolyDeluxe.wopl +0 -0
- package/dist/fm_banks/ail/master_of_magic.wopl +0 -0
- package/dist/fm_banks/manifest.json +60 -0
- package/dist/fm_banks/wopl/Apogee-IMF-90.wopl +0 -0
- package/dist/fm_banks/wopl/DMXOPL3-by-sneakernets-GS.wopl +0 -0
- package/dist/fm_banks/wopl/GM-By-J.A.Nguyen-and-Wohlstand.wopl +0 -0
- package/dist/fm_banks/wopl/Wohlstand's-modded-FatMan.wopl +0 -0
- package/dist/fm_banks/wopl/fatman-2op.wopl +0 -0
- package/dist/fm_banks/wopl/fatman-4op.wopl +0 -0
- package/dist/fm_banks/wopl/msadlib.wopl +0 -0
- package/dist/libadlmidi.d.ts +453 -0
- package/dist/libadlmidi.dosbox.browser.js +2 -0
- package/dist/libadlmidi.dosbox.browser.wasm +0 -0
- package/dist/libadlmidi.dosbox.core.js +2 -0
- package/dist/libadlmidi.dosbox.core.wasm +0 -0
- package/dist/libadlmidi.dosbox.js +0 -0
- package/dist/libadlmidi.dosbox.processor.js +3226 -0
- package/dist/libadlmidi.dosbox.slim.browser.js +2 -0
- package/dist/libadlmidi.dosbox.slim.browser.wasm +0 -0
- package/dist/libadlmidi.dosbox.slim.core.js +2 -0
- package/dist/libadlmidi.dosbox.slim.core.wasm +0 -0
- package/dist/libadlmidi.dosbox.slim.js +0 -0
- package/dist/libadlmidi.dosbox.slim.processor.js +3226 -0
- package/dist/libadlmidi.full.browser.js +2 -0
- package/dist/libadlmidi.full.browser.wasm +0 -0
- package/dist/libadlmidi.full.core.js +2 -0
- package/dist/libadlmidi.full.core.wasm +0 -0
- package/dist/libadlmidi.full.js +0 -0
- package/dist/libadlmidi.full.processor.js +3226 -0
- package/dist/libadlmidi.full.slim.browser.js +2 -0
- package/dist/libadlmidi.full.slim.browser.wasm +0 -0
- package/dist/libadlmidi.full.slim.core.js +2 -0
- package/dist/libadlmidi.full.slim.core.wasm +0 -0
- package/dist/libadlmidi.full.slim.js +0 -0
- package/dist/libadlmidi.full.slim.processor.js +3226 -0
- package/dist/libadlmidi.js +445 -0
- package/dist/libadlmidi.js.map +7 -0
- package/dist/libadlmidi.light.browser.js +2 -0
- package/dist/libadlmidi.light.browser.wasm +0 -0
- package/dist/libadlmidi.light.core.js +2 -0
- package/dist/libadlmidi.light.core.wasm +0 -0
- package/dist/libadlmidi.light.js +0 -0
- package/dist/libadlmidi.light.processor.js +3226 -0
- package/dist/libadlmidi.light.slim.browser.js +2 -0
- package/dist/libadlmidi.light.slim.browser.wasm +0 -0
- package/dist/libadlmidi.light.slim.core.js +2 -0
- package/dist/libadlmidi.light.slim.core.wasm +0 -0
- package/dist/libadlmidi.light.slim.js +0 -0
- package/dist/libadlmidi.light.slim.processor.js +3226 -0
- package/dist/libadlmidi.nuked.browser.js +2 -0
- package/dist/libadlmidi.nuked.browser.wasm +0 -0
- package/dist/libadlmidi.nuked.core.js +2 -0
- package/dist/libadlmidi.nuked.core.wasm +0 -0
- package/dist/libadlmidi.nuked.js +0 -0
- package/dist/libadlmidi.nuked.processor.js +3226 -0
- package/dist/libadlmidi.nuked.slim.browser.js +2 -0
- package/dist/libadlmidi.nuked.slim.browser.wasm +0 -0
- package/dist/libadlmidi.nuked.slim.core.js +2 -0
- package/dist/libadlmidi.nuked.slim.core.wasm +0 -0
- package/dist/libadlmidi.nuked.slim.js +0 -0
- package/dist/libadlmidi.nuked.slim.processor.js +3226 -0
- package/dist/profiles/dosbox.d.ts +49 -0
- package/dist/profiles/dosbox.slim.d.ts +49 -0
- package/dist/profiles/full.d.ts +49 -0
- package/dist/profiles/full.slim.d.ts +49 -0
- package/dist/profiles/light.d.ts +49 -0
- package/dist/profiles/light.slim.d.ts +49 -0
- package/dist/profiles/nuked.d.ts +49 -0
- package/dist/profiles/nuked.slim.d.ts +49 -0
- package/dist/utils/struct.d.ts +209 -0
- package/package.json +103 -0
- package/src/core.js +591 -0
- package/src/libadlmidi.js +524 -0
- package/src/processor.js +517 -0
- package/src/profiles/dosbox.js +82 -0
- package/src/profiles/dosbox.slim.js +82 -0
- package/src/profiles/full.js +82 -0
- package/src/profiles/full.slim.js +82 -0
- package/src/profiles/light.js +82 -0
- package/src/profiles/light.slim.js +82 -0
- package/src/profiles/nuked.js +82 -0
- package/src/profiles/nuked.slim.js +82 -0
- package/src/utils/struct.js +288 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-configured AdlMidi for dosbox profile.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```javascript
|
|
6
|
+
* import { AdlMidi } from 'libadlmidi-js/dosbox';
|
|
7
|
+
*
|
|
8
|
+
* const synth = new AdlMidi();
|
|
9
|
+
* await synth.init(); // No paths needed!
|
|
10
|
+
* synth.noteOn(0, 60, 100);
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export class AdlMidi extends BaseAdlMidi {
|
|
14
|
+
/**
|
|
15
|
+
* Initialize the synthesizer with this profile's WASM.
|
|
16
|
+
*
|
|
17
|
+
* @param {string} [processorUrl] - Override processor URL (optional)
|
|
18
|
+
* @param {string} [wasmUrl] - Override WASM URL (optional)
|
|
19
|
+
* @returns {Promise<void>}
|
|
20
|
+
*/
|
|
21
|
+
init(processorUrl?: string, wasmUrl?: string): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Pre-configured AdlMidiCore for dosbox profile.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```javascript
|
|
28
|
+
* import { AdlMidiCore } from 'libadlmidi-js/dosbox/core';
|
|
29
|
+
*
|
|
30
|
+
* const synth = await AdlMidiCore.create(); // No paths needed!
|
|
31
|
+
* synth.init(44100);
|
|
32
|
+
* synth.noteOn(0, 60, 100);
|
|
33
|
+
* const samples = synth.generate(4096);
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export class AdlMidiCore {
|
|
37
|
+
/**
|
|
38
|
+
* Create a new AdlMidiCore instance with this profile's WASM.
|
|
39
|
+
*
|
|
40
|
+
* @param {{corePath?: string}} [options] - Options (corePath is pre-configured)
|
|
41
|
+
* @returns {Promise<BaseAdlMidiCore>}
|
|
42
|
+
*/
|
|
43
|
+
static create(options?: {
|
|
44
|
+
corePath?: string;
|
|
45
|
+
}): Promise<BaseAdlMidiCore>;
|
|
46
|
+
}
|
|
47
|
+
import { AdlMidi as BaseAdlMidi } from '../libadlmidi.js';
|
|
48
|
+
import { AdlMidiCore as BaseAdlMidiCore } from '../core.js';
|
|
49
|
+
export { encodeInstrument, decodeInstrument, defaultInstrument, encodeOperator, decodeOperator, defaultOperator } from "../utils/struct.js";
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-configured AdlMidi for dosbox slim profile.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```javascript
|
|
6
|
+
* import { AdlMidi } from 'libadlmidi-js/dosbox.slim';
|
|
7
|
+
*
|
|
8
|
+
* const synth = new AdlMidi();
|
|
9
|
+
* await synth.init(); // No paths needed!
|
|
10
|
+
* synth.noteOn(0, 60, 100);
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export class AdlMidi extends BaseAdlMidi {
|
|
14
|
+
/**
|
|
15
|
+
* Initialize the synthesizer with this profile's WASM.
|
|
16
|
+
*
|
|
17
|
+
* @param {string} [processorUrl] - Override processor URL (optional)
|
|
18
|
+
* @param {string} [wasmUrl] - Override WASM URL (optional)
|
|
19
|
+
* @returns {Promise<void>}
|
|
20
|
+
*/
|
|
21
|
+
init(processorUrl?: string, wasmUrl?: string): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Pre-configured AdlMidiCore for dosbox slim profile.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```javascript
|
|
28
|
+
* import { AdlMidiCore } from 'libadlmidi-js/dosbox.slim/core';
|
|
29
|
+
*
|
|
30
|
+
* const synth = await AdlMidiCore.create(); // No paths needed!
|
|
31
|
+
* synth.init(44100);
|
|
32
|
+
* synth.noteOn(0, 60, 100);
|
|
33
|
+
* const samples = synth.generate(4096);
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export class AdlMidiCore {
|
|
37
|
+
/**
|
|
38
|
+
* Create a new AdlMidiCore instance with this profile's WASM.
|
|
39
|
+
*
|
|
40
|
+
* @param {{corePath?: string}} [options] - Options (corePath is pre-configured)
|
|
41
|
+
* @returns {Promise<BaseAdlMidiCore>}
|
|
42
|
+
*/
|
|
43
|
+
static create(options?: {
|
|
44
|
+
corePath?: string;
|
|
45
|
+
}): Promise<BaseAdlMidiCore>;
|
|
46
|
+
}
|
|
47
|
+
import { AdlMidi as BaseAdlMidi } from '../libadlmidi.js';
|
|
48
|
+
import { AdlMidiCore as BaseAdlMidiCore } from '../core.js';
|
|
49
|
+
export { encodeInstrument, decodeInstrument, defaultInstrument, encodeOperator, decodeOperator, defaultOperator } from "../utils/struct.js";
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-configured AdlMidi for full profile.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```javascript
|
|
6
|
+
* import { AdlMidi } from 'libadlmidi-js/full';
|
|
7
|
+
*
|
|
8
|
+
* const synth = new AdlMidi();
|
|
9
|
+
* await synth.init(); // No paths needed!
|
|
10
|
+
* synth.noteOn(0, 60, 100);
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export class AdlMidi extends BaseAdlMidi {
|
|
14
|
+
/**
|
|
15
|
+
* Initialize the synthesizer with this profile's WASM.
|
|
16
|
+
*
|
|
17
|
+
* @param {string} [processorUrl] - Override processor URL (optional)
|
|
18
|
+
* @param {string} [wasmUrl] - Override WASM URL (optional)
|
|
19
|
+
* @returns {Promise<void>}
|
|
20
|
+
*/
|
|
21
|
+
init(processorUrl?: string, wasmUrl?: string): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Pre-configured AdlMidiCore for full profile.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```javascript
|
|
28
|
+
* import { AdlMidiCore } from 'libadlmidi-js/full/core';
|
|
29
|
+
*
|
|
30
|
+
* const synth = await AdlMidiCore.create(); // No paths needed!
|
|
31
|
+
* synth.init(44100);
|
|
32
|
+
* synth.noteOn(0, 60, 100);
|
|
33
|
+
* const samples = synth.generate(4096);
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export class AdlMidiCore {
|
|
37
|
+
/**
|
|
38
|
+
* Create a new AdlMidiCore instance with this profile's WASM.
|
|
39
|
+
*
|
|
40
|
+
* @param {{corePath?: string}} [options] - Options (corePath is pre-configured)
|
|
41
|
+
* @returns {Promise<BaseAdlMidiCore>}
|
|
42
|
+
*/
|
|
43
|
+
static create(options?: {
|
|
44
|
+
corePath?: string;
|
|
45
|
+
}): Promise<BaseAdlMidiCore>;
|
|
46
|
+
}
|
|
47
|
+
import { AdlMidi as BaseAdlMidi } from '../libadlmidi.js';
|
|
48
|
+
import { AdlMidiCore as BaseAdlMidiCore } from '../core.js';
|
|
49
|
+
export { encodeInstrument, decodeInstrument, defaultInstrument, encodeOperator, decodeOperator, defaultOperator } from "../utils/struct.js";
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-configured AdlMidi for full slim profile.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```javascript
|
|
6
|
+
* import { AdlMidi } from 'libadlmidi-js/full.slim';
|
|
7
|
+
*
|
|
8
|
+
* const synth = new AdlMidi();
|
|
9
|
+
* await synth.init(); // No paths needed!
|
|
10
|
+
* synth.noteOn(0, 60, 100);
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export class AdlMidi extends BaseAdlMidi {
|
|
14
|
+
/**
|
|
15
|
+
* Initialize the synthesizer with this profile's WASM.
|
|
16
|
+
*
|
|
17
|
+
* @param {string} [processorUrl] - Override processor URL (optional)
|
|
18
|
+
* @param {string} [wasmUrl] - Override WASM URL (optional)
|
|
19
|
+
* @returns {Promise<void>}
|
|
20
|
+
*/
|
|
21
|
+
init(processorUrl?: string, wasmUrl?: string): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Pre-configured AdlMidiCore for full slim profile.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```javascript
|
|
28
|
+
* import { AdlMidiCore } from 'libadlmidi-js/full.slim/core';
|
|
29
|
+
*
|
|
30
|
+
* const synth = await AdlMidiCore.create(); // No paths needed!
|
|
31
|
+
* synth.init(44100);
|
|
32
|
+
* synth.noteOn(0, 60, 100);
|
|
33
|
+
* const samples = synth.generate(4096);
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export class AdlMidiCore {
|
|
37
|
+
/**
|
|
38
|
+
* Create a new AdlMidiCore instance with this profile's WASM.
|
|
39
|
+
*
|
|
40
|
+
* @param {{corePath?: string}} [options] - Options (corePath is pre-configured)
|
|
41
|
+
* @returns {Promise<BaseAdlMidiCore>}
|
|
42
|
+
*/
|
|
43
|
+
static create(options?: {
|
|
44
|
+
corePath?: string;
|
|
45
|
+
}): Promise<BaseAdlMidiCore>;
|
|
46
|
+
}
|
|
47
|
+
import { AdlMidi as BaseAdlMidi } from '../libadlmidi.js';
|
|
48
|
+
import { AdlMidiCore as BaseAdlMidiCore } from '../core.js';
|
|
49
|
+
export { encodeInstrument, decodeInstrument, defaultInstrument, encodeOperator, decodeOperator, defaultOperator } from "../utils/struct.js";
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-configured AdlMidi for light profile.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```javascript
|
|
6
|
+
* import { AdlMidi } from 'libadlmidi-js/light';
|
|
7
|
+
*
|
|
8
|
+
* const synth = new AdlMidi();
|
|
9
|
+
* await synth.init(); // No paths needed!
|
|
10
|
+
* synth.noteOn(0, 60, 100);
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export class AdlMidi extends BaseAdlMidi {
|
|
14
|
+
/**
|
|
15
|
+
* Initialize the synthesizer with this profile's WASM.
|
|
16
|
+
*
|
|
17
|
+
* @param {string} [processorUrl] - Override processor URL (optional)
|
|
18
|
+
* @param {string} [wasmUrl] - Override WASM URL (optional)
|
|
19
|
+
* @returns {Promise<void>}
|
|
20
|
+
*/
|
|
21
|
+
init(processorUrl?: string, wasmUrl?: string): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Pre-configured AdlMidiCore for light profile.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```javascript
|
|
28
|
+
* import { AdlMidiCore } from 'libadlmidi-js/light/core';
|
|
29
|
+
*
|
|
30
|
+
* const synth = await AdlMidiCore.create(); // No paths needed!
|
|
31
|
+
* synth.init(44100);
|
|
32
|
+
* synth.noteOn(0, 60, 100);
|
|
33
|
+
* const samples = synth.generate(4096);
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export class AdlMidiCore {
|
|
37
|
+
/**
|
|
38
|
+
* Create a new AdlMidiCore instance with this profile's WASM.
|
|
39
|
+
*
|
|
40
|
+
* @param {{corePath?: string}} [options] - Options (corePath is pre-configured)
|
|
41
|
+
* @returns {Promise<BaseAdlMidiCore>}
|
|
42
|
+
*/
|
|
43
|
+
static create(options?: {
|
|
44
|
+
corePath?: string;
|
|
45
|
+
}): Promise<BaseAdlMidiCore>;
|
|
46
|
+
}
|
|
47
|
+
import { AdlMidi as BaseAdlMidi } from '../libadlmidi.js';
|
|
48
|
+
import { AdlMidiCore as BaseAdlMidiCore } from '../core.js';
|
|
49
|
+
export { encodeInstrument, decodeInstrument, defaultInstrument, encodeOperator, decodeOperator, defaultOperator } from "../utils/struct.js";
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-configured AdlMidi for light slim profile.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```javascript
|
|
6
|
+
* import { AdlMidi } from 'libadlmidi-js/light.slim';
|
|
7
|
+
*
|
|
8
|
+
* const synth = new AdlMidi();
|
|
9
|
+
* await synth.init(); // No paths needed!
|
|
10
|
+
* synth.noteOn(0, 60, 100);
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export class AdlMidi extends BaseAdlMidi {
|
|
14
|
+
/**
|
|
15
|
+
* Initialize the synthesizer with this profile's WASM.
|
|
16
|
+
*
|
|
17
|
+
* @param {string} [processorUrl] - Override processor URL (optional)
|
|
18
|
+
* @param {string} [wasmUrl] - Override WASM URL (optional)
|
|
19
|
+
* @returns {Promise<void>}
|
|
20
|
+
*/
|
|
21
|
+
init(processorUrl?: string, wasmUrl?: string): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Pre-configured AdlMidiCore for light slim profile.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```javascript
|
|
28
|
+
* import { AdlMidiCore } from 'libadlmidi-js/light.slim/core';
|
|
29
|
+
*
|
|
30
|
+
* const synth = await AdlMidiCore.create(); // No paths needed!
|
|
31
|
+
* synth.init(44100);
|
|
32
|
+
* synth.noteOn(0, 60, 100);
|
|
33
|
+
* const samples = synth.generate(4096);
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export class AdlMidiCore {
|
|
37
|
+
/**
|
|
38
|
+
* Create a new AdlMidiCore instance with this profile's WASM.
|
|
39
|
+
*
|
|
40
|
+
* @param {{corePath?: string}} [options] - Options (corePath is pre-configured)
|
|
41
|
+
* @returns {Promise<BaseAdlMidiCore>}
|
|
42
|
+
*/
|
|
43
|
+
static create(options?: {
|
|
44
|
+
corePath?: string;
|
|
45
|
+
}): Promise<BaseAdlMidiCore>;
|
|
46
|
+
}
|
|
47
|
+
import { AdlMidi as BaseAdlMidi } from '../libadlmidi.js';
|
|
48
|
+
import { AdlMidiCore as BaseAdlMidiCore } from '../core.js';
|
|
49
|
+
export { encodeInstrument, decodeInstrument, defaultInstrument, encodeOperator, decodeOperator, defaultOperator } from "../utils/struct.js";
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-configured AdlMidi for nuked profile.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```javascript
|
|
6
|
+
* import { AdlMidi } from 'libadlmidi-js/nuked';
|
|
7
|
+
*
|
|
8
|
+
* const synth = new AdlMidi();
|
|
9
|
+
* await synth.init(); // No paths needed!
|
|
10
|
+
* synth.noteOn(0, 60, 100);
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export class AdlMidi extends BaseAdlMidi {
|
|
14
|
+
/**
|
|
15
|
+
* Initialize the synthesizer with this profile's WASM.
|
|
16
|
+
*
|
|
17
|
+
* @param {string} [processorUrl] - Override processor URL (optional)
|
|
18
|
+
* @param {string} [wasmUrl] - Override WASM URL (optional)
|
|
19
|
+
* @returns {Promise<void>}
|
|
20
|
+
*/
|
|
21
|
+
init(processorUrl?: string, wasmUrl?: string): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Pre-configured AdlMidiCore for nuked profile.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```javascript
|
|
28
|
+
* import { AdlMidiCore } from 'libadlmidi-js/nuked/core';
|
|
29
|
+
*
|
|
30
|
+
* const synth = await AdlMidiCore.create(); // No paths needed!
|
|
31
|
+
* synth.init(44100);
|
|
32
|
+
* synth.noteOn(0, 60, 100);
|
|
33
|
+
* const samples = synth.generate(4096);
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export class AdlMidiCore {
|
|
37
|
+
/**
|
|
38
|
+
* Create a new AdlMidiCore instance with this profile's WASM.
|
|
39
|
+
*
|
|
40
|
+
* @param {{corePath?: string}} [options] - Options (corePath is pre-configured)
|
|
41
|
+
* @returns {Promise<BaseAdlMidiCore>}
|
|
42
|
+
*/
|
|
43
|
+
static create(options?: {
|
|
44
|
+
corePath?: string;
|
|
45
|
+
}): Promise<BaseAdlMidiCore>;
|
|
46
|
+
}
|
|
47
|
+
import { AdlMidi as BaseAdlMidi } from '../libadlmidi.js';
|
|
48
|
+
import { AdlMidiCore as BaseAdlMidiCore } from '../core.js';
|
|
49
|
+
export { encodeInstrument, decodeInstrument, defaultInstrument, encodeOperator, decodeOperator, defaultOperator } from "../utils/struct.js";
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-configured AdlMidi for nuked slim profile.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```javascript
|
|
6
|
+
* import { AdlMidi } from 'libadlmidi-js/nuked.slim';
|
|
7
|
+
*
|
|
8
|
+
* const synth = new AdlMidi();
|
|
9
|
+
* await synth.init(); // No paths needed!
|
|
10
|
+
* synth.noteOn(0, 60, 100);
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export class AdlMidi extends BaseAdlMidi {
|
|
14
|
+
/**
|
|
15
|
+
* Initialize the synthesizer with this profile's WASM.
|
|
16
|
+
*
|
|
17
|
+
* @param {string} [processorUrl] - Override processor URL (optional)
|
|
18
|
+
* @param {string} [wasmUrl] - Override WASM URL (optional)
|
|
19
|
+
* @returns {Promise<void>}
|
|
20
|
+
*/
|
|
21
|
+
init(processorUrl?: string, wasmUrl?: string): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Pre-configured AdlMidiCore for nuked slim profile.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```javascript
|
|
28
|
+
* import { AdlMidiCore } from 'libadlmidi-js/nuked.slim/core';
|
|
29
|
+
*
|
|
30
|
+
* const synth = await AdlMidiCore.create(); // No paths needed!
|
|
31
|
+
* synth.init(44100);
|
|
32
|
+
* synth.noteOn(0, 60, 100);
|
|
33
|
+
* const samples = synth.generate(4096);
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export class AdlMidiCore {
|
|
37
|
+
/**
|
|
38
|
+
* Create a new AdlMidiCore instance with this profile's WASM.
|
|
39
|
+
*
|
|
40
|
+
* @param {{corePath?: string}} [options] - Options (corePath is pre-configured)
|
|
41
|
+
* @returns {Promise<BaseAdlMidiCore>}
|
|
42
|
+
*/
|
|
43
|
+
static create(options?: {
|
|
44
|
+
corePath?: string;
|
|
45
|
+
}): Promise<BaseAdlMidiCore>;
|
|
46
|
+
}
|
|
47
|
+
import { AdlMidi as BaseAdlMidi } from '../libadlmidi.js';
|
|
48
|
+
import { AdlMidiCore as BaseAdlMidiCore } from '../core.js';
|
|
49
|
+
export { encodeInstrument, decodeInstrument, defaultInstrument, encodeOperator, decodeOperator, defaultOperator } from "../utils/struct.js";
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {Object} Operator
|
|
3
|
+
* @property {boolean} am - Amplitude modulation (tremolo)
|
|
4
|
+
* @property {boolean} vibrato - Vibrato (frequency modulation)
|
|
5
|
+
* @property {boolean} sustaining - Sustaining (EG type)
|
|
6
|
+
* @property {boolean} ksr - Key scale rate
|
|
7
|
+
* @property {number} freqMult - Frequency multiplier (0-15)
|
|
8
|
+
* @property {number} keyScaleLevel - Key scale level (0-3)
|
|
9
|
+
* @property {number} totalLevel - Total level / attenuation (0-63, 0 = loudest)
|
|
10
|
+
* @property {number} attack - Attack rate (0-15)
|
|
11
|
+
* @property {number} decay - Decay rate (0-15)
|
|
12
|
+
* @property {number} sustain - Sustain level (0-15, 0 = loudest)
|
|
13
|
+
* @property {number} release - Release rate (0-15)
|
|
14
|
+
* @property {number} waveform - Waveform select (0-7)
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Decode an OPL3 operator from raw register bytes to named properties
|
|
18
|
+
* @param {Uint8Array | number[]} bytes - 5 bytes of operator register data
|
|
19
|
+
* @returns {Operator} Decoded operator with named properties
|
|
20
|
+
*/
|
|
21
|
+
export function decodeOperator(bytes: Uint8Array | number[]): Operator;
|
|
22
|
+
/**
|
|
23
|
+
* Encode named operator properties to raw register bytes
|
|
24
|
+
* @param {Operator} op - Operator with named properties
|
|
25
|
+
* @returns {Uint8Array} 5 bytes of operator register data
|
|
26
|
+
*/
|
|
27
|
+
export function encodeOperator(op: Operator): Uint8Array;
|
|
28
|
+
/**
|
|
29
|
+
* Default operator values (silent)
|
|
30
|
+
* @returns {Operator} A silent operator configuration
|
|
31
|
+
*/
|
|
32
|
+
export function defaultOperator(): Operator;
|
|
33
|
+
/**
|
|
34
|
+
* Complete OPL3 instrument definition
|
|
35
|
+
* @typedef {Object} Instrument
|
|
36
|
+
* @property {number} [version] - Instrument version
|
|
37
|
+
* @property {number} [noteOffset1] - Note offset for voice 1
|
|
38
|
+
* @property {number} [noteOffset2] - Note offset for voice 2
|
|
39
|
+
* @property {number} [velocityOffset] - MIDI velocity offset
|
|
40
|
+
* @property {number} [secondVoiceDetune] - Detune for second voice
|
|
41
|
+
* @property {number} [percussionKey] - Percussion key number
|
|
42
|
+
* @property {boolean} [is4op] - 4-operator mode enabled
|
|
43
|
+
* @property {boolean} [isPseudo4op] - Pseudo 4-op (two 2-op voices)
|
|
44
|
+
* @property {boolean} [isBlank] - Blank/unused instrument
|
|
45
|
+
* @property {number} [rhythmMode] - Rhythm mode (0-7)
|
|
46
|
+
* @property {number} [feedback1] - Feedback for voice 1 (0-7)
|
|
47
|
+
* @property {number} [connection1] - Connection type for voice 1 (0-1)
|
|
48
|
+
* @property {number} [feedback2] - Feedback for voice 2 (0-7)
|
|
49
|
+
* @property {number} [connection2] - Connection type for voice 2 (0-1)
|
|
50
|
+
* @property {[Operator, Operator, Operator, Operator]} operators - Four operators
|
|
51
|
+
* @property {number} [delayOnMs] - Delay before note-on (ms)
|
|
52
|
+
* @property {number} [delayOffMs] - Delay before note-off (ms)
|
|
53
|
+
*/
|
|
54
|
+
/**
|
|
55
|
+
* Decode an ADL_Instrument from raw bytes to JS object
|
|
56
|
+
* @param {Uint8Array} bytes - 40 bytes of instrument data
|
|
57
|
+
* @returns {Instrument} Decoded instrument with named properties
|
|
58
|
+
*/
|
|
59
|
+
export function decodeInstrument(bytes: Uint8Array): Instrument;
|
|
60
|
+
/**
|
|
61
|
+
* Encode a JS instrument object to raw bytes
|
|
62
|
+
* @param {Instrument} inst - Instrument with named properties
|
|
63
|
+
* @returns {Uint8Array} 40 bytes of instrument data
|
|
64
|
+
*/
|
|
65
|
+
export function encodeInstrument(inst: Instrument): Uint8Array;
|
|
66
|
+
/**
|
|
67
|
+
* Default instrument values (blank/silent)
|
|
68
|
+
* @returns {Instrument} A blank instrument configuration
|
|
69
|
+
*/
|
|
70
|
+
export function defaultInstrument(): Instrument;
|
|
71
|
+
/**
|
|
72
|
+
* OPL3 struct serialization utilities
|
|
73
|
+
* Shared between processor and tests
|
|
74
|
+
*
|
|
75
|
+
* @module utils/struct
|
|
76
|
+
*/
|
|
77
|
+
/** Size of ADL_Operator struct (5 register bytes) */
|
|
78
|
+
export const SIZEOF_ADL_OPERATOR: 5;
|
|
79
|
+
/** Size of ADL_Instrument struct */
|
|
80
|
+
export const SIZEOF_ADL_INSTRUMENT: 40;
|
|
81
|
+
/** Size of ADL_Bank struct (3 pointers × 4 bytes in 32-bit WASM) */
|
|
82
|
+
export const SIZEOF_ADL_BANK: 12;
|
|
83
|
+
/** Size of ADL_BankId struct (3 bytes + padding) */
|
|
84
|
+
export const SIZEOF_ADL_BANK_ID: 4;
|
|
85
|
+
/** Offset where operators start within ADL_Instrument */
|
|
86
|
+
export const OPERATOR_OFFSET: 14;
|
|
87
|
+
export type Operator = {
|
|
88
|
+
/**
|
|
89
|
+
* - Amplitude modulation (tremolo)
|
|
90
|
+
*/
|
|
91
|
+
am: boolean;
|
|
92
|
+
/**
|
|
93
|
+
* - Vibrato (frequency modulation)
|
|
94
|
+
*/
|
|
95
|
+
vibrato: boolean;
|
|
96
|
+
/**
|
|
97
|
+
* - Sustaining (EG type)
|
|
98
|
+
*/
|
|
99
|
+
sustaining: boolean;
|
|
100
|
+
/**
|
|
101
|
+
* - Key scale rate
|
|
102
|
+
*/
|
|
103
|
+
ksr: boolean;
|
|
104
|
+
/**
|
|
105
|
+
* - Frequency multiplier (0-15)
|
|
106
|
+
*/
|
|
107
|
+
freqMult: number;
|
|
108
|
+
/**
|
|
109
|
+
* - Key scale level (0-3)
|
|
110
|
+
*/
|
|
111
|
+
keyScaleLevel: number;
|
|
112
|
+
/**
|
|
113
|
+
* - Total level / attenuation (0-63, 0 = loudest)
|
|
114
|
+
*/
|
|
115
|
+
totalLevel: number;
|
|
116
|
+
/**
|
|
117
|
+
* - Attack rate (0-15)
|
|
118
|
+
*/
|
|
119
|
+
attack: number;
|
|
120
|
+
/**
|
|
121
|
+
* - Decay rate (0-15)
|
|
122
|
+
*/
|
|
123
|
+
decay: number;
|
|
124
|
+
/**
|
|
125
|
+
* - Sustain level (0-15, 0 = loudest)
|
|
126
|
+
*/
|
|
127
|
+
sustain: number;
|
|
128
|
+
/**
|
|
129
|
+
* - Release rate (0-15)
|
|
130
|
+
*/
|
|
131
|
+
release: number;
|
|
132
|
+
/**
|
|
133
|
+
* - Waveform select (0-7)
|
|
134
|
+
*/
|
|
135
|
+
waveform: number;
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* Complete OPL3 instrument definition
|
|
139
|
+
*/
|
|
140
|
+
export type Instrument = {
|
|
141
|
+
/**
|
|
142
|
+
* - Instrument version
|
|
143
|
+
*/
|
|
144
|
+
version?: number | undefined;
|
|
145
|
+
/**
|
|
146
|
+
* - Note offset for voice 1
|
|
147
|
+
*/
|
|
148
|
+
noteOffset1?: number | undefined;
|
|
149
|
+
/**
|
|
150
|
+
* - Note offset for voice 2
|
|
151
|
+
*/
|
|
152
|
+
noteOffset2?: number | undefined;
|
|
153
|
+
/**
|
|
154
|
+
* - MIDI velocity offset
|
|
155
|
+
*/
|
|
156
|
+
velocityOffset?: number | undefined;
|
|
157
|
+
/**
|
|
158
|
+
* - Detune for second voice
|
|
159
|
+
*/
|
|
160
|
+
secondVoiceDetune?: number | undefined;
|
|
161
|
+
/**
|
|
162
|
+
* - Percussion key number
|
|
163
|
+
*/
|
|
164
|
+
percussionKey?: number | undefined;
|
|
165
|
+
/**
|
|
166
|
+
* - 4-operator mode enabled
|
|
167
|
+
*/
|
|
168
|
+
is4op?: boolean | undefined;
|
|
169
|
+
/**
|
|
170
|
+
* - Pseudo 4-op (two 2-op voices)
|
|
171
|
+
*/
|
|
172
|
+
isPseudo4op?: boolean | undefined;
|
|
173
|
+
/**
|
|
174
|
+
* - Blank/unused instrument
|
|
175
|
+
*/
|
|
176
|
+
isBlank?: boolean | undefined;
|
|
177
|
+
/**
|
|
178
|
+
* - Rhythm mode (0-7)
|
|
179
|
+
*/
|
|
180
|
+
rhythmMode?: number | undefined;
|
|
181
|
+
/**
|
|
182
|
+
* - Feedback for voice 1 (0-7)
|
|
183
|
+
*/
|
|
184
|
+
feedback1?: number | undefined;
|
|
185
|
+
/**
|
|
186
|
+
* - Connection type for voice 1 (0-1)
|
|
187
|
+
*/
|
|
188
|
+
connection1?: number | undefined;
|
|
189
|
+
/**
|
|
190
|
+
* - Feedback for voice 2 (0-7)
|
|
191
|
+
*/
|
|
192
|
+
feedback2?: number | undefined;
|
|
193
|
+
/**
|
|
194
|
+
* - Connection type for voice 2 (0-1)
|
|
195
|
+
*/
|
|
196
|
+
connection2?: number | undefined;
|
|
197
|
+
/**
|
|
198
|
+
* - Four operators
|
|
199
|
+
*/
|
|
200
|
+
operators: [Operator, Operator, Operator, Operator];
|
|
201
|
+
/**
|
|
202
|
+
* - Delay before note-on (ms)
|
|
203
|
+
*/
|
|
204
|
+
delayOnMs?: number | undefined;
|
|
205
|
+
/**
|
|
206
|
+
* - Delay before note-off (ms)
|
|
207
|
+
*/
|
|
208
|
+
delayOffMs?: number | undefined;
|
|
209
|
+
};
|