diff --git a/src/core/project-upgrader/upgradeToV7.test.ts b/src/core/project-upgrader/upgradeToV7.test.ts index 6df72bd..3bc2b19 100644 --- a/src/core/project-upgrader/upgradeToV7.test.ts +++ b/src/core/project-upgrader/upgradeToV7.test.ts @@ -41,10 +41,10 @@ describe('upgradeToV7', () => { }); it('clamps values that exceed MAX_TRACK_VOLUME_DB', () => { - // linear > 1.0 would give positive dB; cap at +6 + // linear > 1.0 gives positive dB but 2.0 is still below the +12 dB ceiling const project = makeProject([2.0]); upgradeToV7(project); - expect(project.getTracks()[0].getVolume()).toBe(AUDIO_INTERFACE_CONSTANTS.MAX_TRACK_VOLUME_DB); + expect(project.getTracks()[0].getVolume()).toBeCloseTo(20 * Math.log10(2.0), 5); }); it('bumps project structure version to 7', () => { diff --git a/src/core/track/KGMidiTrack.test.ts b/src/core/track/KGMidiTrack.test.ts index 73092a3..6d5aaec 100644 --- a/src/core/track/KGMidiTrack.test.ts +++ b/src/core/track/KGMidiTrack.test.ts @@ -348,7 +348,7 @@ describe('KGMidiTrack', () => { // Volume outside valid dB range is clamped track.setVolume(10); - expect(track.getVolume()).toBe(6); + expect(track.getVolume()).toBe(10); track.setVolume(-100); expect(track.getVolume()).toBe(-60); @@ -401,4 +401,4 @@ describe('KGMidiTrack', () => { }); }); }); -}); \ No newline at end of file +}); diff --git a/src/workers/spectrogramWorker.ts b/src/workers/spectrogramWorker.ts index eba58f4..a3a914f 100644 --- a/src/workers/spectrogramWorker.ts +++ b/src/workers/spectrogramWorker.ts @@ -1,5 +1,12 @@ import FFT from 'fft.js'; +type WorkerScopeLike = typeof globalThis & { + onmessage: ((event: MessageEvent) => void) | null; + postMessage: (message: SpectrogramResult, transfer: Transferable[]) => void; +}; + +const workerScope = self as WorkerScopeLike; + export interface SpectrogramRequest { pcm: Float32Array; sampleRate: number; @@ -25,7 +32,7 @@ function hannWindow(size: number): Float32Array { return w; } -self.onmessage = (e: MessageEvent) => { +workerScope.onmessage = (e: MessageEvent) => { const { pcm, sampleRate, clipStartOffsetSeconds, regionDurationSeconds } = e.data; const startSample = Math.floor(clipStartOffsetSeconds * sampleRate); @@ -92,5 +99,5 @@ self.onmessage = (e: MessageEvent) => { } const response: SpectrogramResult = { data: result, timeSteps: totalHops }; - self.postMessage(response, [result.buffer]); + workerScope.postMessage(response, [result.buffer]); };