Commit: cb6bfdd
Parent: 98406fe

Fix changing songs without reloading

Mårten Åsberg committed on 2025-12-18 at 21:20
src/CurveRenderer.ts +6 -11
diff --git a/src/CurveRenderer.ts b/src/CurveRenderer.ts
index 790e86c..19e374c 100644
@@ -1,14 +1,4 @@
import {
Curve,
Group,
LineCurve3,
MathUtils,
Mesh,
MeshPhysicalMaterial,
TubeGeometry,
Vector3,
Vector4,
} from "three";
import { Curve, Group, LineCurve3, MathUtils, Mesh, MeshPhysicalMaterial, TubeGeometry, Vector3, Vector4 } from "three";
import { NURBSCurve } from "three/examples/jsm/curves/NURBSCurve.js";
export class CurveRenderer {
@@ -31,6 +21,7 @@ export class CurveRenderer {
private readonly group: Group;
private readonly curves: Array<Mesh>;
private audioAnalyser: AnalyserNode | null = null;
private previousSampleTime: number | null = null;
public constructor(group: Group) {
@@ -84,6 +75,10 @@ export class CurveRenderer {
if (CurveRenderer.audioAnalyser == null) {
return null;
}
if (this.audioAnalyser != CurveRenderer.audioAnalyser) {
this.audioAnalyser = CurveRenderer.audioAnalyser;
this.previousSampleTime = null;
}
if (
this.previousSampleTime != null &&
this.previousSampleTime + 1 / CurveRenderer.sampleRate > CurveRenderer.audioAnalyser.context.currentTime
src/audioSelector.ts +4 -1
diff --git a/src/audioSelector.ts b/src/audioSelector.ts
index ac39135..42cfad2 100644
@@ -1,5 +1,7 @@
import { CurveRenderer } from "./CurveRenderer";
let source: AudioBufferSourceNode | null = null;
const input = document.querySelector("#input input") as HTMLInputElement;
input?.addEventListener("input", async () => {
if (input.files?.length !== 1) {
@@ -13,7 +15,8 @@ input?.addEventListener("input", async () => {
const audioContext = new AudioContext();
const audioBuffer = await audioContext.decodeAudioData(await file?.arrayBuffer());
const source = audioContext.createBufferSource();
source?.stop();
source = audioContext.createBufferSource();
source.buffer = audioBuffer;
source.loop = true;
source.connect(audioContext.destination);