Compare commits

..

6 Commits

Author SHA1 Message Date
froos 7179066a68 Merge branch 'main' into daslyfe/jade/rescurve 2025-10-20 20:39:35 +02:00
Jade (Rose) Rowland fe5cebc435 add res curve setter 2025-07-08 22:39:31 -04:00
Felix Roos 2ea0053edf Merge branch 'main' into daslyfe/jade/rescurve 2025-07-06 21:43:35 +02:00
Jade (Rose) Rowland 3f76da7ad8 Merge branch 'main' into daslyfe/jade/rescurve 2025-06-27 15:58:43 -04:00
Jade (Rose) Rowland 4e6ca54ef3 lint 2025-05-02 22:51:44 -04:00
Jade (Rose) Rowland 525f5d87d1 adj resonance 2025-05-02 22:50:00 -04:00
4 changed files with 33 additions and 100 deletions
-12
View File
@@ -396,18 +396,6 @@ export const { velocity } = registerControl('velocity');
*
*/
export const { gain } = registerControl('gain');
/**
* Applies a linear gain adjustment
*
* @name gainlinear
* @synonyms gainlin
* @param {number | Pattern} amount gainlin
* @example
* s("hh*8").gainlin(".4!2 1 .4!2 1 .4 1").fast(2)
*
*/
export const { gainlinear, gainlin } = registerControl('gainlinear', 'gainlin');
/**
* Gain applied after all effects have been processed.
*
+31 -19
View File
@@ -37,7 +37,7 @@ export function registerSound(key, onTrigger, data = {}) {
soundMap.setKey(key, { onTrigger, data });
}
let gainCurveFunc = (val) => Math.pow(val, 2);
let gainCurveFunc = (val) => val;
export function applyGainCurve(val) {
return gainCurveFunc(val);
@@ -141,16 +141,16 @@ export const getAudioDevices = async () => {
return devicesMap;
};
const defaultDefaultValues = {
let defaultDefaultValues = {
s: 'triangle',
gain: 1,
gain: 0.8,
postgain: 1,
density: '.03',
ftype: '12db',
fanchor: 0,
resonance: 1,
hresonance: 1,
bandq: 1,
resonance: 0.183,
hresonance: 0.183,
bandq: 0.183,
channels: [1, 2],
phaserdepth: 0.75,
shapevol: 1,
@@ -166,6 +166,17 @@ const defaultDefaultValues = {
fft: 8,
};
const defaultDefaultDefaultValues = Object.freeze({ ...defaultDefaultValues });
export function setDefault(control, value) {
// const main = getControlName(control); // we cant do this because superdough is independent of strudel/core
defaultDefaultValues[control] = value;
}
export function resetDefaults() {
defaultDefaultValues = { ...defaultDefaultDefaultValues };
}
let defaultControls = new Map(Object.entries(defaultDefaultValues));
export function setDefaultValue(key, value) {
@@ -184,17 +195,9 @@ export function resetDefaultValues() {
}
export function setVersionDefaults(version) {
resetDefaultValues();
const v = Number(version);
if (v <= 1.0) {
if (version === '1.0') {
setDefaultValue('fanchor', 0.5);
}
if (v <= 1.2) {
setDefaultValue('gain', 0.8);
setGainCurve((v) => v);
} else {
setDefaultValue('gain', 1);
setGainCurve((v) => Math.pow(v, 2));
}
}
export const resetLoadedSounds = () => soundMap.set({});
@@ -204,6 +207,16 @@ export function registerWorklet(url) {
externalWorklets.push(url);
}
let resCurveFunc = (res) => Math.min(30.03, Math.pow(res * 5.48, 2));
export function setResCurve(newFunc) {
resCurveFunc = newFunc;
}
function applyResonanceCurve(res) {
return resCurveFunc(res);
}
let workletsLoading;
function loadWorklets() {
if (!workletsLoading) {
@@ -403,7 +416,6 @@ export const superdough = async (value, t, hapDuration, cps = 0.5, cycle = 0.5)
bank,
source,
gain = getDefaultValue('gain'),
gainlinear,
postgain = getDefaultValue('postgain'),
density = getDefaultValue('density'),
duckorbit,
@@ -481,6 +493,9 @@ export const superdough = async (value, t, hapDuration, cps = 0.5, cycle = 0.5)
compressorRelease,
} = value;
resonance = applyResonanceCurve(resonance);
hresonance = applyResonanceCurve(hresonance);
bandq = applyResonanceCurve(bandq);
delaytime = delaytime ?? cycleToSeconds(delaysync, cps);
const orbitChannels = mapChannelNumbers(
@@ -501,9 +516,6 @@ export const superdough = async (value, t, hapDuration, cps = 0.5, cycle = 0.5)
velocity = applyGainCurve(velocity);
tremolodepth = applyGainCurve(tremolodepth);
gain *= velocity; // velocity currently only multiplies with gain. it might do other things in the future
if (gainlinear != null) {
gain *= gainlinear;
}
const end = t + hapDuration;
const endWithRelease = end + release;
-69
View File
@@ -4527,75 +4527,6 @@ exports[`runs examples > example "gain" example index 0 1`] = `
]
`;
exports[`runs examples > example "gainlinear" example index 0 1`] = `
[
"[ 0/1 → 1/16 | s:hh gainlinear:0.4 ]",
"[ 1/16 → 1/8 | s:hh gainlinear:0.4 ]",
"[ 1/8 → 3/16 | s:hh gainlinear:1 ]",
"[ 3/16 → 1/4 | s:hh gainlinear:0.4 ]",
"[ 1/4 → 5/16 | s:hh gainlinear:0.4 ]",
"[ 5/16 → 3/8 | s:hh gainlinear:1 ]",
"[ 3/8 → 7/16 | s:hh gainlinear:0.4 ]",
"[ 7/16 → 1/2 | s:hh gainlinear:1 ]",
"[ 1/2 → 9/16 | s:hh gainlinear:0.4 ]",
"[ 9/16 → 5/8 | s:hh gainlinear:0.4 ]",
"[ 5/8 → 11/16 | s:hh gainlinear:1 ]",
"[ 11/16 → 3/4 | s:hh gainlinear:0.4 ]",
"[ 3/4 → 13/16 | s:hh gainlinear:0.4 ]",
"[ 13/16 → 7/8 | s:hh gainlinear:1 ]",
"[ 7/8 → 15/16 | s:hh gainlinear:0.4 ]",
"[ 15/16 → 1/1 | s:hh gainlinear:1 ]",
"[ 1/1 → 17/16 | s:hh gainlinear:0.4 ]",
"[ 17/16 → 9/8 | s:hh gainlinear:0.4 ]",
"[ 9/8 → 19/16 | s:hh gainlinear:1 ]",
"[ 19/16 → 5/4 | s:hh gainlinear:0.4 ]",
"[ 5/4 → 21/16 | s:hh gainlinear:0.4 ]",
"[ 21/16 → 11/8 | s:hh gainlinear:1 ]",
"[ 11/8 → 23/16 | s:hh gainlinear:0.4 ]",
"[ 23/16 → 3/2 | s:hh gainlinear:1 ]",
"[ 3/2 → 25/16 | s:hh gainlinear:0.4 ]",
"[ 25/16 → 13/8 | s:hh gainlinear:0.4 ]",
"[ 13/8 → 27/16 | s:hh gainlinear:1 ]",
"[ 27/16 → 7/4 | s:hh gainlinear:0.4 ]",
"[ 7/4 → 29/16 | s:hh gainlinear:0.4 ]",
"[ 29/16 → 15/8 | s:hh gainlinear:1 ]",
"[ 15/8 → 31/16 | s:hh gainlinear:0.4 ]",
"[ 31/16 → 2/1 | s:hh gainlinear:1 ]",
"[ 2/1 → 33/16 | s:hh gainlinear:0.4 ]",
"[ 33/16 → 17/8 | s:hh gainlinear:0.4 ]",
"[ 17/8 → 35/16 | s:hh gainlinear:1 ]",
"[ 35/16 → 9/4 | s:hh gainlinear:0.4 ]",
"[ 9/4 → 37/16 | s:hh gainlinear:0.4 ]",
"[ 37/16 → 19/8 | s:hh gainlinear:1 ]",
"[ 19/8 → 39/16 | s:hh gainlinear:0.4 ]",
"[ 39/16 → 5/2 | s:hh gainlinear:1 ]",
"[ 5/2 → 41/16 | s:hh gainlinear:0.4 ]",
"[ 41/16 → 21/8 | s:hh gainlinear:0.4 ]",
"[ 21/8 → 43/16 | s:hh gainlinear:1 ]",
"[ 43/16 → 11/4 | s:hh gainlinear:0.4 ]",
"[ 11/4 → 45/16 | s:hh gainlinear:0.4 ]",
"[ 45/16 → 23/8 | s:hh gainlinear:1 ]",
"[ 23/8 → 47/16 | s:hh gainlinear:0.4 ]",
"[ 47/16 → 3/1 | s:hh gainlinear:1 ]",
"[ 3/1 → 49/16 | s:hh gainlinear:0.4 ]",
"[ 49/16 → 25/8 | s:hh gainlinear:0.4 ]",
"[ 25/8 → 51/16 | s:hh gainlinear:1 ]",
"[ 51/16 → 13/4 | s:hh gainlinear:0.4 ]",
"[ 13/4 → 53/16 | s:hh gainlinear:0.4 ]",
"[ 53/16 → 27/8 | s:hh gainlinear:1 ]",
"[ 27/8 → 55/16 | s:hh gainlinear:0.4 ]",
"[ 55/16 → 7/2 | s:hh gainlinear:1 ]",
"[ 7/2 → 57/16 | s:hh gainlinear:0.4 ]",
"[ 57/16 → 29/8 | s:hh gainlinear:0.4 ]",
"[ 29/8 → 59/16 | s:hh gainlinear:1 ]",
"[ 59/16 → 15/4 | s:hh gainlinear:0.4 ]",
"[ 15/4 → 61/16 | s:hh gainlinear:0.4 ]",
"[ 61/16 → 31/8 | s:hh gainlinear:1 ]",
"[ 31/8 → 63/16 | s:hh gainlinear:0.4 ]",
"[ 63/16 → 4/1 | s:hh gainlinear:1 ]",
]
`;
exports[`runs examples > example "gap" example index 0 1`] = `[]`;
exports[`runs examples > example "grow" example index 0 1`] = `
+2
View File
@@ -13,6 +13,7 @@ import {
resetGlobalEffects,
resetLoadedSounds,
initAudioOnFirstClick,
resetDefaults,
} from '@strudel/webaudio';
import { setVersionDefaultsFrom } from './util.mjs';
import { StrudelMirror, defaultSettings } from '@strudel/codemirror';
@@ -181,6 +182,7 @@ export function useReplContext() {
const resetEditor = async () => {
(await getModule('@strudel/tonal'))?.resetVoicings();
resetDefaults();
resetGlobalEffects();
clearCanvas();
clearHydra();