From d5c84d35e44c2e6fe2358cda5716afd73dd6f489 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Kr=C3=BCger?= Date: Wed, 19 Nov 2025 08:11:46 +0100 Subject: [PATCH] fix: install lamejs from GitHub repo for proper browser support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Switched from npm package to GitHub repo (github:zhuker/lamejs) which includes the proper browser build. Reverted to simple dynamic import. Fixes MP3 export MPEGMode reference error. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- lib/audio/export.ts | 29 ++--------------------------- package.json | 2 +- pnpm-lock.yaml | 11 ++++++----- 3 files changed, 9 insertions(+), 33 deletions(-) diff --git a/lib/audio/export.ts b/lib/audio/export.ts index 948cc13..8c57a97 100644 --- a/lib/audio/export.ts +++ b/lib/audio/export.ts @@ -129,31 +129,6 @@ export function downloadArrayBuffer( URL.revokeObjectURL(url); } -/** - * Load lamejs library dynamically - */ -async function loadLamejs(): Promise { - // Check if already loaded - if (typeof window !== 'undefined' && (window as any).lamejs) { - return (window as any).lamejs; - } - - // Load the script from node_modules - return new Promise((resolve, reject) => { - const script = document.createElement('script'); - script.src = '/node_modules/.pnpm/lamejs@1.2.1/node_modules/lamejs/lame.min.js'; - script.onload = () => { - if ((window as any).lamejs) { - resolve((window as any).lamejs); - } else { - reject(new Error('lamejs failed to load')); - } - }; - script.onerror = () => reject(new Error('Failed to load lamejs script')); - document.head.appendChild(script); - }); -} - /** * Convert an AudioBuffer to MP3 */ @@ -161,8 +136,8 @@ export async function audioBufferToMp3( audioBuffer: AudioBuffer, options: ExportOptions = { format: 'mp3', bitrate: 192 } ): Promise { - // Load lamejs library - const lamejs = await loadLamejs(); + // Dynamically import lamejs from GitHub repo (has proper browser build) + const lamejs = await import('lamejs'); const { bitrate = 192, normalize } = options; const numberOfChannels = Math.min(audioBuffer.numberOfChannels, 2); // MP3 supports max 2 channels diff --git a/package.json b/package.json index e719c43..15fa1ae 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "dependencies": { "clsx": "^2.1.1", "fflate": "^0.8.2", - "lamejs": "^1.2.1", + "lamejs": "github:zhuker/lamejs", "lucide-react": "^0.553.0", "next": "^16.0.0", "react": "^19.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 31b74a8..bf2fc72 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,8 +15,8 @@ importers: specifier: ^0.8.2 version: 0.8.2 lamejs: - specifier: ^1.2.1 - version: 1.2.1 + specifier: github:zhuker/lamejs + version: https://codeload.github.com/zhuker/lamejs/tar.gz/582bbba6a12f981b984d8fb9e1874499fed85675 lucide-react: specifier: ^0.553.0 version: 0.553.0(react@19.2.0) @@ -1384,8 +1384,9 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - lamejs@1.2.1: - resolution: {integrity: sha512-s7bxvjvYthw6oPLCm5pFxvA84wUROODB8jEO2+CE1adhKgrIvVOlmMgY8zyugxGrvRaDHNJanOiS21/emty6dQ==} + lamejs@https://codeload.github.com/zhuker/lamejs/tar.gz/582bbba6a12f981b984d8fb9e1874499fed85675: + resolution: {tarball: https://codeload.github.com/zhuker/lamejs/tar.gz/582bbba6a12f981b984d8fb9e1874499fed85675} + version: 1.2.1 language-subtag-registry@0.3.23: resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} @@ -3412,7 +3413,7 @@ snapshots: dependencies: json-buffer: 3.0.1 - lamejs@1.2.1: + lamejs@https://codeload.github.com/zhuker/lamejs/tar.gz/582bbba6a12f981b984d8fb9e1874499fed85675: dependencies: use-strict: 1.0.1