@marmooo/midy 0.4.9 → 0.5.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/README.md +13 -1
- package/esm/midy-GM1.d.ts +61 -8
- package/esm/midy-GM1.d.ts.map +1 -1
- package/esm/midy-GM1.js +1093 -85
- package/esm/midy-GM2.d.ts +67 -7
- package/esm/midy-GM2.d.ts.map +1 -1
- package/esm/midy-GM2.js +1239 -134
- package/esm/midy-GMLite.d.ts +61 -7
- package/esm/midy-GMLite.d.ts.map +1 -1
- package/esm/midy-GMLite.js +1098 -83
- package/esm/midy.d.ts +42 -13
- package/esm/midy.d.ts.map +1 -1
- package/esm/midy.js +1248 -146
- package/package.json +1 -1
- package/script/midy-GM1.d.ts +61 -8
- package/script/midy-GM1.d.ts.map +1 -1
- package/script/midy-GM1.js +1093 -85
- package/script/midy-GM2.d.ts +67 -7
- package/script/midy-GM2.d.ts.map +1 -1
- package/script/midy-GM2.js +1239 -134
- package/script/midy-GMLite.d.ts +61 -7
- package/script/midy-GMLite.d.ts.map +1 -1
- package/script/midy-GMLite.js +1098 -83
- package/script/midy.d.ts +42 -13
- package/script/midy.d.ts.map +1 -1
- package/script/midy.js +1248 -146
package/README.md
CHANGED
|
@@ -30,7 +30,7 @@ This library provides several files depending on the implementation level.
|
|
|
30
30
|
optimized for chords
|
|
31
31
|
- [Hexatone](https://marmooo.github.io/hexatone/) - Hexagonal MPE MIDI
|
|
32
32
|
controller with Wicki-Hayden layout
|
|
33
|
-
- [
|
|
33
|
+
- [Glisstone](https://marmooo.github.io/glisstone/) - Hexagonal MPE MIDI
|
|
34
34
|
controller optimized for glissando
|
|
35
35
|
|
|
36
36
|
## Support Status
|
|
@@ -94,6 +94,18 @@ midy.addEventListener("resumed", func);
|
|
|
94
94
|
midy.addEventListener("seeked", func);
|
|
95
95
|
```
|
|
96
96
|
|
|
97
|
+
## Cache Mode
|
|
98
|
+
|
|
99
|
+
- "none" -for full real-time control (dynamic CC, LFO, pitch)
|
|
100
|
+
- "ads" - for real-time playback with higher cache hit rate
|
|
101
|
+
- "adsr" - for real-time playback with accurate release envelope
|
|
102
|
+
- "note" - for efficient playback when note behavior is fixed
|
|
103
|
+
- "audio" - for fully pre-rendered playback (lowest CPU)
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
const midy = new Midy(audioContext, { cacheMode: "note" });
|
|
107
|
+
```
|
|
108
|
+
|
|
97
109
|
### MIDI Message
|
|
98
110
|
|
|
99
111
|
There are functions that handle MIDI messages as they are, as well as simplified
|
package/esm/midy-GM1.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export class MidyGM1 extends EventTarget {
|
|
|
11
11
|
fineTuning: number;
|
|
12
12
|
coarseTuning: number;
|
|
13
13
|
};
|
|
14
|
-
constructor(audioContext: any);
|
|
14
|
+
constructor(audioContext: any, options?: {});
|
|
15
15
|
perceptualSmoothingTime: number;
|
|
16
16
|
mode: string;
|
|
17
17
|
numChannels: number;
|
|
@@ -28,7 +28,6 @@ export class MidyGM1 extends EventTarget {
|
|
|
28
28
|
voiceCache: Map<any, any>;
|
|
29
29
|
realtimeVoiceCache: Map<any, any>;
|
|
30
30
|
decodeMethod: string;
|
|
31
|
-
decoderQueue: Promise<void>;
|
|
32
31
|
isPlaying: boolean;
|
|
33
32
|
isPausing: boolean;
|
|
34
33
|
isPaused: boolean;
|
|
@@ -42,7 +41,15 @@ export class MidyGM1 extends EventTarget {
|
|
|
42
41
|
notePromises: any[];
|
|
43
42
|
instruments: Set<any>;
|
|
44
43
|
exclusiveClassNotes: any[];
|
|
44
|
+
adsrVoiceCache: Map<any, any>;
|
|
45
|
+
noteOnDurations: Map<any, any>;
|
|
46
|
+
noteOnEvents: Map<any, any>;
|
|
47
|
+
fullVoiceCache: Map<any, any>;
|
|
48
|
+
renderedAudioBuffer: null;
|
|
49
|
+
isRendering: boolean;
|
|
50
|
+
audioModeBufferSource: null;
|
|
45
51
|
audioContext: any;
|
|
52
|
+
cacheMode: any;
|
|
46
53
|
masterVolume: any;
|
|
47
54
|
scheduler: any;
|
|
48
55
|
schedulerBuffer: any;
|
|
@@ -54,7 +61,7 @@ export class MidyGM1 extends EventTarget {
|
|
|
54
61
|
modLfoToVolume: (channel: any, note: any, scheduleTime: any) => void;
|
|
55
62
|
chorusEffectsSend: (_channel: any, _note: any, _scheduleTime: any) => void;
|
|
56
63
|
reverbEffectsSend: (_channel: any, _note: any, _scheduleTime: any) => void;
|
|
57
|
-
delayModLFO: (
|
|
64
|
+
delayModLFO: (channel: any, note: any, scheduleTime: any) => void;
|
|
58
65
|
freqModLFO: (_channel: any, note: any, scheduleTime: any) => void;
|
|
59
66
|
delayVibLFO: (_channel: any, _note: any, _scheduleTime: any) => void;
|
|
60
67
|
freqVibLFO: (_channel: any, _note: any, _scheduleTime: any) => void;
|
|
@@ -66,8 +73,9 @@ export class MidyGM1 extends EventTarget {
|
|
|
66
73
|
toUint8Array(input: any): Promise<Uint8Array<ArrayBuffer>>;
|
|
67
74
|
loadSoundFont(input: any): Promise<void>;
|
|
68
75
|
loadMIDI(input: any): Promise<void>;
|
|
76
|
+
buildNoteOnDurations(): void;
|
|
69
77
|
cacheVoiceIds(): void;
|
|
70
|
-
getVoiceId(channel: any, noteNumber: any, velocity: any):
|
|
78
|
+
getVoiceId(channel: any, noteNumber: any, velocity: any): number | undefined;
|
|
71
79
|
createChannelAudioNodes(audioContext: any): {
|
|
72
80
|
gainL: any;
|
|
73
81
|
gainR: any;
|
|
@@ -76,11 +84,12 @@ export class MidyGM1 extends EventTarget {
|
|
|
76
84
|
createChannels(audioContext: any): Channel[];
|
|
77
85
|
decodeOggVorbis(sample: any): Promise<any>;
|
|
78
86
|
createAudioBuffer(voiceParams: any): Promise<any>;
|
|
79
|
-
createBufferSource(voiceParams: any,
|
|
87
|
+
createBufferSource(voiceParams: any, renderedOrRaw: any): any;
|
|
80
88
|
scheduleTimelineEvents(scheduleTime: any, queueIndex: any): any;
|
|
81
89
|
getQueueIndex(second: any): number;
|
|
82
90
|
resetAllStates(): void;
|
|
83
91
|
updateStates(queueIndex: any, nextQueueIndex: any): void;
|
|
92
|
+
playAudioBuffer(): Promise<void>;
|
|
84
93
|
playNotes(): Promise<void>;
|
|
85
94
|
ticksToSecond(ticks: any, secondsPerBeat: any): number;
|
|
86
95
|
secondToTicks(second: any, secondsPerBeat: any): number;
|
|
@@ -92,6 +101,7 @@ export class MidyGM1 extends EventTarget {
|
|
|
92
101
|
stopActiveNotes(channelNumber: any, velocity: any, force: any, scheduleTime: any): Promise<any[]>;
|
|
93
102
|
stopChannelNotes(channelNumber: any, velocity: any, force: any, scheduleTime: any): Promise<any[]>;
|
|
94
103
|
stopNotes(velocity: any, force: any, scheduleTime: any): Promise<any[]>;
|
|
104
|
+
render(): Promise<null | undefined>;
|
|
95
105
|
start(): Promise<void>;
|
|
96
106
|
stop(): Promise<void>;
|
|
97
107
|
pause(): Promise<void>;
|
|
@@ -114,12 +124,21 @@ export class MidyGM1 extends EventTarget {
|
|
|
114
124
|
clampCutoffFrequency(frequency: any): number;
|
|
115
125
|
setFilterEnvelope(note: any, scheduleTime: any): void;
|
|
116
126
|
startModulation(channel: any, note: any, scheduleTime: any): void;
|
|
117
|
-
|
|
127
|
+
createAdsRenderedBuffer(note: any, voiceParams: any, audioBuffer: any, isDrum?: boolean): Promise<RenderedBuffer>;
|
|
128
|
+
createAdsrRenderedBuffer(note: any, voiceParams: any, audioBuffer: any, noteDuration: any): Promise<RenderedBuffer>;
|
|
129
|
+
createFullRenderedBuffer(channel: any, note: any, voiceParams: any, noteDuration: any, noteEvent?: {}): Promise<RenderedBuffer>;
|
|
130
|
+
getAudioBuffer(channel: any, note: any, realtime: any): Promise<any>;
|
|
131
|
+
getAdsCachedBuffer(channel: any, note: any, audioBufferId: any, realtime: any): Promise<any>;
|
|
132
|
+
getAdsrCachedBuffer(note: any, audioBufferId: any): Promise<any>;
|
|
133
|
+
getFullCachedBuffer(note: any, audioBufferId: any): Promise<any>;
|
|
118
134
|
setNoteAudioNode(channel: any, note: any, realtime: any): Promise<any>;
|
|
119
135
|
handleExclusiveClass(note: any, channelNumber: any, startTime: any): void;
|
|
120
136
|
setNoteRouting(channelNumber: any, note: any, startTime: any): void;
|
|
121
|
-
noteOn(channelNumber: any, noteNumber: any, velocity: any, startTime: any): Promise<
|
|
137
|
+
noteOn(channelNumber: any, noteNumber: any, velocity: any, startTime: any): Promise<any>;
|
|
138
|
+
createNote(channelNumber: any, noteNumber: any, velocity: any, startTime: any): Note;
|
|
139
|
+
setupNote(channelNumber: any, note: any, startTime: any): Promise<any>;
|
|
122
140
|
disconnectNote(note: any): void;
|
|
141
|
+
releaseFullCache(note: any): void;
|
|
123
142
|
releaseNote(channel: any, note: any, endTime: any): Promise<any>;
|
|
124
143
|
noteOff(channelNumber: any, noteNumber: any, _velocity: any, endTime: any, force: any): any;
|
|
125
144
|
setNoteIndex(channel: any, index: any): void;
|
|
@@ -143,7 +162,7 @@ export class MidyGM1 extends EventTarget {
|
|
|
143
162
|
modLfoToVolume: (channel: any, note: any, scheduleTime: any) => void;
|
|
144
163
|
chorusEffectsSend: (_channel: any, _note: any, _scheduleTime: any) => void;
|
|
145
164
|
reverbEffectsSend: (_channel: any, _note: any, _scheduleTime: any) => void;
|
|
146
|
-
delayModLFO: (
|
|
165
|
+
delayModLFO: (channel: any, note: any, scheduleTime: any) => void;
|
|
147
166
|
freqModLFO: (_channel: any, note: any, scheduleTime: any) => void;
|
|
148
167
|
delayVibLFO: (_channel: any, _note: any, _scheduleTime: any) => void;
|
|
149
168
|
freqVibLFO: (_channel: any, _note: any, _scheduleTime: any) => void;
|
|
@@ -208,6 +227,40 @@ declare class Channel {
|
|
|
208
227
|
state: ControllerState;
|
|
209
228
|
resetSettings(settings: any): void;
|
|
210
229
|
}
|
|
230
|
+
declare class RenderedBuffer {
|
|
231
|
+
constructor(buffer: any, meta?: {});
|
|
232
|
+
buffer: any;
|
|
233
|
+
isLoop: any;
|
|
234
|
+
isFull: any;
|
|
235
|
+
adsDuration: any;
|
|
236
|
+
loopStart: any;
|
|
237
|
+
loopDuration: any;
|
|
238
|
+
noteDuration: any;
|
|
239
|
+
releaseDuration: any;
|
|
240
|
+
}
|
|
241
|
+
declare class Note {
|
|
242
|
+
constructor(noteNumber: any, velocity: any, startTime: any);
|
|
243
|
+
voice: any;
|
|
244
|
+
voiceParams: any;
|
|
245
|
+
adjustedBaseFreq: number;
|
|
246
|
+
index: number;
|
|
247
|
+
ending: boolean;
|
|
248
|
+
bufferSource: any;
|
|
249
|
+
timelineIndex: null;
|
|
250
|
+
renderedBuffer: null;
|
|
251
|
+
fullCacheVoiceId: null;
|
|
252
|
+
filterEnvelopeNode: any;
|
|
253
|
+
volumeEnvelopeNode: any;
|
|
254
|
+
modLfo: any;
|
|
255
|
+
modLfoToPitch: any;
|
|
256
|
+
modLfoToFilterFc: any;
|
|
257
|
+
modLfoToVolume: any;
|
|
258
|
+
noteNumber: any;
|
|
259
|
+
velocity: any;
|
|
260
|
+
startTime: any;
|
|
261
|
+
ready: Promise<any>;
|
|
262
|
+
resolveReady: (value: any) => void;
|
|
263
|
+
}
|
|
211
264
|
declare class ControllerState {
|
|
212
265
|
array: Float32Array<ArrayBuffer>;
|
|
213
266
|
}
|
package/esm/midy-GM1.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"midy-GM1.d.ts","sourceRoot":"","sources":["../src/midy-GM1.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"midy-GM1.d.ts","sourceRoot":"","sources":["../src/midy-GM1.js"],"names":[],"mappings":"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"}
|