Integrate with the new impulse generation functionality
This commit is contained in:
parent
13cb32903a
commit
d6c8838fe2
4 changed files with 86 additions and 84 deletions
|
|
@ -655,6 +655,15 @@ const generic_params = [
|
||||||
* .vib("<.5 1 2 4 8 16>:12")
|
* .vib("<.5 1 2 4 8 16>:12")
|
||||||
*/
|
*/
|
||||||
[['vib', 'vibmod'], 'vibrato', 'v'],
|
[['vib', 'vibmod'], 'vibrato', 'v'],
|
||||||
|
/**
|
||||||
|
* Adds pink noise to the mix
|
||||||
|
*
|
||||||
|
* @name noise
|
||||||
|
* @param {number | Pattern} wet wet amount
|
||||||
|
* @example
|
||||||
|
* sound("<white pink brown>/2")
|
||||||
|
*/
|
||||||
|
['noise'],
|
||||||
/**
|
/**
|
||||||
* Sets the vibrato depth in semitones. Only has an effect if `vibrato` | `vib` | `v` is is also set
|
* Sets the vibrato depth in semitones. Only has an effect if `vibrato` | `vib` | `v` is is also set
|
||||||
*
|
*
|
||||||
|
|
@ -970,56 +979,50 @@ const generic_params = [
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
[['room', 'size']],
|
[['room', 'size']],
|
||||||
/**
|
|
||||||
* Sets the room size of the reverb, see {@link room}.
|
|
||||||
*
|
|
||||||
* @name roomsize
|
|
||||||
* @param {number | Pattern} size between 0 and 10
|
|
||||||
* @synonyms size, sz
|
|
||||||
* @example
|
|
||||||
* s("bd sd").room(.8).roomsize("<0 1 2 4 8>")
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/**
|
/**
|
||||||
* Reverb lowpass starting frequency (in hertz).
|
* Reverb lowpass starting frequency (in hertz).
|
||||||
|
* When this property is changed, the reverb will be recaculated, so only change this sparsely..
|
||||||
*
|
*
|
||||||
* @name revlp
|
* @name roomlp
|
||||||
* @param {number} level between 0 and 20000hz
|
* @synonyms rlp
|
||||||
|
* @param {number} frequency between 0 and 20000hz
|
||||||
* @example
|
* @example
|
||||||
* s("bd sd").room(0.5).revlp(10000)
|
* s("bd sd").room(0.5).rlp(10000)
|
||||||
* @example
|
* @example
|
||||||
* s("bd sd").room(0.5).revlp(5000)
|
* s("bd sd").room(0.5).rlp(5000)
|
||||||
*/
|
*/
|
||||||
['revlp'],
|
['roomlp', 'rlp'],
|
||||||
/**
|
/**
|
||||||
* Reverb lowpass frequency at -60dB (in hertz).
|
* Reverb lowpass frequency at -60dB (in hertz).
|
||||||
|
* When this property is changed, the reverb will be recaculated, so only change this sparsely..
|
||||||
*
|
*
|
||||||
* @name revdim
|
* @name roomdim
|
||||||
* @param {number} level between 0 and 20000hz
|
* @synonyms rdim
|
||||||
|
* @param {number} frequency between 0 and 20000hz
|
||||||
* @example
|
* @example
|
||||||
* s("bd sd").room(0.5).revlp(10000).revdim(8000)
|
* s("bd sd").room(0.5).rlp(10000).rdim(8000)
|
||||||
* @example
|
* @example
|
||||||
* s("bd sd").room(0.5).revlp(5000).revdim(400)
|
* s("bd sd").room(0.5).rlp(5000).rdim(400)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
['revdim'],
|
['roomdim', 'rdim'],
|
||||||
/**
|
/**
|
||||||
* Reverb fade time (in seconds).
|
* Reverb fade time (in seconds).
|
||||||
|
* When this property is changed, the reverb will be recaculated, so only change this sparsely..
|
||||||
*
|
*
|
||||||
* @name fade
|
* @name roomfade
|
||||||
|
* @synonyms rfade
|
||||||
* @param {number} seconds for the reverb to fade
|
* @param {number} seconds for the reverb to fade
|
||||||
* @example
|
* @example
|
||||||
* s("bd sd").room(0.5).revlp(10000).fade(0.5)
|
* s("bd sd").room(0.5).rlp(10000).rfade(0.5)
|
||||||
* @example
|
* @example
|
||||||
* s("bd sd").room(0.5).revlp(5000).fade(4)
|
* s("bd sd").room(0.5).rlp(5000).rfade(4)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
['fade'],
|
['roomfade', 'rfade'],
|
||||||
/**
|
/**
|
||||||
* Sets the sample to use as an impulse response for the reverb.
|
* Sets the sample to use as an impulse response for the reverb. * * @name iresponse
|
||||||
*
|
* @param {string | Pattern} sample to use as an impulse response
|
||||||
* @name iresponse
|
|
||||||
* @param {string | Pattern} sample sample to pick as an impulse response
|
|
||||||
* @synonyms ir
|
* @synonyms ir
|
||||||
* @example
|
* @example
|
||||||
* s("bd sd").room(.8).ir("<shaker_large:0 shaker_large:2>")
|
* s("bd sd").room(.8).ir("<shaker_large:0 shaker_large:2>")
|
||||||
|
|
@ -1028,23 +1031,25 @@ const generic_params = [
|
||||||
[['ir', 'i'], 'iresponse'],
|
[['ir', 'i'], 'iresponse'],
|
||||||
/**
|
/**
|
||||||
* Sets the room size of the reverb, see {@link room}.
|
* Sets the room size of the reverb, see {@link room}.
|
||||||
|
* When this property is changed, the reverb will be recaculated, so only change this sparsely..
|
||||||
*
|
*
|
||||||
* @name roomsize
|
* @name roomsize
|
||||||
* @param {number | Pattern} size between 0 and 10
|
* @param {number | Pattern} size between 0 and 10
|
||||||
* @synonyms size, sz
|
* @synonyms rsize, sz, size
|
||||||
* @example
|
* @example
|
||||||
* s("bd sd").room(.8).roomsize("<0 1 2 4 8>")
|
* s("bd sd").room(.8).rsize(1)
|
||||||
|
* @example
|
||||||
|
* s("bd sd").room(.8).rsize(4)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
// TODO: find out why :
|
// TODO: find out why :
|
||||||
// s("bd sd").room(.8).roomsize("<0 .2 .4 .6 .8 [1,0]>").osc()
|
// s("bd sd").room(.8).roomsize("<0 .2 .4 .6 .8 [1,0]>").osc()
|
||||||
// .. does not work. Is it because room is only one effect?
|
// .. does not work. Is it because room is only one effect?
|
||||||
['size', 'sz', 'roomsize'],
|
['roomsize', 'size', 'sz', 'rsize'],
|
||||||
// ['sagogo'],
|
// ['sagogo'],
|
||||||
// ['sclap'],
|
// ['sclap'],
|
||||||
// ['sclaves'],
|
// ['sclaves'],
|
||||||
// ['scrash'],
|
// ['scrash'],
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wave shaping distortion. CAUTION: it might get loud
|
* Wave shaping distortion. CAUTION: it might get loud
|
||||||
*
|
*
|
||||||
|
|
@ -1210,7 +1215,7 @@ const generic_params = [
|
||||||
['pitchJump'],
|
['pitchJump'],
|
||||||
['pitchJumpTime'],
|
['pitchJumpTime'],
|
||||||
['lfo', 'repeatTime'],
|
['lfo', 'repeatTime'],
|
||||||
['noise'],
|
['znoise'], // noise on the frequency or as bubo calls it "frequency fog" :)
|
||||||
['zmod'],
|
['zmod'],
|
||||||
['zcrush'], // like crush but scaled differently
|
['zcrush'], // like crush but scaled differently
|
||||||
['zdelay'],
|
['zdelay'],
|
||||||
|
|
|
||||||
|
|
@ -17,47 +17,43 @@ if (typeof AudioContext !== 'undefined') {
|
||||||
return newBuffer;
|
return newBuffer;
|
||||||
};
|
};
|
||||||
|
|
||||||
AudioContext.prototype.createReverb = function (audioContext, duration, fade, revlp, revdim, imp) {
|
AudioContext.prototype.createReverb = function (duration, fade, lp, dim, ir) {
|
||||||
const convolver = this.createConvolver();
|
const convolver = this.createConvolver();
|
||||||
|
convolver.generate = (d, fade, lp, dim, buf) => {
|
||||||
convolver.setDuration = (d, fade, revlp, revdim, imp) => {
|
if (buf) {
|
||||||
if (imp) {
|
convolver.buffer = this.adjustLength(d, buf);
|
||||||
convolver.buffer = this.adjustLength(d, imp);
|
|
||||||
return convolver;
|
return convolver;
|
||||||
} else {
|
} else {
|
||||||
this.generateReverb(
|
this.generateReverb(
|
||||||
{
|
{
|
||||||
audioContext,
|
audioContext: this,
|
||||||
sampleRate: 44100,
|
sampleRate: 44100,
|
||||||
numChannels: 2,
|
numChannels: 2,
|
||||||
decayTime: d,
|
decayTime: d,
|
||||||
fadeInTime: fade,
|
fadeInTime: fade,
|
||||||
lpFreqStart: revlp,
|
lpFreqStart: lp,
|
||||||
lpFreqEnd: revdim,
|
lpFreqEnd: dim,
|
||||||
},
|
},
|
||||||
(buffer) => {
|
(buffer) => {
|
||||||
convolver.buffer = buffer;
|
convolver.buffer = buffer;
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
convolver.duration = duration;
|
convolver.duration = d;
|
||||||
convolver.fade = fade;
|
convolver.fade = fade;
|
||||||
convolver.revlp = revlp;
|
convolver.lp = lp;
|
||||||
convolver.revdim = revdim;
|
convolver.dim = dim;
|
||||||
return convolver;
|
return convolver;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
convolver.setIR = (d, fade, revlp, revdim, imp) => {
|
convolver.setIR = (d, fade, lp, dim, buf) => {
|
||||||
if (imp) {
|
if (buf) {
|
||||||
convolver.buffer = this.adjustLength(d, imp);
|
convolver.buffer = this.adjustLength(d, buf);
|
||||||
} else {
|
} else {
|
||||||
convolver.setDuration(d, fade, revlp, revdim, imp);
|
convolver.generate(d, fade, lp, dim, buf);
|
||||||
}
|
}
|
||||||
return convolver;
|
return convolver;
|
||||||
};
|
};
|
||||||
convolver.setDuration(duration, fade, revlp, revdim, imp);
|
convolver.generate(duration, fade, lp, dim, ir);
|
||||||
return convolver;
|
return convolver;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: make the reverb more exciting
|
|
||||||
// check out https://blog.gskinner.com/archives/2019/02/reverb-web-audio-api.html
|
|
||||||
|
|
|
||||||
|
|
@ -114,32 +114,29 @@ function getDelay(orbit, delaytime, delayfeedback, t) {
|
||||||
|
|
||||||
let reverbs = {};
|
let reverbs = {};
|
||||||
|
|
||||||
function getReverb(orbit, duration = 2, fade, revlp, revdim, imp) {
|
function getReverb(orbit, duration = 2, fade, lp, dim, ir) {
|
||||||
if (!reverbs[orbit]) {
|
if (!reverbs[orbit]) {
|
||||||
const ac = getAudioContext();
|
const ac = getAudioContext();
|
||||||
const reverb = ac.createReverb(getAudioContext(), duration, fade, revlp, revdim, imp);
|
const reverb = ac.createReverb(duration, fade, lp, dim, ir);
|
||||||
reverb.connect(getDestination());
|
reverb.connect(getDestination());
|
||||||
reverbs[orbit] = reverb;
|
reverbs[orbit] = reverb;
|
||||||
}
|
}
|
||||||
|
|
||||||
const reverbOrbit = reverbs[orbit];
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
reverbs[orbit].duration !== duration ||
|
reverbs[orbit].duration !== duration ||
|
||||||
reverbs[orbit].fade !== fade ||
|
reverbs[orbit].fade !== fade ||
|
||||||
reverbs[orbit].revlp !== revlp ||
|
reverbs[orbit].ir !== lp ||
|
||||||
reverbs[orbit].revdim !== revdim
|
reverbs[orbit].dim !== dim ||
|
||||||
|
reverbs[orbit].ir !== ir
|
||||||
) {
|
) {
|
||||||
reverbs[orbit].setDuration(duration, fade, revlp, revdim);
|
reverbs[orbit].generate(duration, fade, lp, dim, ir);
|
||||||
reverbs[orbit].duration = duration;
|
|
||||||
reverbs[orbit].fade = fade;
|
|
||||||
reverbs[orbit].revlp = revlp;
|
|
||||||
reverbs[orbit].revdim = revdim;
|
|
||||||
}
|
}
|
||||||
if (reverbs[orbit].ir !== imp) {
|
|
||||||
reverbs[orbit] = reverbs[orbit].setIR(duration, fade, revlp, revdim, imp);
|
if (reverbs[orbit].ir !== ir) {
|
||||||
reverbs[orbit].ir = imp;
|
reverbs[orbit] = reverbs[orbit].setIR(duration, fade, lp, dim, ir);
|
||||||
|
reverbs[orbit].ir = ir;
|
||||||
}
|
}
|
||||||
|
|
||||||
return reverbs[orbit];
|
return reverbs[orbit];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -238,10 +235,10 @@ export const superdough = async (value, deadline, hapDuration) => {
|
||||||
delaytime = 0.25,
|
delaytime = 0.25,
|
||||||
orbit = 1,
|
orbit = 1,
|
||||||
room,
|
room,
|
||||||
fade = 0.1,
|
roomfade = 0.1,
|
||||||
revlp = 15000,
|
roomlp = 15000,
|
||||||
revdim = 1000,
|
roomdim = 1000,
|
||||||
size = 2,
|
roomsize = 2,
|
||||||
ir,
|
ir,
|
||||||
i = 0,
|
i = 0,
|
||||||
velocity = 1,
|
velocity = 1,
|
||||||
|
|
@ -393,8 +390,8 @@ export const superdough = async (value, deadline, hapDuration) => {
|
||||||
buffer = await loadBuffer(url, ac, ir, 0);
|
buffer = await loadBuffer(url, ac, ir, 0);
|
||||||
}
|
}
|
||||||
let reverbSend;
|
let reverbSend;
|
||||||
if (room > 0 && size > 0) {
|
if (room > 0 && roomsize > 0) {
|
||||||
const reverbNode = getReverb(orbit, size, fade, revlp, revdim, buffer);
|
const reverbNode = getReverb(orbit, roomsize, roomfade, roomlp, roomdim, buffer);
|
||||||
reverbSend = effectSend(post, reverbNode, room);
|
reverbSend = effectSend(post, reverbNode, room);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -183,39 +183,43 @@ global effects use the same chain for all events of the same orbit:
|
||||||
|
|
||||||
<JsDoc client:idle name="orbit" h={0} />
|
<JsDoc client:idle name="orbit" h={0} />
|
||||||
|
|
||||||
## delay
|
## Delay
|
||||||
|
|
||||||
|
### delay
|
||||||
|
|
||||||
<JsDoc client:idle name="delay" h={0} />
|
<JsDoc client:idle name="delay" h={0} />
|
||||||
|
|
||||||
## delaytime
|
### delaytime
|
||||||
|
|
||||||
<JsDoc client:idle name="delaytime" h={0} />
|
<JsDoc client:idle name="delaytime" h={0} />
|
||||||
|
|
||||||
## delayfeedback
|
### delayfeedback
|
||||||
|
|
||||||
<JsDoc client:idle name="delayfeedback" h={0} />
|
<JsDoc client:idle name="delayfeedback" h={0} />
|
||||||
|
|
||||||
## room
|
## Reverb
|
||||||
|
|
||||||
|
### room
|
||||||
|
|
||||||
<JsDoc client:idle name="room" h={0} />
|
<JsDoc client:idle name="room" h={0} />
|
||||||
|
|
||||||
## roomsize
|
### roomsize
|
||||||
|
|
||||||
<JsDoc client:idle name="roomsize" h={0} />
|
<JsDoc client:idle name="roomsize" h={0} />
|
||||||
|
|
||||||
## fade
|
### roomfade
|
||||||
|
|
||||||
<JsDoc client:idle name="fade" h={0} />
|
<JsDoc client:idle name="roomfade" h={0} />
|
||||||
|
|
||||||
## revlp
|
### roomlp
|
||||||
|
|
||||||
<JsDoc client:idle name="revlp" h={0} />
|
<JsDoc client:idle name="roomlp" h={0} />
|
||||||
|
|
||||||
## revdim
|
### roomdim
|
||||||
|
|
||||||
<JsDoc client:idle name="revdim" h={0} />
|
<JsDoc client:idle name="roomdim" h={0} />
|
||||||
|
|
||||||
## iresponse
|
### iresponse
|
||||||
|
|
||||||
<JsDoc client:idle name="iresponse" h={0} />
|
<JsDoc client:idle name="iresponse" h={0} />
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue