Merge pull request #706 from Bubobubobubobubo/global-vibrato

Adding vibrato to Superdough sampler
This commit is contained in:
Felix Roos 2023-11-09 09:26:45 +01:00 committed by GitHub
commit 400b2109fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -57,7 +57,6 @@ export const getSampleBufferSource = async (s, n, note, speed, freq, bank, resol
const bufferSource = ac.createBufferSource(); const bufferSource = ac.createBufferSource();
bufferSource.buffer = buffer; bufferSource.buffer = buffer;
const playbackRate = 1.0 * Math.pow(2, transpose / 12); const playbackRate = 1.0 * Math.pow(2, transpose / 12);
// bufferSource.playbackRate.value = Math.pow(2, transpose / 12);
bufferSource.playbackRate.value = playbackRate; bufferSource.playbackRate.value = playbackRate;
return bufferSource; return bufferSource;
}; };
@ -240,6 +239,8 @@ export async function onTriggerSample(t, value, onended, bank, resolveUrl) {
begin = 0, begin = 0,
loopEnd = 1, loopEnd = 1,
end = 1, end = 1,
vib,
vibmod = 0.5,
} = value; } = value;
// load sample // load sample
if (speed === 0) { if (speed === 0) {
@ -255,6 +256,19 @@ export async function onTriggerSample(t, value, onended, bank, resolveUrl) {
const bufferSource = await getSampleBufferSource(s, n, note, speed, freq, bank, resolveUrl); const bufferSource = await getSampleBufferSource(s, n, note, speed, freq, bank, resolveUrl);
// vibrato
let vibratoOscillator;
if (vib > 0) {
vibratoOscillator = getAudioContext().createOscillator();
vibratoOscillator.frequency.value = vib;
const gain = getAudioContext().createGain();
// Vibmod is the amount of vibrato, in semitones
gain.gain.value = vibmod * 100;
vibratoOscillator.connect(gain);
gain.connect(bufferSource.detune);
vibratoOscillator.start(0);
}
// asny stuff above took too long? // asny stuff above took too long?
if (ac.currentTime > t) { if (ac.currentTime > t) {
logger(`[sampler] still loading sound "${s}:${n}"`, 'highlight'); logger(`[sampler] still loading sound "${s}:${n}"`, 'highlight');
@ -286,6 +300,7 @@ export async function onTriggerSample(t, value, onended, bank, resolveUrl) {
envelope.connect(out); envelope.connect(out);
bufferSource.onended = function () { bufferSource.onended = function () {
bufferSource.disconnect(); bufferSource.disconnect();
vibratoOscillator?.stop();
envelope.disconnect(); envelope.disconnect();
out.disconnect(); out.disconnect();
onended(); onended();