diff --git a/package.json b/package.json index 3346361..2386334 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "svelte-knobs", "description": "Svelte component library for building customizable knob controls.", - "version": "0.1.0", + "version": "0.1.1", "repository": { "url": "https://github.com/eye-wave/svelte-knobs" }, diff --git a/src/lib/params/float-param.ts b/src/lib/params/float-param.ts index 5aa8ed6..c30d4a3 100644 --- a/src/lib/params/float-param.ts +++ b/src/lib/params/float-param.ts @@ -45,10 +45,8 @@ export function unnormalize(value: number, param: FloatParam): number { } } -function log(value: number, base = 10): number { - if (value === 0) return 0; - - const x = value < 0 ? -value : value; +export function log(value: number, base = 10): number { + const x = Math.abs(value) + 1; const sign = Math.sign(value); if (base === 10) return sign * Math.log10(x); @@ -58,8 +56,13 @@ function log(value: number, base = 10): number { return sign * (Math.log(x) / Math.log(base)); } -function exp(value: number, base = 10): number { - const x = value < 0 ? -value : value; +export function exp(value: number, base = 10): number { + const sign = Math.sign(value); + const expValue = Math.abs(value); + + if (base === 10) return sign * (Math.pow(10, expValue) - 1); + if (base === 2) return sign * (Math.pow(2, expValue) - 1); + if (base === Math.E) return sign * (Math.exp(expValue) - 1); - return Math.pow(base, x) * Math.sign(value); + return sign * (Math.pow(base, expValue) - 1); } diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 0f9cec3..c528bb1 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -12,6 +12,7 @@ const basicParam = createFloatParam(createRange('lin', 0, 100)); const freqParam = createFloatParam(createRange('log', 20, 20_000)); const gainParam = createFloatParam(createRange('log', -30, 30, Math.E)); + const qParam = createFloatParam(createRange('log', 0.01, 30, 2)); const smoothParam = createFloatParam(createRange('lin', 0, 100)); const snapParam = createFloatParam(createRange('lin', 0, 2000)); const enumParam = createEnumParam(['🍍', '🍉', '🍌', '🍎', '🥭', '🍇', '🥝', '🍋'] as const); @@ -23,6 +24,7 @@ let basicValue = 0; let freqValue = 20; let gainValue = 20; + let qValue = 0; let smoothValue = 0; let snapValue = 0; let enumValue: Variant = '🍎'; @@ -44,6 +46,7 @@

Logarithmic

+

A knob with logarithmic scaling (default base is 10).