Skip to content

Commit 437fc73

Browse files
committed
fix: broken log scaling
1 parent d33a762 commit 437fc73

File tree

3 files changed

+14
-8
lines changed

3 files changed

+14
-8
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "svelte-knobs",
33
"description": "Svelte component library for building customizable knob controls.",
4-
"version": "0.1.0",
4+
"version": "0.1.1",
55
"repository": {
66
"url": "https://github.com/eye-wave/svelte-knobs"
77
},

src/lib/params/float-param.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,8 @@ export function unnormalize(value: number, param: FloatParam): number {
4545
}
4646
}
4747

48-
function log(value: number, base = 10): number {
49-
if (value === 0) return 0;
50-
51-
const x = value < 0 ? -value : value;
48+
export function log(value: number, base = 10): number {
49+
const x = Math.abs(value) + 1;
5250
const sign = Math.sign(value);
5351

5452
if (base === 10) return sign * Math.log10(x);
@@ -58,8 +56,13 @@ function log(value: number, base = 10): number {
5856
return sign * (Math.log(x) / Math.log(base));
5957
}
6058

61-
function exp(value: number, base = 10): number {
62-
const x = value < 0 ? -value : value;
59+
export function exp(value: number, base = 10): number {
60+
const sign = Math.sign(value);
61+
const expValue = Math.abs(value);
62+
63+
if (base === 10) return sign * (Math.pow(10, expValue) - 1);
64+
if (base === 2) return sign * (Math.pow(2, expValue) - 1);
65+
if (base === Math.E) return sign * (Math.exp(expValue) - 1);
6366

64-
return Math.pow(base, x) * Math.sign(value);
67+
return sign * (Math.pow(base, expValue) - 1);
6568
}

src/routes/+page.svelte

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
const basicParam = createFloatParam(createRange('lin', 0, 100));
1313
const freqParam = createFloatParam(createRange('log', 20, 20_000));
1414
const gainParam = createFloatParam(createRange('log', -30, 30, Math.E));
15+
const qParam = createFloatParam(createRange('log', 0.01, 30, 2));
1516
const smoothParam = createFloatParam(createRange('lin', 0, 100));
1617
const snapParam = createFloatParam(createRange('lin', 0, 2000));
1718
const enumParam = createEnumParam(['🍍', '🍉', '🍌', '🍎', '🥭', '🍇', '🥝', '🍋'] as const);
@@ -23,6 +24,7 @@
2324
let basicValue = 0;
2425
let freqValue = 20;
2526
let gainValue = 20;
27+
let qValue = 0;
2628
let smoothValue = 0;
2729
let snapValue = 0;
2830
let enumValue: Variant<typeof enumParam> = '🍎';
@@ -44,6 +46,7 @@
4446
<h2>Logarithmic</h2>
4547
<Knob param={freqParam} bind:value={freqValue} label="Frequency" unit="hz" />
4648
<Knob param={gainParam} bind:value={gainValue} label="Gain" unit="dB" />
49+
<Knob param={qParam} bind:value={qValue} label="Q" unit="dB" decimalDigits={2} />
4750

4851
<p>A knob with logarithmic scaling (default base is 10).</p>
4952
</div>

0 commit comments

Comments
 (0)