bugfixes, removals
This commit is contained in:
@@ -11,6 +11,6 @@ export function createBassSynth(): Tone.Synth {
|
|||||||
sustain: 0.8,
|
sustain: 0.8,
|
||||||
release: 2.0
|
release: 2.0
|
||||||
},
|
},
|
||||||
volume: -15
|
volume: -13
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ export function createPadSynth(isDay: boolean): Tone.PolySynth {
|
|||||||
sustain: 0.85, // Higher sustain for consistent pad presence
|
sustain: 0.85, // Higher sustain for consistent pad presence
|
||||||
release: isDay ? 2.5 : 4.0 // Longer release for smooth tail-off
|
release: isDay ? 2.5 : 4.0 // Longer release for smooth tail-off
|
||||||
},
|
},
|
||||||
volume: -16 // Quieter to sit back in the mix and reduce mid heaviness
|
volume: -14 // Quieter to sit back in the mix and reduce mid heaviness
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,17 +55,22 @@
|
|||||||
this.x += this.vx;
|
this.x += this.vx;
|
||||||
this.y += this.vy;
|
this.y += this.vy;
|
||||||
|
|
||||||
|
// Guard against invalid values
|
||||||
|
const safeAudioLevel = isFinite(audioLevel) ? audioLevel : 0;
|
||||||
|
const safeBass = isFinite(bass) ? bass : 0;
|
||||||
|
const safeMid = isFinite(mid) ? mid : 0;
|
||||||
|
|
||||||
// Subtle audio reactive displacement (less frequent on mobile)
|
// Subtle audio reactive displacement (less frequent on mobile)
|
||||||
const updateFrequency = isMobile ? 5 : 3;
|
const updateFrequency = isMobile ? 5 : 3;
|
||||||
if (p.frameCount % updateFrequency === 0) {
|
if (p.frameCount % updateFrequency === 0) {
|
||||||
const displacement = audioLevel * 20;
|
const displacement = safeAudioLevel * 20;
|
||||||
const angle = p.noise(this.x * 0.01, this.y * 0.01, p.frameCount * 0.01) * p.TWO_PI;
|
const angle = p.noise(this.x * 0.01, this.y * 0.01, p.frameCount * 0.01) * p.TWO_PI;
|
||||||
this.x += p.cos(angle) * displacement * 0.05;
|
this.x += p.cos(angle) * displacement * 0.05;
|
||||||
this.y += p.sin(angle) * displacement * 0.05;
|
this.y += p.sin(angle) * displacement * 0.05;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Subtle audio reactive size
|
// Subtle audio reactive size
|
||||||
this.size = p.map(bass + mid, 0, 2, 3, 10);
|
this.size = p.map(safeBass + safeMid, 0, 2, 3, 10);
|
||||||
|
|
||||||
// Wrap around edges
|
// Wrap around edges
|
||||||
if (this.x < -50) this.x = p.width + 50;
|
if (this.x < -50) this.x = p.width + 50;
|
||||||
@@ -76,7 +81,8 @@
|
|||||||
|
|
||||||
display(p: p5, audioLevel: number) {
|
display(p: p5, audioLevel: number) {
|
||||||
p.noStroke();
|
p.noStroke();
|
||||||
const dynamicAlpha = p.map(audioLevel, 0, 1, 120, 220);
|
const safeAudioLevel = isFinite(audioLevel) ? audioLevel : 0;
|
||||||
|
const dynamicAlpha = p.map(safeAudioLevel, 0, 1, 120, 220);
|
||||||
p.fill(255, dynamicAlpha);
|
p.fill(255, dynamicAlpha);
|
||||||
p.ellipse(this.x, this.y, this.size, this.size);
|
p.ellipse(this.x, this.y, this.size, this.size);
|
||||||
}
|
}
|
||||||
@@ -145,7 +151,10 @@
|
|||||||
for (let i = 0; i < audioData.length; i++) {
|
for (let i = 0; i < audioData.length; i++) {
|
||||||
// Convert from decibels to linear scale (0-1)
|
// Convert from decibels to linear scale (0-1)
|
||||||
// FFT returns values from -100 to 0 dB
|
// FFT returns values from -100 to 0 dB
|
||||||
const normalized = p.map(audioData[i], -100, -30, 0, 1, true);
|
const value = audioData[i];
|
||||||
|
// Guard against NaN/Infinity
|
||||||
|
if (!isFinite(value)) continue;
|
||||||
|
const normalized = p.map(value, -100, -30, 0, 1, true);
|
||||||
sum += normalized;
|
sum += normalized;
|
||||||
|
|
||||||
if (i < bassRange) {
|
if (i < bassRange) {
|
||||||
@@ -157,17 +166,17 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Average and amplify moderately
|
// Average and amplify moderately (with division by zero guards)
|
||||||
let audioLevel = (sum / audioData.length) * 2;
|
let audioLevel = audioData.length > 0 ? (sum / audioData.length) * 2 : 0;
|
||||||
bass = (bass / bassRange) * 2.5;
|
bass = bassRange > 0 ? (bass / bassRange) * 2.5 : 0;
|
||||||
mid = (mid / (midRange - bassRange)) * 2;
|
mid = (midRange - bassRange) > 0 ? (mid / (midRange - bassRange)) * 2 : 0;
|
||||||
treble = (treble / (audioData.length - trebleStart)) * 1.5;
|
treble = (audioData.length - trebleStart) > 0 ? (treble / (audioData.length - trebleStart)) * 1.5 : 0;
|
||||||
|
|
||||||
// Clamp values
|
// Clamp values to prevent NaN
|
||||||
audioLevel = p.constrain(audioLevel, 0, 1);
|
audioLevel = isNaN(audioLevel) ? 0 : p.constrain(audioLevel, 0, 1);
|
||||||
bass = p.constrain(bass, 0, 1);
|
bass = isNaN(bass) ? 0 : p.constrain(bass, 0, 1);
|
||||||
mid = p.constrain(mid, 0, 1);
|
mid = isNaN(mid) ? 0 : p.constrain(mid, 0, 1);
|
||||||
treble = p.constrain(treble, 0, 1);
|
treble = isNaN(treble) ? 0 : p.constrain(treble, 0, 1);
|
||||||
|
|
||||||
// Fixed connection distance for consistency
|
// Fixed connection distance for consistency
|
||||||
const connectionDist = 100;
|
const connectionDist = 100;
|
||||||
|
|||||||
@@ -63,7 +63,9 @@
|
|||||||
|
|
||||||
const delayTime = $derived.by(() => {
|
const delayTime = $derived.by(() => {
|
||||||
const speed = windSpeed10m ?? 0;
|
const speed = windSpeed10m ?? 0;
|
||||||
return speed > 5 ? '4n' : '8n';
|
// Map 0-20 m/s wind to 0.1-0.8 second delay range
|
||||||
|
const normalized = Math.min(20, speed) / 20;
|
||||||
|
return 0.1 + normalized * 0.7;
|
||||||
});
|
});
|
||||||
|
|
||||||
const delayFeedback = $derived.by(() => {
|
const delayFeedback = $derived.by(() => {
|
||||||
@@ -149,8 +151,7 @@
|
|||||||
|
|
||||||
// Set all audio parameters once (static until page refresh)
|
// Set all audio parameters once (static until page refresh)
|
||||||
if (delay) {
|
if (delay) {
|
||||||
const delayTimeSeconds = Tone.Time(delayTime).toSeconds();
|
delay.delayTime.value = delayTime;
|
||||||
delay.delayTime.value = delayTimeSeconds;
|
|
||||||
delay.feedback.value = delayFeedback;
|
delay.feedback.value = delayFeedback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -81,10 +81,12 @@
|
|||||||
return Math.max(0.3, Math.min(1, humidity / 100));
|
return Math.max(0.3, Math.min(1, humidity / 100));
|
||||||
});
|
});
|
||||||
|
|
||||||
// Delay time: 8th note for calm, quarter note for windy
|
// Delay time: shorter delay for calm, longer for windy (scaled to 0.1-0.8 seconds)
|
||||||
const delayTime = $derived.by(() => {
|
const delayTime = $derived.by(() => {
|
||||||
const speed = windSpeed10m ?? 0;
|
const speed = windSpeed10m ?? 0;
|
||||||
return speed > 5 ? '4n' : '8n';
|
// Map 0-20 m/s wind to 0.1-0.8 second delay range
|
||||||
|
const normalized = Math.min(20, speed) / 20;
|
||||||
|
return 0.1 + normalized * 0.7;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Delay feedback: stronger with more wind
|
// Delay feedback: stronger with more wind
|
||||||
@@ -245,8 +247,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (delay) {
|
if (delay) {
|
||||||
const delayTimeSeconds = Tone.Time(delayTime).toSeconds();
|
delay.delayTime.value = delayTime;
|
||||||
delay.delayTime.value = delayTimeSeconds;
|
|
||||||
delay.feedback.value = delayFeedback;
|
delay.feedback.value = delayFeedback;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -516,7 +517,7 @@
|
|||||||
<p class="m-0">BPM: {bpm.toFixed(2)}</p>
|
<p class="m-0">BPM: {bpm.toFixed(2)}</p>
|
||||||
<p class="m-0">Weather Extremity: {(weatherExtremity * 100).toFixed(0)}%</p>
|
<p class="m-0">Weather Extremity: {(weatherExtremity * 100).toFixed(0)}%</p>
|
||||||
<p class="m-0">Reverb: {reverbWet.toFixed(2)}</p>
|
<p class="m-0">Reverb: {reverbWet.toFixed(2)}</p>
|
||||||
<p class="m-0">Delay: {delayTime} @ {delayFeedback.toFixed(2)} feedback</p>
|
<p class="m-0">Delay: {delayTime.toFixed(2)}s @ {delayFeedback.toFixed(2)} feedback</p>
|
||||||
<p class="m-0">Filter: {Math.round(filterCutoff)}Hz Q:{filterResonance.toFixed(1)}</p>
|
<p class="m-0">Filter: {Math.round(filterCutoff)}Hz Q:{filterResonance.toFixed(1)}</p>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
Reference in New Issue
Block a user