diff --git a/assets/js/creations/audio/audio_state.js b/assets/js/creations/audio/audio_state.js index 174d5e73..a73b23ea 100755 --- a/assets/js/creations/audio/audio_state.js +++ b/assets/js/creations/audio/audio_state.js @@ -145,9 +145,18 @@ export async function loadAudioForClip(clip) { } try { - const safeUrl = encodeURI(clip.sourcePath).replace(/#/g, "%23"); + // ✅ NÃO use encodeURI/encodeURIComponent aqui + let safeUrl = String(clip.sourcePath); + + // se chegou double-encoded, normaliza (caso %2523 apareça) + safeUrl = safeUrl.replace(/%2523/gi, "%23"); + + // se chegou com # cru, escapa + safeUrl = safeUrl.replace(/#/g, "%23"); + const response = await fetch(safeUrl); + if (!response.ok) throw new Error(`Falha ao buscar áudio: ${clip.sourcePath}`); diff --git a/assets/js/creations/file.js b/assets/js/creations/file.js index 8386c4e7..c0a01ca5 100755 --- a/assets/js/creations/file.js +++ b/assets/js/creations/file.js @@ -418,8 +418,8 @@ export async function parseMmpContent(xmlString) { clips.forEach((c, cidx) => { // resolve caminho via manifest; fallback para /samples const src = c.getAttribute("src") || ""; - const fileName = src.split(/[\\/]/).pop(); // "#2.wav" - const projectFolder = encodeURIComponent(lastFolder(src) || ""); // "210424" + const fileName = src.split(/[\\/]/).pop(); // "sample.wav" + const projectFolder = encodeURIComponent(lastFolder(src) || ""); // "project_name" const encodedFile = encodeURIComponent(fileName); // tenta pelo manifest primeiro @@ -428,7 +428,7 @@ export async function parseMmpContent(xmlString) { // se o manifest não tiver ou não vier com /{project}/, monta no padrão do servidor if (!resolvedUrl || (projectFolder && !resolvedUrl.includes(`/${projectFolder}/`))) { resolvedUrl = projectFolder - ? `${SAMPLE_SRC}/${projectFolder}/${encodedFile}` // ✅ SAMPLE_SRC/{project}/{file} + ? `${SAMPLE_SRC}/samples/${projectFolder}/${encodedFile}` : null; }