mirror of
https://codeberg.org/uzu/strudel
synced 2026-07-13 06:19:33 -04:00
working
This commit is contained in:
@@ -5,7 +5,7 @@ This program is free software: you can redistribute it and/or modify it under th
|
||||
*/
|
||||
|
||||
import createClock from './zyklus.mjs';
|
||||
import { logger } from './logger.mjs';
|
||||
import { errorLogger, logger } from './logger.mjs';
|
||||
|
||||
export class Cyclist {
|
||||
constructor({
|
||||
@@ -76,7 +76,7 @@ export class Cyclist {
|
||||
}
|
||||
});
|
||||
} catch (e) {
|
||||
logger(`[cyclist] error: ${e.message}`);
|
||||
errorLogger(e);
|
||||
onError?.(e);
|
||||
}
|
||||
},
|
||||
|
||||
@@ -4,6 +4,12 @@ let debounce = 1000,
|
||||
lastMessage,
|
||||
lastTime;
|
||||
|
||||
export function errorLogger(e, origin = 'cyclist') {
|
||||
//TODO: add some kind of debug flag that enables this while in dev mode
|
||||
// console.error(e)
|
||||
logger(`[${origin}] error: ${e.message}`);
|
||||
}
|
||||
|
||||
export function logger(message, type, data = {}) {
|
||||
let t = performance.now();
|
||||
if (lastMessage === message && t - lastTime < debounce) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { NeoCyclist } from './neocyclist.mjs';
|
||||
import { Cyclist } from './cyclist.mjs';
|
||||
import { evaluate as _evaluate } from './evaluate.mjs';
|
||||
import { logger } from './logger.mjs';
|
||||
import { errorLogger, logger } from './logger.mjs';
|
||||
import { setTime } from './time.mjs';
|
||||
import { evalScope } from './evaluate.mjs';
|
||||
import { register, Pattern, isPattern, silence, stack } from './pattern.mjs';
|
||||
@@ -256,6 +256,6 @@ export const getTrigger =
|
||||
await hap.context.onTrigger(hap, getTime(), cps, t);
|
||||
}
|
||||
} catch (err) {
|
||||
logger(`[cyclist] error: ${err.message}`, 'error');
|
||||
errorLogger(err, 'getTrigger');
|
||||
}
|
||||
};
|
||||
|
||||
@@ -349,39 +349,22 @@ export function getLfo(audioContext, begin, end, properties = {}) {
|
||||
const lfoprops = {
|
||||
frequency: 1,
|
||||
depth,
|
||||
skew: .5,
|
||||
skew: 0.5,
|
||||
phaseoffset: 0,
|
||||
time: begin,
|
||||
begin,
|
||||
end,
|
||||
shape: getModulationShapeInput(shape),
|
||||
dcoffset,
|
||||
min: dcoffset - depth * 0.5,
|
||||
max: dcoffset + depth * 0.5,
|
||||
min: dcoffset * depth,
|
||||
max: dcoffset * depth + depth,
|
||||
curve: 1,
|
||||
...props,
|
||||
}
|
||||
};
|
||||
|
||||
console.info(lfoprops)
|
||||
return getWorklet(audioContext, 'lfo-processor', lfoprops);
|
||||
}
|
||||
|
||||
// export function getLfo(audioContext, time, end, properties = {}) {
|
||||
// return getWorklet(audioContext, 'lfo-processor', {
|
||||
// frequency: 1,
|
||||
// depth: 1,
|
||||
// skew: 0,
|
||||
// phaseoffset: 0,
|
||||
// time,
|
||||
// begin: time,
|
||||
// end,
|
||||
// shape: 1,
|
||||
// dcoffset: -0.5,
|
||||
// ...properties,
|
||||
// });
|
||||
// }
|
||||
|
||||
|
||||
export function getSyncedLfo(audioContext, time, end, cps, cycle, properties = {}) {
|
||||
const frequency = cycle / cps;
|
||||
|
||||
|
||||
@@ -279,7 +279,7 @@ export function registerSynthSounds() {
|
||||
getParamADSR(envGain.gain, attack, decay, sustain, release, 0, 1, begin, holdend, 'linear');
|
||||
let lfo;
|
||||
if (pwsweep != 0) {
|
||||
lfo = getLfo(ac, begin, end, { frequency: pwrate, depth: pwsweep, skew: .5, dcoffset: 0 });
|
||||
lfo = getLfo(ac, begin, end, { frequency: pwrate, depth: pwsweep });
|
||||
lfo.connect(o.parameters.get('pulsewidth'));
|
||||
}
|
||||
let timeoutNode = webAudioTimeout(
|
||||
|
||||
@@ -81,69 +81,7 @@ function getParamValue(block, param) {
|
||||
}
|
||||
return param[0];
|
||||
}
|
||||
// const waveShapeNames = Object.keys(waveshapes);
|
||||
// class LFOProcessor extends AudioWorkletProcessor {
|
||||
// static get parameterDescriptors() {
|
||||
// return [
|
||||
// { name: 'time', defaultValue: 0 },
|
||||
// { name: 'end', defaultValue: 0 },
|
||||
// { name: 'frequency', defaultValue: 0.5 },
|
||||
// { name: 'skew', defaultValue: 0.5 },
|
||||
// { name: 'depth', defaultValue: 1 },
|
||||
// { name: 'phaseoffset', defaultValue: 0 },
|
||||
// { name: 'shape', defaultValue: 0 },
|
||||
// { name: 'dcoffset', defaultValue: 0 },
|
||||
// ];
|
||||
// }
|
||||
|
||||
// constructor() {
|
||||
// super();
|
||||
// this.phase;
|
||||
// }
|
||||
|
||||
// incrementPhase(dt) {
|
||||
// this.phase += dt;
|
||||
// if (this.phase > 1.0) {
|
||||
// this.phase = this.phase - 1;
|
||||
// }
|
||||
// }
|
||||
|
||||
// process(inputs, outputs, parameters) {
|
||||
// // eslint-disable-next-line no-undef
|
||||
// if (currentTime >= parameters.end[0]) {
|
||||
// return false;
|
||||
// }
|
||||
|
||||
// const output = outputs[0];
|
||||
// const frequency = parameters['frequency'][0];
|
||||
|
||||
// const time = parameters['time'][0];
|
||||
// const depth = parameters['depth'][0];
|
||||
// const skew = parameters['skew'][0];
|
||||
// const phaseoffset = parameters['phaseoffset'][0];
|
||||
|
||||
// const dcoffset = parameters['dcoffset'][0];
|
||||
// const shape = waveShapeNames[parameters['shape'][0]];
|
||||
|
||||
// const blockSize = output[0].length ?? 0;
|
||||
|
||||
// if (this.phase == null) {
|
||||
// this.phase = _mod(time * frequency + phaseoffset, 1);
|
||||
// }
|
||||
// // eslint-disable-next-line no-undef
|
||||
// const dt = frequency / sampleRate;
|
||||
// for (let n = 0; n < blockSize; n++) {
|
||||
// for (let i = 0; i < output.length; i++) {
|
||||
// const modval = (waveshapes[shape](this.phase, skew) + dcoffset) * depth;
|
||||
// output[i][n] = modval;
|
||||
// }
|
||||
// this.incrementPhase(dt);
|
||||
// }
|
||||
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
// registerProcessor('lfo-processor', LFOProcessor);
|
||||
const waveShapeNames = Object.keys(waveshapes);
|
||||
class LFOProcessor extends AudioWorkletProcessor {
|
||||
static get parameterDescriptors() {
|
||||
@@ -185,8 +123,6 @@ class LFOProcessor extends AudioWorkletProcessor {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
const output = outputs[0];
|
||||
const frequency = parameters['frequency'][0];
|
||||
|
||||
@@ -194,11 +130,12 @@ class LFOProcessor extends AudioWorkletProcessor {
|
||||
const depth = parameters['depth'][0];
|
||||
const skew = parameters['skew'][0];
|
||||
const phaseoffset = parameters['phaseoffset'][0];
|
||||
const min = parameters['min'][0];
|
||||
const max = parameters['max'][0];
|
||||
|
||||
const curve = parameters['curve'][0];
|
||||
|
||||
const dcoffset = parameters['dcoffset'][0];
|
||||
const min = parameters['min'][0];
|
||||
const max = parameters['max'][0];
|
||||
const shape = waveShapeNames[parameters['shape'][0]];
|
||||
|
||||
const blockSize = output[0].length ?? 0;
|
||||
@@ -210,8 +147,9 @@ class LFOProcessor extends AudioWorkletProcessor {
|
||||
const dt = frequency / sampleRate;
|
||||
for (let n = 0; n < blockSize; n++) {
|
||||
for (let i = 0; i < output.length; i++) {
|
||||
const modval = (waveshapes[shape](this.phase, skew) + dcoffset) * depth;
|
||||
output[i][n] = clamp(Math.pow(modval, curve), min, max);
|
||||
let modval = (waveshapes[shape](this.phase, skew) + dcoffset) * depth;
|
||||
modval = Math.pow(modval, curve);
|
||||
output[i][n] = clamp(modval, min, max);
|
||||
}
|
||||
this.incrementPhase(dt);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user