rlo-engine 1.0.3
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 +493 -0
- package/dist/AudioEffects.d.ts +16 -0
- package/dist/AudioEffects.d.ts.map +1 -0
- package/dist/AudioEffects.js +41 -0
- package/dist/AudioEffects.js.map +1 -0
- package/dist/Instruments/Analog/AnalogSynthBase.d.ts +22 -0
- package/dist/Instruments/Analog/AnalogSynthBase.d.ts.map +1 -0
- package/dist/Instruments/Analog/AnalogSynthBase.js +30 -0
- package/dist/Instruments/Analog/AnalogSynthBase.js.map +1 -0
- package/dist/Instruments/Analog/BassSynth.d.ts +14 -0
- package/dist/Instruments/Analog/BassSynth.d.ts.map +1 -0
- package/dist/Instruments/Analog/BassSynth.js +25 -0
- package/dist/Instruments/Analog/BassSynth.js.map +1 -0
- package/dist/Instruments/Analog/ChiptuneSynth.d.ts +14 -0
- package/dist/Instruments/Analog/ChiptuneSynth.d.ts.map +1 -0
- package/dist/Instruments/Analog/ChiptuneSynth.js +19 -0
- package/dist/Instruments/Analog/ChiptuneSynth.js.map +1 -0
- package/dist/Instruments/Analog/FMSynth.d.ts +15 -0
- package/dist/Instruments/Analog/FMSynth.d.ts.map +1 -0
- package/dist/Instruments/Analog/FMSynth.js +23 -0
- package/dist/Instruments/Analog/FMSynth.js.map +1 -0
- package/dist/Instruments/Analog/FormantSynth.d.ts +14 -0
- package/dist/Instruments/Analog/FormantSynth.d.ts.map +1 -0
- package/dist/Instruments/Analog/FormantSynth.js +26 -0
- package/dist/Instruments/Analog/FormantSynth.js.map +1 -0
- package/dist/Instruments/Analog/LeadSynth.d.ts +13 -0
- package/dist/Instruments/Analog/LeadSynth.d.ts.map +1 -0
- package/dist/Instruments/Analog/LeadSynth.js +21 -0
- package/dist/Instruments/Analog/LeadSynth.js.map +1 -0
- package/dist/Instruments/Analog/OrganSynth.d.ts +13 -0
- package/dist/Instruments/Analog/OrganSynth.d.ts.map +1 -0
- package/dist/Instruments/Analog/OrganSynth.js +24 -0
- package/dist/Instruments/Analog/OrganSynth.js.map +1 -0
- package/dist/Instruments/Analog/PadSynth.d.ts +14 -0
- package/dist/Instruments/Analog/PadSynth.d.ts.map +1 -0
- package/dist/Instruments/Analog/PadSynth.js +22 -0
- package/dist/Instruments/Analog/PadSynth.js.map +1 -0
- package/dist/Instruments/Analog/ReeseBassSynth.d.ts +14 -0
- package/dist/Instruments/Analog/ReeseBassSynth.d.ts.map +1 -0
- package/dist/Instruments/Analog/ReeseBassSynth.js +22 -0
- package/dist/Instruments/Analog/ReeseBassSynth.js.map +1 -0
- package/dist/Instruments/Analog/StringSynth.d.ts +13 -0
- package/dist/Instruments/Analog/StringSynth.d.ts.map +1 -0
- package/dist/Instruments/Analog/StringSynth.js +19 -0
- package/dist/Instruments/Analog/StringSynth.js.map +1 -0
- package/dist/Instruments/Analog/WoodwindSynth.d.ts +14 -0
- package/dist/Instruments/Analog/WoodwindSynth.d.ts.map +1 -0
- package/dist/Instruments/Analog/WoodwindSynth.js +35 -0
- package/dist/Instruments/Analog/WoodwindSynth.js.map +1 -0
- package/dist/Instruments/CoreSynthBase.d.ts +29 -0
- package/dist/Instruments/CoreSynthBase.d.ts.map +1 -0
- package/dist/Instruments/CoreSynthBase.js +91 -0
- package/dist/Instruments/CoreSynthBase.js.map +1 -0
- package/dist/Instruments/Decay/AdditiveSynth.d.ts +15 -0
- package/dist/Instruments/Decay/AdditiveSynth.d.ts.map +1 -0
- package/dist/Instruments/Decay/AdditiveSynth.js +24 -0
- package/dist/Instruments/Decay/AdditiveSynth.js.map +1 -0
- package/dist/Instruments/Decay/BrassSynth.d.ts +13 -0
- package/dist/Instruments/Decay/BrassSynth.d.ts.map +1 -0
- package/dist/Instruments/Decay/BrassSynth.js +29 -0
- package/dist/Instruments/Decay/BrassSynth.js.map +1 -0
- package/dist/Instruments/Decay/ChromaticPercussionSynth.d.ts +15 -0
- package/dist/Instruments/Decay/ChromaticPercussionSynth.d.ts.map +1 -0
- package/dist/Instruments/Decay/ChromaticPercussionSynth.js +23 -0
- package/dist/Instruments/Decay/ChromaticPercussionSynth.js.map +1 -0
- package/dist/Instruments/Decay/DecaySynthBase.d.ts +23 -0
- package/dist/Instruments/Decay/DecaySynthBase.d.ts.map +1 -0
- package/dist/Instruments/Decay/DecaySynthBase.js +35 -0
- package/dist/Instruments/Decay/DecaySynthBase.js.map +1 -0
- package/dist/Instruments/Decay/ElectricGuitarSynth.d.ts +15 -0
- package/dist/Instruments/Decay/ElectricGuitarSynth.d.ts.map +1 -0
- package/dist/Instruments/Decay/ElectricGuitarSynth.js +31 -0
- package/dist/Instruments/Decay/ElectricGuitarSynth.js.map +1 -0
- package/dist/Instruments/Decay/EthnicSynth.d.ts +15 -0
- package/dist/Instruments/Decay/EthnicSynth.d.ts.map +1 -0
- package/dist/Instruments/Decay/EthnicSynth.js +21 -0
- package/dist/Instruments/Decay/EthnicSynth.js.map +1 -0
- package/dist/Instruments/Decay/GuitarSynth.d.ts +14 -0
- package/dist/Instruments/Decay/GuitarSynth.d.ts.map +1 -0
- package/dist/Instruments/Decay/GuitarSynth.js +23 -0
- package/dist/Instruments/Decay/GuitarSynth.js.map +1 -0
- package/dist/Instruments/Decay/KarplusSynth.d.ts +10 -0
- package/dist/Instruments/Decay/KarplusSynth.d.ts.map +1 -0
- package/dist/Instruments/Decay/KarplusSynth.js +34 -0
- package/dist/Instruments/Decay/KarplusSynth.js.map +1 -0
- package/dist/Instruments/Decay/PianoSynth.d.ts +14 -0
- package/dist/Instruments/Decay/PianoSynth.d.ts.map +1 -0
- package/dist/Instruments/Decay/PianoSynth.js +32 -0
- package/dist/Instruments/Decay/PianoSynth.js.map +1 -0
- package/dist/Instruments/Decay/SlapBassSynth.d.ts +15 -0
- package/dist/Instruments/Decay/SlapBassSynth.d.ts.map +1 -0
- package/dist/Instruments/Decay/SlapBassSynth.js +28 -0
- package/dist/Instruments/Decay/SlapBassSynth.js.map +1 -0
- package/dist/Instruments/ISynthInstrument.d.ts +16 -0
- package/dist/Instruments/ISynthInstrument.d.ts.map +1 -0
- package/dist/Instruments/ISynthInstrument.js +2 -0
- package/dist/Instruments/ISynthInstrument.js.map +1 -0
- package/dist/Instruments/InstrumentFactory.d.ts +2 -0
- package/dist/Instruments/InstrumentFactory.d.ts.map +1 -0
- package/dist/Instruments/InstrumentFactory.js +4 -0
- package/dist/Instruments/InstrumentFactory.js.map +1 -0
- package/dist/Instruments/Speciality/DrumSynth.d.ts +11 -0
- package/dist/Instruments/Speciality/DrumSynth.d.ts.map +1 -0
- package/dist/Instruments/Speciality/DrumSynth.js +61 -0
- package/dist/Instruments/Speciality/DrumSynth.js.map +1 -0
- package/dist/Instruments/Speciality/SoundEffectsSynth.d.ts +12 -0
- package/dist/Instruments/Speciality/SoundEffectsSynth.d.ts.map +1 -0
- package/dist/Instruments/Speciality/SoundEffectsSynth.js +27 -0
- package/dist/Instruments/Speciality/SoundEffectsSynth.js.map +1 -0
- package/dist/Instruments/Synthesizer.d.ts +15 -0
- package/dist/Instruments/Synthesizer.d.ts.map +1 -0
- package/dist/Instruments/Synthesizer.js +27 -0
- package/dist/Instruments/Synthesizer.js.map +1 -0
- package/dist/RLO-Player.d.ts +298 -0
- package/dist/RLO-Player.d.ts.map +1 -0
- package/dist/RLO-Player.js +724 -0
- package/dist/RLO-Player.js.map +1 -0
- package/dist/RLO-Transpiler.d.ts +22 -0
- package/dist/RLO-Transpiler.d.ts.map +1 -0
- package/dist/RLO-Transpiler.js +133 -0
- package/dist/RLO-Transpiler.js.map +1 -0
- package/dist/compiler.d.ts +40 -0
- package/dist/compiler.d.ts.map +1 -0
- package/dist/compiler.js +268 -0
- package/dist/compiler.js.map +1 -0
- package/dist/crush.d.ts +9 -0
- package/dist/crush.d.ts.map +1 -0
- package/dist/crush.js +20 -0
- package/dist/crush.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -0
- package/dist/midi-parser.d.ts +10 -0
- package/dist/midi-parser.d.ts.map +1 -0
- package/dist/midi-parser.js +130 -0
- package/dist/midi-parser.js.map +1 -0
- package/dist/rlo-engine.min.js +655 -0
- package/dist/rlo-engine.min.js.map +1 -0
- package/dist/rlo-engine.min.umd.js +2 -0
- package/dist/rlo-engine.min.umd.js.map +1 -0
- package/dist/types.d.ts +16 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/vite.config.d.ts +7 -0
- package/dist/vite.config.d.ts.map +1 -0
- package/dist/vite.config.js +244 -0
- package/dist/vite.config.js.map +1 -0
- package/dist/vite.config.js13k.d.ts +7 -0
- package/dist/vite.config.js13k.d.ts.map +1 -0
- package/dist/vite.config.js13k.js +72 -0
- package/dist/vite.config.js13k.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,cAAc,IAAI,eAAe,EAAE,aAAa,IAAI,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxO,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAGrE,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;AAoBnT,QAAA,MAAM,UAAU,oBAAyC,CAAC;AAE1D,QAAA,MAAM,QAAQ,oBAGZ,CAAC;AAEH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,IAAI,mBAAmB,EAAE,UAAU,IAAI,qBAAqB,EAAE,QAAQ,IAAI,kBAAkB,EAAE,CAAC;AACzM,qBAAa,OAAQ,SAAQ,QAAQ;gBAAe,GAAG,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,gBAAgB,EAAE;CAA4C;AACjJ,qBAAa,cAAe,SAAQ,eAAe;gBAAe,GAAG,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,gBAAgB,EAAE;CAA4C;AAC/J,qBAAa,aAAc,SAAQ,cAAc;gBAAe,GAAG,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,gBAAgB,EAAE;CAA4C"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// AUTO-GENERATED BY VITE CONFIG
|
|
2
|
+
import { RLOCore as BaseCore, RLOMusicPlayer as BaseMusicPlayer, RLOGameEngine as BaseGameEngine, RLOTranspiler, createInstrumentMap, extendInstrumentMap, createDirectMap, SilentSynth } from './RLO-Player.js';
|
|
3
|
+
import { PianoSynth } from './Instruments/Decay/PianoSynth.js';
|
|
4
|
+
import { ChromaticPercussionSynth } from './Instruments/Decay/ChromaticPercussionSynth.js';
|
|
5
|
+
import { OrganSynth } from './Instruments/Analog/OrganSynth.js';
|
|
6
|
+
import { GuitarSynth } from './Instruments/Decay/GuitarSynth.js';
|
|
7
|
+
import { ElectricGuitarSynth } from './Instruments/Decay/ElectricGuitarSynth.js';
|
|
8
|
+
import { BassSynth } from './Instruments/Analog/BassSynth.js';
|
|
9
|
+
import { StringSynth } from './Instruments/Analog/StringSynth.js';
|
|
10
|
+
import { BrassSynth } from './Instruments/Decay/BrassSynth.js';
|
|
11
|
+
import { WoodwindSynth } from './Instruments/Analog/WoodwindSynth.js';
|
|
12
|
+
import { LeadSynth } from './Instruments/Analog/LeadSynth.js';
|
|
13
|
+
import { PadSynth } from './Instruments/Analog/PadSynth.js';
|
|
14
|
+
import { SoundEffectsSynth } from './Instruments/Speciality/SoundEffectsSynth.js';
|
|
15
|
+
import { EthnicSynth } from './Instruments/Decay/EthnicSynth.js';
|
|
16
|
+
import { DrumSynth } from './Instruments/Speciality/DrumSynth.js';
|
|
17
|
+
import { FMSynth } from './Instruments/Analog/FMSynth.js';
|
|
18
|
+
import { AdditiveSynth } from './Instruments/Decay/AdditiveSynth.js';
|
|
19
|
+
import { KarplusSynth } from './Instruments/Decay/KarplusSynth.js';
|
|
20
|
+
import { ReeseBassSynth } from './Instruments/Analog/ReeseBassSynth.js';
|
|
21
|
+
import { FormantSynth } from './Instruments/Analog/FormantSynth.js';
|
|
22
|
+
import { ChiptuneSynth } from './Instruments/Analog/ChiptuneSynth.js';
|
|
23
|
+
import { SlapBassSynth } from './Instruments/Decay/SlapBassSynth.js';
|
|
24
|
+
// Export all synthesizers (including optional ones) for NPM users
|
|
25
|
+
export { PianoSynth, ChromaticPercussionSynth, OrganSynth, GuitarSynth, ElectricGuitarSynth, BassSynth, StringSynth, BrassSynth, WoodwindSynth, LeadSynth, PadSynth, SoundEffectsSynth, EthnicSynth, DrumSynth, FMSynth, AdditiveSynth, KarplusSynth, ReeseBassSynth, FormantSynth, ChiptuneSynth, SlapBassSynth };
|
|
26
|
+
const defaultMapModules = [
|
|
27
|
+
{ synth: new PianoSynth(), start: 0, end: 7 },
|
|
28
|
+
{ synth: new ChromaticPercussionSynth(), start: 8, end: 15 },
|
|
29
|
+
{ synth: new OrganSynth(), start: 16, end: 23 },
|
|
30
|
+
{ synth: new GuitarSynth(), start: 24, end: 26 },
|
|
31
|
+
{ synth: new ElectricGuitarSynth(), start: 27, end: 31 },
|
|
32
|
+
{ synth: new BassSynth(), start: 32, end: 39 },
|
|
33
|
+
{ synth: new StringSynth(), start: 40, end: 55 },
|
|
34
|
+
{ synth: new BrassSynth(), start: 56, end: 71 },
|
|
35
|
+
{ synth: new WoodwindSynth(), start: 72, end: 79 },
|
|
36
|
+
{ synth: new LeadSynth(), start: 83, end: 87 },
|
|
37
|
+
{ synth: new PadSynth(), start: 88, end: 95 },
|
|
38
|
+
{ synth: new SoundEffectsSynth(), start: 96, end: 103 },
|
|
39
|
+
{ synth: new SoundEffectsSynth(), start: 120, end: 127 },
|
|
40
|
+
{ synth: new EthnicSynth(), start: 104, end: 111 },
|
|
41
|
+
{ synth: new DrumSynth(), start: 112, end: 119 },
|
|
42
|
+
{ synth: new DrumSynth(), start: 128, end: 128 },
|
|
43
|
+
];
|
|
44
|
+
const defaultMap = createInstrumentMap(defaultMapModules);
|
|
45
|
+
const retroMap = createInstrumentMap([
|
|
46
|
+
{ synth: new ChiptuneSynth(), start: 0, end: 127 },
|
|
47
|
+
{ synth: new DrumSynth(), start: 128, end: 128 }
|
|
48
|
+
]);
|
|
49
|
+
export { RLOTranspiler, createInstrumentMap, extendInstrumentMap, createDirectMap, SilentSynth, defaultMap as MasterInstrumentMap, defaultMap as StandardInstrumentMap, retroMap as RetroInstrumentMap };
|
|
50
|
+
export class RLOCore extends BaseCore {
|
|
51
|
+
constructor(ctx, customMap) { super(ctx, customMap || defaultMap); }
|
|
52
|
+
}
|
|
53
|
+
export class RLOMusicPlayer extends BaseMusicPlayer {
|
|
54
|
+
constructor(ctx, customMap) { super(ctx, customMap || defaultMap); }
|
|
55
|
+
}
|
|
56
|
+
export class RLOGameEngine extends BaseGameEngine {
|
|
57
|
+
constructor(ctx, customMap) { super(ctx, customMap || defaultMap); }
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { RloData } from "./types.js";
|
|
2
|
+
export interface CompileStats {
|
|
3
|
+
totalTracks: number;
|
|
4
|
+
totalNotes: number;
|
|
5
|
+
midiBytes: number;
|
|
6
|
+
rloBytes: number;
|
|
7
|
+
jsonBytes: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function convertMidiToRlo(midiBuffer: Buffer, noTrim?: boolean): RloData | null;
|
|
10
|
+
//# sourceMappingURL=midi-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"midi-parser.d.ts","sourceRoot":"","sources":["../midi-parser.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAA4B,MAAM,YAAY,CAAC;AAE/D,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,OAAe,GACtB,OAAO,GAAG,IAAI,CA4IhB"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { createRequire } from "module";
|
|
2
|
+
const require = createRequire(import.meta.url);
|
|
3
|
+
const { Midi } = require("@tonejs/midi");
|
|
4
|
+
import { PERCUSSION_INSTRUMENT_ID } from "./types.js";
|
|
5
|
+
const trunc3 = (val) => Math.round(val * 1000) / 1000;
|
|
6
|
+
export function convertMidiToRlo(midiBuffer, noTrim = false) {
|
|
7
|
+
const midi = new Midi(midiBuffer);
|
|
8
|
+
let noteStructs = [];
|
|
9
|
+
let isVelocityFlat = true;
|
|
10
|
+
let firstVelocity = -1;
|
|
11
|
+
midi.tracks.forEach((track) => {
|
|
12
|
+
track.notes.forEach((n) => {
|
|
13
|
+
if (firstVelocity === -1)
|
|
14
|
+
firstVelocity = n.velocity;
|
|
15
|
+
else if (n.velocity !== firstVelocity)
|
|
16
|
+
isVelocityFlat = false;
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
const getCCValueAtTime = (ccArray, time, defaultVal) => {
|
|
20
|
+
if (!ccArray || ccArray.length === 0)
|
|
21
|
+
return defaultVal;
|
|
22
|
+
let left = 0;
|
|
23
|
+
let right = ccArray.length - 1;
|
|
24
|
+
let bestVal = ccArray[0].value;
|
|
25
|
+
while (left <= right) {
|
|
26
|
+
const mid = Math.floor((left + right) / 2);
|
|
27
|
+
if (ccArray[mid].time <= time) {
|
|
28
|
+
bestVal = ccArray[mid].value;
|
|
29
|
+
left = mid + 1;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
right = mid - 1;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return bestVal;
|
|
36
|
+
};
|
|
37
|
+
midi.tracks.forEach((track) => {
|
|
38
|
+
const isDrum = track.channel === 9;
|
|
39
|
+
const instrumentId = isDrum
|
|
40
|
+
? PERCUSSION_INSTRUMENT_ID
|
|
41
|
+
: track.instrument.number;
|
|
42
|
+
const sustains = track.controlChanges[64];
|
|
43
|
+
const volumes = track.controlChanges[7];
|
|
44
|
+
const expressions = track.controlChanges[11];
|
|
45
|
+
track.notes.forEach((n) => {
|
|
46
|
+
let duration = n.duration;
|
|
47
|
+
if (sustains && instrumentId !== PERCUSSION_INSTRUMENT_ID) {
|
|
48
|
+
const nextSustainOff = sustains.find((cc) => cc.time > n.time && cc.value < 64);
|
|
49
|
+
if (nextSustainOff && nextSustainOff.time > n.time + duration) {
|
|
50
|
+
duration = nextSustainOff.time - n.time;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
duration = Math.min(duration, 5.0);
|
|
54
|
+
duration = Math.max(0.01, duration - 0.02);
|
|
55
|
+
const volCC = getCCValueAtTime(volumes, n.time, 1.0);
|
|
56
|
+
const expCC = getCCValueAtTime(expressions, n.time, 1.0);
|
|
57
|
+
let velocity = n.velocity * volCC * expCC;
|
|
58
|
+
if (isVelocityFlat) {
|
|
59
|
+
velocity = Math.max(0.1, Math.min(1.0, velocity + (Math.random() * 0.1 - 0.05)));
|
|
60
|
+
}
|
|
61
|
+
let freq = Math.round(440 * Math.pow(2, (n.midi - 69) / 12) * 100) / 100;
|
|
62
|
+
if (isDrum) {
|
|
63
|
+
if (n.midi === 35 || n.midi === 36)
|
|
64
|
+
freq = 40;
|
|
65
|
+
else if (n.midi === 38 || n.midi === 40)
|
|
66
|
+
freq = 80;
|
|
67
|
+
else if (n.midi === 42 || n.midi === 44)
|
|
68
|
+
freq = 100;
|
|
69
|
+
else if (n.midi === 46)
|
|
70
|
+
freq = 120;
|
|
71
|
+
else if (n.midi === 49 ||
|
|
72
|
+
n.midi === 51 ||
|
|
73
|
+
n.midi === 52 ||
|
|
74
|
+
n.midi === 53 ||
|
|
75
|
+
n.midi === 55 ||
|
|
76
|
+
n.midi === 57)
|
|
77
|
+
freq = 150;
|
|
78
|
+
else if (n.midi === 56)
|
|
79
|
+
freq = 800;
|
|
80
|
+
else
|
|
81
|
+
freq = 60;
|
|
82
|
+
}
|
|
83
|
+
noteStructs.push({
|
|
84
|
+
f: freq,
|
|
85
|
+
t: trunc3(n.time),
|
|
86
|
+
d: trunc3(duration),
|
|
87
|
+
v: Math.round(velocity * 100) / 100,
|
|
88
|
+
i: instrumentId,
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
if (noteStructs.length === 0)
|
|
93
|
+
return null;
|
|
94
|
+
noteStructs.sort((a, b) => {
|
|
95
|
+
if (Math.abs(a.t - b.t) > 0.001)
|
|
96
|
+
return a.t - b.t;
|
|
97
|
+
if (a.f !== b.f)
|
|
98
|
+
return a.f - b.f;
|
|
99
|
+
return a.i - b.i;
|
|
100
|
+
});
|
|
101
|
+
const uniqueNotes = [];
|
|
102
|
+
noteStructs.forEach((n) => {
|
|
103
|
+
if (uniqueNotes.length > 0) {
|
|
104
|
+
const last = uniqueNotes[uniqueNotes.length - 1];
|
|
105
|
+
if (Math.abs(last.t - n.t) < 0.005 && last.f === n.f && last.i === n.i) {
|
|
106
|
+
last.v = Math.max(last.v, n.v);
|
|
107
|
+
last.d = Math.max(last.d, n.d);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
uniqueNotes.push(n);
|
|
112
|
+
});
|
|
113
|
+
noteStructs = uniqueNotes;
|
|
114
|
+
let finalDuration = midi.duration;
|
|
115
|
+
const firstNoteTime = noteStructs[0].t;
|
|
116
|
+
if (!noTrim && firstNoteTime > 0) {
|
|
117
|
+
noteStructs.forEach((n) => (n.t = trunc3(n.t - firstNoteTime)));
|
|
118
|
+
finalDuration = Math.max(0, finalDuration - firstNoteTime);
|
|
119
|
+
}
|
|
120
|
+
let maxTimeSecs = 0;
|
|
121
|
+
const flatNotes = [];
|
|
122
|
+
noteStructs.forEach((n) => {
|
|
123
|
+
flatNotes.push(n.f, n.t, n.d, n.v, n.i);
|
|
124
|
+
if (n.t + n.d > maxTimeSecs)
|
|
125
|
+
maxTimeSecs = n.t + n.d;
|
|
126
|
+
});
|
|
127
|
+
finalDuration = Math.max(finalDuration, Math.ceil(maxTimeSecs));
|
|
128
|
+
return { durationSecs: trunc3(finalDuration), notes: flatNotes };
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=midi-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"midi-parser.js","sourceRoot":"","sources":["../midi-parser.ts"],"names":[],"mappings":"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"}
|