rlo-engine 1.0.3 → 1.1.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 +15 -4
- package/dist/Core/AudioMath.d.ts +29 -0
- package/dist/Core/AudioMath.d.ts.map +1 -0
- package/dist/Core/AudioMath.js +64 -0
- package/dist/Core/AudioMath.js.map +1 -0
- package/dist/Core/InstrumentMap.d.ts +36 -0
- package/dist/Core/InstrumentMap.d.ts.map +1 -0
- package/dist/Core/InstrumentMap.js +62 -0
- package/dist/Core/InstrumentMap.js.map +1 -0
- package/dist/Core/RLOCore.d.ts +49 -0
- package/dist/Core/RLOCore.d.ts.map +1 -0
- package/dist/Core/RLOCore.js +188 -0
- package/dist/Core/RLOCore.js.map +1 -0
- package/dist/Core/SequenceBuilder.d.ts +23 -0
- package/dist/Core/SequenceBuilder.d.ts.map +1 -0
- package/dist/Core/SequenceBuilder.js +31 -0
- package/dist/Core/SequenceBuilder.js.map +1 -0
- package/dist/Instruments/Analog/AnalogSynthBase.d.ts +17 -7
- package/dist/Instruments/Analog/AnalogSynthBase.d.ts.map +1 -1
- package/dist/Instruments/Analog/AnalogSynthBase.js +27 -16
- package/dist/Instruments/Analog/AnalogSynthBase.js.map +1 -1
- package/dist/Instruments/Analog/BassSynth.d.ts +12 -5
- package/dist/Instruments/Analog/BassSynth.d.ts.map +1 -1
- package/dist/Instruments/Analog/BassSynth.js +17 -10
- package/dist/Instruments/Analog/BassSynth.js.map +1 -1
- package/dist/Instruments/Analog/ChiptuneSynth.d.ts +11 -4
- package/dist/Instruments/Analog/ChiptuneSynth.d.ts.map +1 -1
- package/dist/Instruments/Analog/ChiptuneSynth.js +12 -5
- package/dist/Instruments/Analog/ChiptuneSynth.js.map +1 -1
- package/dist/Instruments/Analog/FMSynth.d.ts +11 -4
- package/dist/Instruments/Analog/FMSynth.d.ts.map +1 -1
- package/dist/Instruments/Analog/FMSynth.js +14 -7
- package/dist/Instruments/Analog/FMSynth.js.map +1 -1
- package/dist/Instruments/Analog/FormantSynth.d.ts +11 -4
- package/dist/Instruments/Analog/FormantSynth.d.ts.map +1 -1
- package/dist/Instruments/Analog/FormantSynth.js +12 -5
- package/dist/Instruments/Analog/FormantSynth.js.map +1 -1
- package/dist/Instruments/Analog/LeadSynth.d.ts +11 -4
- package/dist/Instruments/Analog/LeadSynth.d.ts.map +1 -1
- package/dist/Instruments/Analog/LeadSynth.js +14 -7
- package/dist/Instruments/Analog/LeadSynth.js.map +1 -1
- package/dist/Instruments/Analog/OrganSynth.d.ts +11 -4
- package/dist/Instruments/Analog/OrganSynth.d.ts.map +1 -1
- package/dist/Instruments/Analog/OrganSynth.js +17 -10
- package/dist/Instruments/Analog/OrganSynth.js.map +1 -1
- package/dist/Instruments/Analog/PadSynth.js +7 -7
- package/dist/Instruments/Analog/PadSynth.js.map +1 -1
- package/dist/Instruments/Analog/ReeseBassSynth.d.ts +11 -4
- package/dist/Instruments/Analog/ReeseBassSynth.d.ts.map +1 -1
- package/dist/Instruments/Analog/ReeseBassSynth.js +13 -6
- package/dist/Instruments/Analog/ReeseBassSynth.js.map +1 -1
- package/dist/Instruments/Analog/StringSynth.js +4 -4
- package/dist/Instruments/Analog/StringSynth.js.map +1 -1
- package/dist/Instruments/Analog/WoodwindSynth.d.ts +11 -4
- package/dist/Instruments/Analog/WoodwindSynth.d.ts.map +1 -1
- package/dist/Instruments/Analog/WoodwindSynth.js +19 -12
- package/dist/Instruments/Analog/WoodwindSynth.js.map +1 -1
- package/dist/Instruments/CoreSynthBase.d.ts +31 -24
- package/dist/Instruments/CoreSynthBase.d.ts.map +1 -1
- package/dist/Instruments/CoreSynthBase.js +53 -34
- package/dist/Instruments/CoreSynthBase.js.map +1 -1
- package/dist/Instruments/Decay/AdditiveSynth.d.ts +12 -5
- package/dist/Instruments/Decay/AdditiveSynth.d.ts.map +1 -1
- package/dist/Instruments/Decay/AdditiveSynth.js +9 -2
- package/dist/Instruments/Decay/AdditiveSynth.js.map +1 -1
- package/dist/Instruments/Decay/BrassSynth.d.ts +11 -4
- package/dist/Instruments/Decay/BrassSynth.d.ts.map +1 -1
- package/dist/Instruments/Decay/BrassSynth.js +22 -15
- package/dist/Instruments/Decay/BrassSynth.js.map +1 -1
- package/dist/Instruments/Decay/ChromaticPercussionSynth.d.ts +12 -5
- package/dist/Instruments/Decay/ChromaticPercussionSynth.d.ts.map +1 -1
- package/dist/Instruments/Decay/ChromaticPercussionSynth.js +16 -9
- package/dist/Instruments/Decay/ChromaticPercussionSynth.js.map +1 -1
- package/dist/Instruments/Decay/DecaySynthBase.d.ts +14 -8
- package/dist/Instruments/Decay/DecaySynthBase.d.ts.map +1 -1
- package/dist/Instruments/Decay/DecaySynthBase.js +22 -15
- package/dist/Instruments/Decay/DecaySynthBase.js.map +1 -1
- package/dist/Instruments/Decay/ElectricGuitarSynth.d.ts +12 -5
- package/dist/Instruments/Decay/ElectricGuitarSynth.d.ts.map +1 -1
- package/dist/Instruments/Decay/ElectricGuitarSynth.js +19 -12
- package/dist/Instruments/Decay/ElectricGuitarSynth.js.map +1 -1
- package/dist/Instruments/Decay/EthnicSynth.d.ts +12 -5
- package/dist/Instruments/Decay/EthnicSynth.d.ts.map +1 -1
- package/dist/Instruments/Decay/EthnicSynth.js +13 -6
- package/dist/Instruments/Decay/EthnicSynth.js.map +1 -1
- package/dist/Instruments/Decay/GuitarSynth.d.ts +12 -5
- package/dist/Instruments/Decay/GuitarSynth.d.ts.map +1 -1
- package/dist/Instruments/Decay/GuitarSynth.js +14 -7
- package/dist/Instruments/Decay/GuitarSynth.js.map +1 -1
- package/dist/Instruments/Decay/KarplusSynth.d.ts +7 -0
- package/dist/Instruments/Decay/KarplusSynth.d.ts.map +1 -1
- package/dist/Instruments/Decay/KarplusSynth.js +16 -8
- package/dist/Instruments/Decay/KarplusSynth.js.map +1 -1
- package/dist/Instruments/Decay/PianoSynth.d.ts +12 -5
- package/dist/Instruments/Decay/PianoSynth.d.ts.map +1 -1
- package/dist/Instruments/Decay/PianoSynth.js +19 -12
- package/dist/Instruments/Decay/PianoSynth.js.map +1 -1
- package/dist/Instruments/Decay/SlapBassSynth.d.ts +12 -5
- package/dist/Instruments/Decay/SlapBassSynth.d.ts.map +1 -1
- package/dist/Instruments/Decay/SlapBassSynth.js +13 -6
- package/dist/Instruments/Decay/SlapBassSynth.js.map +1 -1
- package/dist/Instruments/ISynthInstrument.d.ts +6 -0
- package/dist/Instruments/ISynthInstrument.d.ts.map +1 -1
- package/dist/Instruments/Speciality/DrumSynth.d.ts +7 -0
- package/dist/Instruments/Speciality/DrumSynth.d.ts.map +1 -1
- package/dist/Instruments/Speciality/DrumSynth.js +30 -21
- package/dist/Instruments/Speciality/DrumSynth.js.map +1 -1
- package/dist/Instruments/Speciality/SoundEffectsSynth.d.ts +7 -0
- package/dist/Instruments/Speciality/SoundEffectsSynth.d.ts.map +1 -1
- package/dist/Instruments/Speciality/SoundEffectsSynth.js +20 -12
- package/dist/Instruments/Speciality/SoundEffectsSynth.js.map +1 -1
- package/dist/Instruments/Synthesizer.d.ts +5 -0
- package/dist/Instruments/Synthesizer.d.ts.map +1 -1
- package/dist/Instruments/Synthesizer.js +7 -1
- package/dist/Instruments/Synthesizer.js.map +1 -1
- package/dist/Players/RLOGameEngine.d.ts +35 -0
- package/dist/Players/RLOGameEngine.d.ts.map +1 -0
- package/dist/Players/RLOGameEngine.js +98 -0
- package/dist/Players/RLOGameEngine.js.map +1 -0
- package/dist/Players/RLOMusicPlayer.d.ts +35 -0
- package/dist/Players/RLOMusicPlayer.d.ts.map +1 -0
- package/dist/Players/RLOMusicPlayer.js +167 -0
- package/dist/Players/RLOMusicPlayer.js.map +1 -0
- package/dist/RLO-Transpiler.d.ts +37 -15
- package/dist/RLO-Transpiler.d.ts.map +1 -1
- package/dist/RLO-Transpiler.js +139 -117
- package/dist/RLO-Transpiler.js.map +1 -1
- package/dist/compiler.d.ts +50 -31
- package/dist/compiler.d.ts.map +1 -1
- package/dist/compiler.js +165 -230
- package/dist/compiler.js.map +1 -1
- package/dist/crush.d.ts +1 -5
- package/dist/crush.d.ts.map +1 -1
- package/dist/crush.js +10 -3
- package/dist/crush.js.map +1 -1
- package/dist/index.d.ts +15 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -3
- package/dist/index.js.map +1 -1
- package/dist/midi-parser.d.ts +14 -0
- package/dist/midi-parser.d.ts.map +1 -1
- package/dist/midi-parser.js +21 -0
- package/dist/midi-parser.js.map +1 -1
- package/dist/rlo-engine.min.js +441 -439
- package/dist/rlo-engine.min.js.map +1 -1
- package/dist/rlo-engine.min.umd.js +1 -1
- package/dist/rlo-engine.min.umd.js.map +1 -1
- package/dist/types.d.ts +21 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -1
- package/dist/vite.config.d.ts.map +1 -1
- package/dist/vite.config.js +16 -3
- package/dist/vite.config.js.map +1 -1
- package/dist/vite.config.js13k.d.ts.map +1 -1
- package/dist/vite.config.js13k.js +1 -0
- package/dist/vite.config.js13k.js.map +1 -1
- package/package.json +1 -1
- package/dist/Instruments/InstrumentFactory.d.ts +0 -2
- package/dist/Instruments/InstrumentFactory.d.ts.map +0 -1
- package/dist/Instruments/InstrumentFactory.js +0 -4
- package/dist/Instruments/InstrumentFactory.js.map +0 -1
- package/dist/RLO-Player.d.ts +0 -298
- package/dist/RLO-Player.d.ts.map +0 -1
- package/dist/RLO-Player.js +0 -724
- package/dist/RLO-Player.js.map +0 -1
|
@@ -1,30 +1,41 @@
|
|
|
1
|
-
import { CoreSynthBase } from "../CoreSynthBase.js";
|
|
1
|
+
import { CoreSynthBase, hasStrictGC } from "../CoreSynthBase.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Synthesizer instrument implementation.
|
|
4
|
+
*
|
|
5
|
+
* @reason Acoustic Design:
|
|
6
|
+
* Encapsulates the specific Web Audio node routing and ADSR parameters
|
|
7
|
+
* required to physically model this instrument within the 13KB limit.
|
|
8
|
+
*
|
|
9
|
+
* @reason Separation of Sustained vs Decaying Physics:
|
|
10
|
+
* Synthesizers like an Organ will sustain at peak volume infinitely as long as the key is held,
|
|
11
|
+
* whereas a Piano will physically decay to silence even if the key remains held down.
|
|
12
|
+
* This base class encapsulates the mathematical ADSR envelope logic specifically for
|
|
13
|
+
* infinite-sustain physics, ensuring derived classes only need to define the timbre (Oscillators/Filters).
|
|
5
14
|
*/
|
|
6
15
|
export class AnalogSynthBase extends CoreSynthBase {
|
|
7
16
|
constructor() {
|
|
8
17
|
super(...arguments);
|
|
9
|
-
this.
|
|
18
|
+
this._envelopeConfig = { _peakVelocity: 0.5, _attackTimeSeconds: 0.05, _releaseTimeSeconds: 0.1, _maxDurationSeconds: 10.0 };
|
|
10
19
|
}
|
|
11
20
|
_playNote(ctx, masterGain, time, freq, duration, velocity) {
|
|
12
21
|
const gain = ctx.createGain();
|
|
13
|
-
const c = this.
|
|
14
|
-
const peakVol = Math.max(0.001, velocity * c.
|
|
15
|
-
|
|
16
|
-
this.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
this.
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
+
const c = this._getEnvelopeConfig(duration);
|
|
23
|
+
const peakVol = Math.max(0.001, velocity * c._peakVelocity);
|
|
24
|
+
const safeDuration = c._maxDurationSeconds ? Math.min(duration, c._maxDurationSeconds) : duration;
|
|
25
|
+
this._setValueAtTime(gain.gain, 0, time);
|
|
26
|
+
this._linearRampToValue(gain.gain, peakVol, time + c._attackTimeSeconds);
|
|
27
|
+
const sustainTime = Math.max(c._attackTimeSeconds, safeDuration);
|
|
28
|
+
this._setValueAtTime(gain.gain, peakVol, time + sustainTime);
|
|
29
|
+
this._linearRampToValue(gain.gain, 0.001, time + sustainTime + c._releaseTimeSeconds);
|
|
30
|
+
const stopTime = time + sustainTime + c._releaseTimeSeconds;
|
|
31
|
+
const output = this._setupSynthesis(ctx, gain, time, freq, velocity, sustainTime, c._releaseTimeSeconds, stopTime);
|
|
22
32
|
const finalNode = output || gain;
|
|
23
33
|
finalNode.connect(masterGain);
|
|
24
|
-
|
|
34
|
+
if (hasStrictGC)
|
|
35
|
+
this._scheduleNodeDisposal(ctx, time, stopTime + 0.1, finalNode);
|
|
25
36
|
}
|
|
26
|
-
|
|
27
|
-
return this.
|
|
37
|
+
_getEnvelopeConfig(_decayTimeSeconds) {
|
|
38
|
+
return this._envelopeConfig;
|
|
28
39
|
}
|
|
29
40
|
}
|
|
30
41
|
//# sourceMappingURL=AnalogSynthBase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalogSynthBase.js","sourceRoot":"","sources":["../../../Instruments/Analog/AnalogSynthBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"AnalogSynthBase.js","sourceRoot":"","sources":["../../../Instruments/Analog/AnalogSynthBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIjE;;;;;;;;;;;;GAYG;AACH,MAAM,OAAgB,eAAgB,SAAQ,aAAa;IAA3D;;QACY,oBAAe,GAAc,EAAE,aAAa,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;IA4D/I,CAAC;IA1DQ,SAAS,CACd,GAAiB,EACjB,UAAoB,EACpB,IAAY,EACZ,IAAY,EACZ,QAAgB,EAChB,QAAgB;QAEhB,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;QAE9B,MAAM,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAElG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAEzE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;QACjE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,WAAW,CAAC,CAAC;QAC7D,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,WAAW,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC;QAEtF,MAAM,QAAQ,GAAG,IAAI,GAAG,WAAW,GAAG,CAAC,CAAC,mBAAmB,CAAC;QAE5D,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CACjC,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,CAAC,CAAC,mBAAmB,EACrB,QAAQ,CACT,CAAC;QAEF,MAAM,SAAS,GAAG,MAAM,IAAI,IAAI,CAAC;QACjC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9B,IAAI,WAAW;YAAE,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,GAAG,GAAG,EAAE,SAAS,CAAC,CAAC;IACpF,CAAC;IAES,kBAAkB,CAAC,iBAAyB;QACpD,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;CAiBF"}
|
|
@@ -2,12 +2,19 @@ import { DecaySynthBase } from "../Decay/DecaySynthBase.js";
|
|
|
2
2
|
/**
|
|
3
3
|
* Synthesizer strategy for deep Bass instruments using sawtooth waves.
|
|
4
4
|
*/
|
|
5
|
+
/**
|
|
6
|
+
* Synthesizes a deep, resonant bass tone using a lowpass-filtered sawtooth wave. Perfect for foundational low-end frequencies.
|
|
7
|
+
*
|
|
8
|
+
* @reason Acoustic Design:
|
|
9
|
+
* Encapsulates the specific Web Audio node routing and ADSR parameters
|
|
10
|
+
* required to physically model this instrument within the 13KB limit.
|
|
11
|
+
*/
|
|
5
12
|
export declare class BassSynth extends DecaySynthBase {
|
|
6
|
-
protected
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
13
|
+
protected _envelopeConfig: {
|
|
14
|
+
_peakVelocity: number;
|
|
15
|
+
_attackTimeSeconds: number;
|
|
16
|
+
_decayTimeSeconds: number;
|
|
17
|
+
_maxDurationSeconds: number;
|
|
11
18
|
};
|
|
12
19
|
protected _setupSynthesis(ctx: AudioContext, masterGain: GainNode, gain: GainNode, time: number, freq: number, velocity: number, safeDuration: number, stopTime: number): AudioNode | void;
|
|
13
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BassSynth.d.ts","sourceRoot":"","sources":["../../../Instruments/Analog/BassSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG5D;;GAEG;AACH,qBAAa,SAAU,SAAQ,cAAc;IAC3C,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"BassSynth.d.ts","sourceRoot":"","sources":["../../../Instruments/Analog/BassSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG5D;;GAEG;AACH;;;;;;GAMG;AACH,qBAAa,SAAU,SAAQ,cAAc;IAC3C,SAAS,CAAC,eAAe;;;;;MAAsG;IAE/H,SAAS,CAAC,eAAe,CACvB,GAAG,EAAE,YAAY,EACjB,UAAU,EAAE,QAAQ,EACpB,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,SAAS,GAAG,IAAI;CA0BpB"}
|
|
@@ -2,23 +2,30 @@ import { DecaySynthBase } from "../Decay/DecaySynthBase.js";
|
|
|
2
2
|
/**
|
|
3
3
|
* Synthesizer strategy for deep Bass instruments using sawtooth waves.
|
|
4
4
|
*/
|
|
5
|
+
/**
|
|
6
|
+
* Synthesizes a deep, resonant bass tone using a lowpass-filtered sawtooth wave. Perfect for foundational low-end frequencies.
|
|
7
|
+
*
|
|
8
|
+
* @reason Acoustic Design:
|
|
9
|
+
* Encapsulates the specific Web Audio node routing and ADSR parameters
|
|
10
|
+
* required to physically model this instrument within the 13KB limit.
|
|
11
|
+
*/
|
|
5
12
|
export class BassSynth extends DecaySynthBase {
|
|
6
13
|
constructor() {
|
|
7
14
|
super(...arguments);
|
|
8
|
-
this.
|
|
15
|
+
this._envelopeConfig = { _peakVelocity: 0.8, _attackTimeSeconds: 0.05, _decayTimeSeconds: 0.1, _maxDurationSeconds: 4.0 };
|
|
9
16
|
}
|
|
10
17
|
_setupSynthesis(ctx, masterGain, gain, time, freq, velocity, safeDuration, stopTime) {
|
|
11
18
|
/** Deep envelope sweep for punchy, muffled bass attack. Capped safely below Nyquist. */
|
|
12
|
-
const filter = this.
|
|
13
|
-
const osc = this.
|
|
14
|
-
this.
|
|
15
|
-
this.
|
|
16
|
-
const subGain = this.
|
|
17
|
-
const subOsc = this.
|
|
18
|
-
this.
|
|
19
|
-
this.
|
|
19
|
+
const filter = this._createFilterSweep(ctx, "lowpass", 300 + velocity * 500, 100, time, safeDuration);
|
|
20
|
+
const osc = this._createOscillator(ctx, "sawtooth", 0, gain);
|
|
21
|
+
this._setValueAtTime(osc.frequency, freq * 0.92, time);
|
|
22
|
+
this._exponentialRampToValue(osc.frequency, freq, time + 0.04);
|
|
23
|
+
const subGain = this._createGain(ctx, 0.6, gain);
|
|
24
|
+
const subOsc = this._createOscillator(ctx, "sine", 0, subGain);
|
|
25
|
+
this._setValueAtTime(subOsc.frequency, (freq / 2) * 0.92, time);
|
|
26
|
+
this._exponentialRampToValue(subOsc.frequency, freq / 2, time + 0.04);
|
|
20
27
|
gain.connect(filter);
|
|
21
|
-
this.
|
|
28
|
+
this._scheduleNodeStartStop(time, stopTime, osc, subOsc);
|
|
22
29
|
return filter;
|
|
23
30
|
}
|
|
24
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BassSynth.js","sourceRoot":"","sources":["../../../Instruments/Analog/BassSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG5D;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,cAAc;IAA7C;;QACY,
|
|
1
|
+
{"version":3,"file":"BassSynth.js","sourceRoot":"","sources":["../../../Instruments/Analog/BassSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG5D;;GAEG;AACH;;;;;;GAMG;AACH,MAAM,OAAO,SAAU,SAAQ,cAAc;IAA7C;;QACY,oBAAe,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,mBAAmB,EAAE,GAAG,EAAE,CAAC;IAqCjI,CAAC;IAnCW,eAAe,CACvB,GAAiB,EACjB,UAAoB,EACpB,IAAc,EACd,IAAY,EACZ,IAAY,EACZ,QAAgB,EAChB,YAAoB,EACpB,QAAgB;QAEhB,wFAAwF;QACxF,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CACpC,GAAG,EACH,SAAS,EACT,GAAG,GAAG,QAAQ,GAAG,GAAG,EACpB,GAAG,EACH,IAAI,EACJ,YAAY,CACb,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;QAE/D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/D,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;QAChE,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;QAEtE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAErB,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAEzD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -3,11 +3,18 @@ import { AnalogSynthBase } from "./AnalogSynthBase.js";
|
|
|
3
3
|
* Synthesizer strategy for 8-bit Chiptune sounds.
|
|
4
4
|
* Uses a raw square wave with a rapid pitch-drop "blip" attack.
|
|
5
5
|
*/
|
|
6
|
+
/**
|
|
7
|
+
* Generates retro 8-bit style square waves, ideal for recreating classic video game soundtracks.
|
|
8
|
+
*
|
|
9
|
+
* @reason Acoustic Design:
|
|
10
|
+
* Encapsulates the specific Web Audio node routing and ADSR parameters
|
|
11
|
+
* required to physically model this instrument within the 13KB limit.
|
|
12
|
+
*/
|
|
6
13
|
export declare class ChiptuneSynth extends AnalogSynthBase {
|
|
7
|
-
protected
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
14
|
+
protected _envelopeConfig: {
|
|
15
|
+
_peakVelocity: number;
|
|
16
|
+
_attackTimeSeconds: number;
|
|
17
|
+
_releaseTimeSeconds: number;
|
|
11
18
|
};
|
|
12
19
|
protected _setupSynthesis(ctx: AudioContext, gain: GainNode, time: number, freq: number, velocity: number, sustainTime: number, releaseTime: number, stopTime: number): AudioNode | void;
|
|
13
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChiptuneSynth.d.ts","sourceRoot":"","sources":["../../../Instruments/Analog/ChiptuneSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAa,MAAM,sBAAsB,CAAC;AAGlE;;;GAGG;AACH,qBAAa,aAAc,SAAQ,eAAe;IAChD,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"ChiptuneSynth.d.ts","sourceRoot":"","sources":["../../../Instruments/Analog/ChiptuneSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAa,MAAM,sBAAsB,CAAC;AAGlE;;;GAGG;AACH;;;;;;GAMG;AACH,qBAAa,aAAc,SAAQ,eAAe;IAChD,SAAS,CAAC,eAAe;;;;MAAgF;IAEzG,SAAS,CAAC,eAAe,CACvB,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,SAAS,GAAG,IAAI;CASpB"}
|
|
@@ -3,17 +3,24 @@ import { AnalogSynthBase } from "./AnalogSynthBase.js";
|
|
|
3
3
|
* Synthesizer strategy for 8-bit Chiptune sounds.
|
|
4
4
|
* Uses a raw square wave with a rapid pitch-drop "blip" attack.
|
|
5
5
|
*/
|
|
6
|
+
/**
|
|
7
|
+
* Generates retro 8-bit style square waves, ideal for recreating classic video game soundtracks.
|
|
8
|
+
*
|
|
9
|
+
* @reason Acoustic Design:
|
|
10
|
+
* Encapsulates the specific Web Audio node routing and ADSR parameters
|
|
11
|
+
* required to physically model this instrument within the 13KB limit.
|
|
12
|
+
*/
|
|
6
13
|
export class ChiptuneSynth extends AnalogSynthBase {
|
|
7
14
|
constructor() {
|
|
8
15
|
super(...arguments);
|
|
9
|
-
this.
|
|
16
|
+
this._envelopeConfig = { _peakVelocity: 0.4, _attackTimeSeconds: 0.005, _releaseTimeSeconds: 0.05 };
|
|
10
17
|
}
|
|
11
18
|
_setupSynthesis(ctx, gain, time, freq, velocity, sustainTime, releaseTime, stopTime) {
|
|
12
|
-
const osc = this.
|
|
19
|
+
const osc = this._createOscillator(ctx, "square", 0, gain);
|
|
13
20
|
/** Classic tracker "blip" attack: starts one octave higher for a fraction of a second */
|
|
14
|
-
this.
|
|
15
|
-
this.
|
|
16
|
-
this.
|
|
21
|
+
this._setValueAtTime(osc.frequency, freq * 2, time);
|
|
22
|
+
this._setValueAtTime(osc.frequency, freq, time + 0.02);
|
|
23
|
+
this._scheduleNodeStartStop(time, stopTime, osc);
|
|
17
24
|
}
|
|
18
25
|
}
|
|
19
26
|
//# sourceMappingURL=ChiptuneSynth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChiptuneSynth.js","sourceRoot":"","sources":["../../../Instruments/Analog/ChiptuneSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAa,MAAM,sBAAsB,CAAC;AAGlE;;;GAGG;AACH,MAAM,OAAO,aAAc,SAAQ,eAAe;IAAlD;;QACY,
|
|
1
|
+
{"version":3,"file":"ChiptuneSynth.js","sourceRoot":"","sources":["../../../Instruments/Analog/ChiptuneSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAa,MAAM,sBAAsB,CAAC;AAGlE;;;GAGG;AACH;;;;;;GAMG;AACH,MAAM,OAAO,aAAc,SAAQ,eAAe;IAAlD;;QACY,oBAAe,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;IAoB3G,CAAC;IAlBW,eAAe,CACvB,GAAiB,EACjB,IAAc,EACd,IAAY,EACZ,IAAY,EACZ,QAAgB,EAChB,WAAmB,EACnB,WAAmB,EACnB,QAAgB;QAEhB,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAE3D,yFAAyF;QACzF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;QAEvD,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC;CACF"}
|
|
@@ -4,11 +4,18 @@ import { AnalogSynthBase } from "./AnalogSynthBase.js";
|
|
|
4
4
|
* Modulates a carrier sine wave with another sine wave to create glassy,
|
|
5
5
|
* metallic overtones common in 1980s Electric Pianos and Bells.
|
|
6
6
|
*/
|
|
7
|
+
/**
|
|
8
|
+
* Uses Frequency Modulation (FM) to create complex metallic or bell-like timbres by modulating the phase of one oscillator with another.
|
|
9
|
+
*
|
|
10
|
+
* @reason Acoustic Design:
|
|
11
|
+
* Encapsulates the specific Web Audio node routing and ADSR parameters
|
|
12
|
+
* required to physically model this instrument within the 13KB limit.
|
|
13
|
+
*/
|
|
7
14
|
export declare class FMSynth extends AnalogSynthBase {
|
|
8
|
-
protected
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
15
|
+
protected _envelopeConfig: {
|
|
16
|
+
_peakVelocity: number;
|
|
17
|
+
_attackTimeSeconds: number;
|
|
18
|
+
_releaseTimeSeconds: number;
|
|
12
19
|
};
|
|
13
20
|
protected _setupSynthesis(ctx: AudioContext, gain: GainNode, time: number, freq: number, velocity: number, sustainTime: number, releaseTime: number, stopTime: number): AudioNode | void;
|
|
14
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FMSynth.d.ts","sourceRoot":"","sources":["../../../Instruments/Analog/FMSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAa,MAAM,sBAAsB,CAAC;AAGlE;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,eAAe;IAC1C,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"FMSynth.d.ts","sourceRoot":"","sources":["../../../Instruments/Analog/FMSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAa,MAAM,sBAAsB,CAAC;AAGlE;;;;GAIG;AACH;;;;;;GAMG;AACH,qBAAa,OAAQ,SAAQ,eAAe;IAC1C,SAAS,CAAC,eAAe;;;;MAA8E;IAEvG,SAAS,CAAC,eAAe,CACvB,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,SAAS,GAAG,IAAI;CAcpB"}
|
|
@@ -4,20 +4,27 @@ import { AnalogSynthBase } from "./AnalogSynthBase.js";
|
|
|
4
4
|
* Modulates a carrier sine wave with another sine wave to create glassy,
|
|
5
5
|
* metallic overtones common in 1980s Electric Pianos and Bells.
|
|
6
6
|
*/
|
|
7
|
+
/**
|
|
8
|
+
* Uses Frequency Modulation (FM) to create complex metallic or bell-like timbres by modulating the phase of one oscillator with another.
|
|
9
|
+
*
|
|
10
|
+
* @reason Acoustic Design:
|
|
11
|
+
* Encapsulates the specific Web Audio node routing and ADSR parameters
|
|
12
|
+
* required to physically model this instrument within the 13KB limit.
|
|
13
|
+
*/
|
|
7
14
|
export class FMSynth extends AnalogSynthBase {
|
|
8
15
|
constructor() {
|
|
9
16
|
super(...arguments);
|
|
10
|
-
this.
|
|
17
|
+
this._envelopeConfig = { _peakVelocity: 0.6, _attackTimeSeconds: 0.01, _releaseTimeSeconds: 0.1 };
|
|
11
18
|
}
|
|
12
19
|
_setupSynthesis(ctx, gain, time, freq, velocity, sustainTime, releaseTime, stopTime) {
|
|
13
|
-
const carrier = this.
|
|
20
|
+
const carrier = this._createOscillator(ctx, "sine", freq, gain);
|
|
14
21
|
const modFreq = freq * 2; // 2:1 harmonic ratio for bell/epiano overtones
|
|
15
22
|
const modDepth = modFreq * 4; // Modulation index (brightness)
|
|
16
|
-
const modGain = this.
|
|
17
|
-
this.
|
|
18
|
-
this.
|
|
19
|
-
const modulator = this.
|
|
20
|
-
this.
|
|
23
|
+
const modGain = this._createGain(ctx, 0, carrier.frequency);
|
|
24
|
+
this._setValueAtTime(modGain.gain, modDepth * velocity, time);
|
|
25
|
+
this._exponentialRampToValue(modGain.gain, 0.01, time + sustainTime); // Decay the harshness over time for a plucked feel
|
|
26
|
+
const modulator = this._createOscillator(ctx, "sine", modFreq, modGain);
|
|
27
|
+
this._scheduleNodeStartStop(time, stopTime, carrier, modulator);
|
|
21
28
|
}
|
|
22
29
|
}
|
|
23
30
|
//# sourceMappingURL=FMSynth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FMSynth.js","sourceRoot":"","sources":["../../../Instruments/Analog/FMSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAa,MAAM,sBAAsB,CAAC;AAGlE;;;;GAIG;AACH,MAAM,OAAO,OAAQ,SAAQ,eAAe;IAA5C;;QACY,
|
|
1
|
+
{"version":3,"file":"FMSynth.js","sourceRoot":"","sources":["../../../Instruments/Analog/FMSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAa,MAAM,sBAAsB,CAAC;AAGlE;;;;GAIG;AACH;;;;;;GAMG;AACH,MAAM,OAAO,OAAQ,SAAQ,eAAe;IAA5C;;QACY,oBAAe,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,CAAC;IAyBzG,CAAC;IAvBW,eAAe,CACvB,GAAiB,EACjB,IAAc,EACd,IAAY,EACZ,IAAY,EACZ,QAAgB,EAChB,WAAmB,EACnB,WAAmB,EACnB,QAAgB;QAEhB,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAEhE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,+CAA+C;QACzE,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,gCAAgC;QAE9D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAC5D,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,mDAAmD;QAEzH,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAExE,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAClE,CAAC;CACF"}
|
|
@@ -3,11 +3,18 @@ import { AnalogSynthBase } from "./AnalogSynthBase.js";
|
|
|
3
3
|
* Synthesizer strategy for Formant Choirs (Human Vox).
|
|
4
4
|
* Uses parallel bandpass filters locked to specific "vowel" resonant frequencies.
|
|
5
5
|
*/
|
|
6
|
+
/**
|
|
7
|
+
* Mimics human vowel sounds (a, e, i, o, u) using parallel bandpass filters (formants) tuned to specific vocal tract resonant frequencies.
|
|
8
|
+
*
|
|
9
|
+
* @reason Acoustic Design:
|
|
10
|
+
* Encapsulates the specific Web Audio node routing and ADSR parameters
|
|
11
|
+
* required to physically model this instrument within the 13KB limit.
|
|
12
|
+
*/
|
|
6
13
|
export declare class FormantSynth extends AnalogSynthBase {
|
|
7
|
-
protected
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
14
|
+
protected _envelopeConfig: {
|
|
15
|
+
_peakVelocity: number;
|
|
16
|
+
_attackTimeSeconds: number;
|
|
17
|
+
_releaseTimeSeconds: number;
|
|
11
18
|
};
|
|
12
19
|
protected _setupSynthesis(ctx: AudioContext, gain: GainNode, time: number, freq: number, velocity: number, sustainTime: number, releaseTime: number, stopTime: number): AudioNode | void;
|
|
13
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormantSynth.d.ts","sourceRoot":"","sources":["../../../Instruments/Analog/FormantSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAa,MAAM,sBAAsB,CAAC;AAGlE;;;GAGG;AACH,qBAAa,YAAa,SAAQ,eAAe;IAC/C,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"FormantSynth.d.ts","sourceRoot":"","sources":["../../../Instruments/Analog/FormantSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAa,MAAM,sBAAsB,CAAC;AAGlE;;;GAGG;AACH;;;;;;GAMG;AACH,qBAAa,YAAa,SAAQ,eAAe;IAC/C,SAAS,CAAC,eAAe;;;;MAA6E;IAEtG,SAAS,CAAC,eAAe,CACvB,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,SAAS,GAAG,IAAI;CAgBpB"}
|
|
@@ -3,24 +3,31 @@ import { AnalogSynthBase } from "./AnalogSynthBase.js";
|
|
|
3
3
|
* Synthesizer strategy for Formant Choirs (Human Vox).
|
|
4
4
|
* Uses parallel bandpass filters locked to specific "vowel" resonant frequencies.
|
|
5
5
|
*/
|
|
6
|
+
/**
|
|
7
|
+
* Mimics human vowel sounds (a, e, i, o, u) using parallel bandpass filters (formants) tuned to specific vocal tract resonant frequencies.
|
|
8
|
+
*
|
|
9
|
+
* @reason Acoustic Design:
|
|
10
|
+
* Encapsulates the specific Web Audio node routing and ADSR parameters
|
|
11
|
+
* required to physically model this instrument within the 13KB limit.
|
|
12
|
+
*/
|
|
6
13
|
export class FormantSynth extends AnalogSynthBase {
|
|
7
14
|
constructor() {
|
|
8
15
|
super(...arguments);
|
|
9
|
-
this.
|
|
16
|
+
this._envelopeConfig = { _peakVelocity: 0.8, _attackTimeSeconds: 0.1, _releaseTimeSeconds: 0.4 };
|
|
10
17
|
}
|
|
11
18
|
_setupSynthesis(ctx, gain, time, freq, velocity, sustainTime, releaseTime, stopTime) {
|
|
12
|
-
const osc = this.
|
|
13
|
-
this.
|
|
19
|
+
const osc = this._createOscillator(ctx, "sawtooth", freq);
|
|
20
|
+
this._createLFO(ctx, 5, freq * 0.015, time, 0.2, stopTime, osc.frequency);
|
|
14
21
|
// Typical 'Ah' vowel formants: 730Hz, 1090Hz, 2440Hz
|
|
15
22
|
[730, 1090, 2440].forEach((f) => {
|
|
16
23
|
if (f < 22000) {
|
|
17
|
-
const filter = this.
|
|
24
|
+
const filter = this._createFilter(ctx, "bandpass");
|
|
18
25
|
filter.frequency.value = f;
|
|
19
26
|
filter.Q.value = 12; // High resonance to isolate the formant
|
|
20
27
|
osc.connect(filter).connect(gain);
|
|
21
28
|
}
|
|
22
29
|
});
|
|
23
|
-
this.
|
|
30
|
+
this._scheduleNodeStartStop(time, stopTime, osc);
|
|
24
31
|
}
|
|
25
32
|
}
|
|
26
33
|
//# sourceMappingURL=FormantSynth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormantSynth.js","sourceRoot":"","sources":["../../../Instruments/Analog/FormantSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAa,MAAM,sBAAsB,CAAC;AAGlE;;;GAGG;AACH,MAAM,OAAO,YAAa,SAAQ,eAAe;IAAjD;;QACY,
|
|
1
|
+
{"version":3,"file":"FormantSynth.js","sourceRoot":"","sources":["../../../Instruments/Analog/FormantSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAa,MAAM,sBAAsB,CAAC;AAGlE;;;GAGG;AACH;;;;;;GAMG;AACH,MAAM,OAAO,YAAa,SAAQ,eAAe;IAAjD;;QACY,oBAAe,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,kBAAkB,EAAE,GAAG,EAAE,mBAAmB,EAAE,GAAG,EAAE,CAAC;IA2BxG,CAAC;IAzBW,eAAe,CACvB,GAAiB,EACjB,IAAc,EACd,IAAY,EACZ,IAAY,EACZ,QAAgB,EAChB,WAAmB,EACnB,WAAmB,EACnB,QAAgB;QAEhB,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,GAAG,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAE1E,qDAAqD;QACrD,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC9B,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC;gBACd,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;gBACnD,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;gBAC3B,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,wCAAwC;gBAC7D,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC;CACF"}
|
|
@@ -2,11 +2,18 @@ import { AnalogSynthBase } from "./AnalogSynthBase.js";
|
|
|
2
2
|
/**
|
|
3
3
|
* Synthesizer strategy for Synth Leads featuring an LFO Vibrato.
|
|
4
4
|
*/
|
|
5
|
+
/**
|
|
6
|
+
* Produces a bright, cutting tone using layered oscillators and detuning to stand out in a mix as the primary melody.
|
|
7
|
+
*
|
|
8
|
+
* @reason Acoustic Design:
|
|
9
|
+
* Encapsulates the specific Web Audio node routing and ADSR parameters
|
|
10
|
+
* required to physically model this instrument within the 13KB limit.
|
|
11
|
+
*/
|
|
5
12
|
export declare class LeadSynth extends AnalogSynthBase {
|
|
6
|
-
protected
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
13
|
+
protected _envelopeConfig: {
|
|
14
|
+
_peakVelocity: number;
|
|
15
|
+
_attackTimeSeconds: number;
|
|
16
|
+
_releaseTimeSeconds: number;
|
|
10
17
|
};
|
|
11
18
|
protected _setupSynthesis(ctx: AudioContext, gain: GainNode, time: number, freq: number, velocity: number, sustainTime: number, releaseTime: number, stopTime: number): AudioNode | void;
|
|
12
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LeadSynth.d.ts","sourceRoot":"","sources":["../../../Instruments/Analog/LeadSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD;;GAEG;AACH,qBAAa,SAAU,SAAQ,eAAe;IAC5C,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"LeadSynth.d.ts","sourceRoot":"","sources":["../../../Instruments/Analog/LeadSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD;;GAEG;AACH;;;;;;GAMG;AACH,qBAAa,SAAU,SAAQ,eAAe;IAC5C,SAAS,CAAC,eAAe;;;;MAA8E;IAEvG,SAAS,CAAC,eAAe,CACvB,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,SAAS,GAAG,IAAI;CAqBpB"}
|
|
@@ -2,20 +2,27 @@ import { AnalogSynthBase } from "./AnalogSynthBase.js";
|
|
|
2
2
|
/**
|
|
3
3
|
* Synthesizer strategy for Synth Leads featuring an LFO Vibrato.
|
|
4
4
|
*/
|
|
5
|
+
/**
|
|
6
|
+
* Produces a bright, cutting tone using layered oscillators and detuning to stand out in a mix as the primary melody.
|
|
7
|
+
*
|
|
8
|
+
* @reason Acoustic Design:
|
|
9
|
+
* Encapsulates the specific Web Audio node routing and ADSR parameters
|
|
10
|
+
* required to physically model this instrument within the 13KB limit.
|
|
11
|
+
*/
|
|
5
12
|
export class LeadSynth extends AnalogSynthBase {
|
|
6
13
|
constructor() {
|
|
7
14
|
super(...arguments);
|
|
8
|
-
this.
|
|
15
|
+
this._envelopeConfig = { _peakVelocity: 0.4, _attackTimeSeconds: 0.05, _releaseTimeSeconds: 0.1 };
|
|
9
16
|
}
|
|
10
17
|
_setupSynthesis(ctx, gain, time, freq, velocity, sustainTime, releaseTime, stopTime) {
|
|
11
|
-
const osc = this.
|
|
12
|
-
this.
|
|
13
|
-
this.
|
|
14
|
-
const filter = this.
|
|
15
|
-
this.
|
|
18
|
+
const osc = this._createOscillator(ctx, "sawtooth", 0);
|
|
19
|
+
this._setValueAtTime(osc.frequency, freq, time);
|
|
20
|
+
this._createLFO(ctx, 5, freq * 0.02, time, 0.2, stopTime, osc.frequency);
|
|
21
|
+
const filter = this._createFilterSweep(ctx, "lowpass", freq, freq * 3, time, 0.05);
|
|
22
|
+
this._exponentialRampToValue(filter.frequency, freq * 1.5, time + sustainTime);
|
|
16
23
|
filter.Q.value = 3; /** Squelchy resonance */
|
|
17
24
|
osc.connect(filter).connect(gain);
|
|
18
|
-
this.
|
|
25
|
+
this._scheduleNodeStartStop(time, stopTime, osc);
|
|
19
26
|
}
|
|
20
27
|
}
|
|
21
28
|
//# sourceMappingURL=LeadSynth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LeadSynth.js","sourceRoot":"","sources":["../../../Instruments/Analog/LeadSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,eAAe;IAA9C;;QACY,
|
|
1
|
+
{"version":3,"file":"LeadSynth.js","sourceRoot":"","sources":["../../../Instruments/Analog/LeadSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD;;GAEG;AACH;;;;;;GAMG;AACH,MAAM,OAAO,SAAU,SAAQ,eAAe;IAA9C;;QACY,oBAAe,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,CAAC;IAgCzG,CAAC;IA9BW,eAAe,CACvB,GAAiB,EACjB,IAAc,EACd,IAAY,EACZ,IAAY,EACZ,QAAgB,EAChB,WAAmB,EACnB,WAAmB,EACnB,QAAgB;QAEhB,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAEhD,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAEzE,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CACpC,GAAG,EACH,SAAS,EACT,IAAI,EACJ,IAAI,GAAG,CAAC,EACR,IAAI,EACJ,IAAI,CACL,CAAC;QACF,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,WAAW,CAAC,CAAC;QAC/E,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,yBAAyB;QAE7C,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC;CACF"}
|
|
@@ -2,11 +2,18 @@ import { AnalogSynthBase } from "./AnalogSynthBase.js";
|
|
|
2
2
|
/**
|
|
3
3
|
* Synthesizer strategy for Organs using additive sine waves.
|
|
4
4
|
*/
|
|
5
|
+
/**
|
|
6
|
+
* Simulates a tonewheel organ (like a Hammond B3) by using additive synthesis of sine waves at harmonic intervals.
|
|
7
|
+
*
|
|
8
|
+
* @reason Acoustic Design:
|
|
9
|
+
* Encapsulates the specific Web Audio node routing and ADSR parameters
|
|
10
|
+
* required to physically model this instrument within the 13KB limit.
|
|
11
|
+
*/
|
|
5
12
|
export declare class OrganSynth extends AnalogSynthBase {
|
|
6
|
-
protected
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
13
|
+
protected _envelopeConfig: {
|
|
14
|
+
_peakVelocity: number;
|
|
15
|
+
_attackTimeSeconds: number;
|
|
16
|
+
_releaseTimeSeconds: number;
|
|
10
17
|
};
|
|
11
18
|
protected _setupSynthesis(ctx: AudioContext, gain: GainNode, time: number, freq: number, velocity: number, sustainTime: number, releaseTime: number, stopTime: number): AudioNode | void;
|
|
12
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrganSynth.d.ts","sourceRoot":"","sources":["../../../Instruments/Analog/OrganSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAa,MAAM,sBAAsB,CAAC;AAGlE;;GAEG;AACH,qBAAa,UAAW,SAAQ,eAAe;IAC7C,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"OrganSynth.d.ts","sourceRoot":"","sources":["../../../Instruments/Analog/OrganSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAa,MAAM,sBAAsB,CAAC;AAGlE;;GAEG;AACH;;;;;;GAMG;AACH,qBAAa,UAAW,SAAQ,eAAe;IAC7C,SAAS,CAAC,eAAe;;;;MAA+E;IAExG,SAAS,CAAC,eAAe,CACvB,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,SAAS,GAAG,IAAI;CA0BpB"}
|
|
@@ -2,22 +2,29 @@ import { AnalogSynthBase } from "./AnalogSynthBase.js";
|
|
|
2
2
|
/**
|
|
3
3
|
* Synthesizer strategy for Organs using additive sine waves.
|
|
4
4
|
*/
|
|
5
|
+
/**
|
|
6
|
+
* Simulates a tonewheel organ (like a Hammond B3) by using additive synthesis of sine waves at harmonic intervals.
|
|
7
|
+
*
|
|
8
|
+
* @reason Acoustic Design:
|
|
9
|
+
* Encapsulates the specific Web Audio node routing and ADSR parameters
|
|
10
|
+
* required to physically model this instrument within the 13KB limit.
|
|
11
|
+
*/
|
|
5
12
|
export class OrganSynth extends AnalogSynthBase {
|
|
6
13
|
constructor() {
|
|
7
14
|
super(...arguments);
|
|
8
|
-
this.
|
|
15
|
+
this._envelopeConfig = { _peakVelocity: 0.4, _attackTimeSeconds: 0.01, _releaseTimeSeconds: 0.05 };
|
|
9
16
|
}
|
|
10
17
|
_setupSynthesis(ctx, gain, time, freq, velocity, sustainTime, releaseTime, stopTime) {
|
|
11
|
-
const osc1 = this.
|
|
12
|
-
const gain2 = this.
|
|
13
|
-
const osc2 = this.
|
|
14
|
-
const gain3 = this.
|
|
15
|
-
const osc3 = this.
|
|
16
|
-
const rotaryNode = this.
|
|
17
|
-
this.
|
|
18
|
+
const osc1 = this._createOscillator(ctx, "sine", freq, gain);
|
|
19
|
+
const gain2 = this._createGain(ctx, 0.5, gain);
|
|
20
|
+
const osc2 = this._createOscillator(ctx, "sine", freq * 2, gain2);
|
|
21
|
+
const gain3 = this._createGain(ctx, 0.25, gain);
|
|
22
|
+
const osc3 = this._createOscillator(ctx, "sine", freq * 3, gain3);
|
|
23
|
+
const rotaryNode = this._createGain(ctx, 0.7);
|
|
24
|
+
this._createLFO(ctx, 6.5, 0.3, time, 0, stopTime, rotaryNode.gain);
|
|
18
25
|
gain.connect(rotaryNode);
|
|
19
|
-
this.
|
|
20
|
-
this.
|
|
26
|
+
this._createTransient(ctx, "square", 4000, rotaryNode, time, Math.max(0.001, velocity * 0.1), 0.015);
|
|
27
|
+
this._scheduleNodeStartStop(time, stopTime, osc1, osc2, osc3);
|
|
21
28
|
return rotaryNode;
|
|
22
29
|
}
|
|
23
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrganSynth.js","sourceRoot":"","sources":["../../../Instruments/Analog/OrganSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAa,MAAM,sBAAsB,CAAC;AAGlE;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,eAAe;IAA/C;;QACY,
|
|
1
|
+
{"version":3,"file":"OrganSynth.js","sourceRoot":"","sources":["../../../Instruments/Analog/OrganSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAa,MAAM,sBAAsB,CAAC;AAGlE;;GAEG;AACH;;;;;;GAMG;AACH,MAAM,OAAO,UAAW,SAAQ,eAAe;IAA/C;;QACY,oBAAe,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;IAqC1G,CAAC;IAnCW,eAAe,CACvB,GAAiB,EACjB,IAAc,EACd,IAAY,EACZ,IAAY,EACZ,QAAgB,EAChB,WAAmB,EACnB,WAAmB,EACnB,QAAgB;QAEhB,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAElE,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAEnE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAEzB,IAAI,CAAC,gBAAgB,CACnB,GAAG,EACH,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,IAAI,EACJ,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,EAC/B,KAAK,CACN,CAAC;QAEF,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE9D,OAAO,UAAU,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -8,14 +8,14 @@ export class PadSynth extends AnalogSynthBase {
|
|
|
8
8
|
return { v: 0.4, a: d < 0.4 ? 0.05 : 0.3, r: d < 0.4 ? 0.1 : 0.8 };
|
|
9
9
|
}
|
|
10
10
|
_setupSynthesis(ctx, gain, time, freq, velocity, sustainTime, releaseTime, stopTime) {
|
|
11
|
-
const [osc1, osc2] = this.
|
|
12
|
-
const filter = this.
|
|
13
|
-
this.
|
|
14
|
-
this.
|
|
15
|
-
this.
|
|
16
|
-
this.
|
|
11
|
+
const [osc1, osc2] = this._createStereoOscillator(ctx, "triangle", freq, 1.01, 0.7, gain);
|
|
12
|
+
const filter = this._createFilter(ctx, "lowpass");
|
|
13
|
+
this._setValueAtTime(filter.frequency, freq + 400, time);
|
|
14
|
+
this._linearRampToValue(filter.frequency, freq + 1000 + velocity * 500, time + sustainTime);
|
|
15
|
+
this._createLFO(ctx, 0.5, 10, time, 0, stopTime, osc2.frequency);
|
|
16
|
+
this._createLFO(ctx, 0.1, 400, time, 0, stopTime, filter.frequency);
|
|
17
17
|
gain.connect(filter);
|
|
18
|
-
this.
|
|
18
|
+
this._scheduleNodeStartStop(time, stopTime, osc1, osc2);
|
|
19
19
|
return filter;
|
|
20
20
|
}
|
|
21
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PadSynth.js","sourceRoot":"","sources":["../../../Instruments/Analog/PadSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD;;;GAGG;AACH,MAAM,OAAO,QAAS,SAAQ,eAAe;IACjC,IAAI,CAAC,CAAS;QACtB,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACrE,CAAC;IAES,eAAe,CACvB,GAAiB,EACjB,IAAc,EACd,IAAY,EACZ,IAAY,EACZ,QAAgB,EAChB,WAAmB,EACnB,WAAmB,EACnB,QAAgB;QAEhB,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"PadSynth.js","sourceRoot":"","sources":["../../../Instruments/Analog/PadSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD;;;GAGG;AACH,MAAM,OAAO,QAAS,SAAQ,eAAe;IACjC,IAAI,CAAC,CAAS;QACtB,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACrE,CAAC;IAES,eAAe,CACvB,GAAiB,EACjB,IAAc,EACd,IAAY,EACZ,IAAY,EACZ,QAAgB,EAChB,WAAmB,EACnB,WAAmB,EACnB,QAAgB;QAEhB,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAC/C,GAAG,EACH,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,GAAG,EACH,IAAI,CACL,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,kBAAkB,CACrB,MAAM,CAAC,SAAS,EAChB,IAAI,GAAG,IAAI,GAAG,QAAQ,GAAG,GAAG,EAC5B,IAAI,GAAG,WAAW,CACnB,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAEpE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAErB,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAExD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -3,11 +3,18 @@ import { AnalogSynthBase } from "./AnalogSynthBase.js";
|
|
|
3
3
|
* Synthesizer strategy for Reese/Wobble Bass.
|
|
4
4
|
* Uses heavily detuned sawtooths and an LFO-driven lowpass filter.
|
|
5
5
|
*/
|
|
6
|
+
/**
|
|
7
|
+
* A staple of Drum & Bass music, this uses two heavily detuned sawtooth waves to create a thick, phasing, and wide bass tone.
|
|
8
|
+
*
|
|
9
|
+
* @reason Acoustic Design:
|
|
10
|
+
* Encapsulates the specific Web Audio node routing and ADSR parameters
|
|
11
|
+
* required to physically model this instrument within the 13KB limit.
|
|
12
|
+
*/
|
|
6
13
|
export declare class ReeseBassSynth extends AnalogSynthBase {
|
|
7
|
-
protected
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
14
|
+
protected _envelopeConfig: {
|
|
15
|
+
_peakVelocity: number;
|
|
16
|
+
_attackTimeSeconds: number;
|
|
17
|
+
_releaseTimeSeconds: number;
|
|
11
18
|
};
|
|
12
19
|
protected _setupSynthesis(ctx: AudioContext, gain: GainNode, time: number, freq: number, velocity: number, sustainTime: number, releaseTime: number, stopTime: number): AudioNode | void;
|
|
13
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReeseBassSynth.d.ts","sourceRoot":"","sources":["../../../Instruments/Analog/ReeseBassSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAa,MAAM,sBAAsB,CAAC;AAGlE;;;GAGG;AACH,qBAAa,cAAe,SAAQ,eAAe;IACjD,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"ReeseBassSynth.d.ts","sourceRoot":"","sources":["../../../Instruments/Analog/ReeseBassSynth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAa,MAAM,sBAAsB,CAAC;AAGlE;;;GAGG;AACH;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,eAAe;IACjD,SAAS,CAAC,eAAe;;;;MAA8E;IAEvG,SAAS,CAAC,eAAe,CACvB,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,SAAS,GAAG,IAAI;CAmBpB"}
|