diff --git a/Tone/core/context/ToneAudioBuffer.test.ts b/Tone/core/context/ToneAudioBuffer.test.ts index 3258ab326..7af757ff7 100644 --- a/Tone/core/context/ToneAudioBuffer.test.ts +++ b/Tone/core/context/ToneAudioBuffer.test.ts @@ -115,6 +115,57 @@ describe("ToneAudioBuffer", () => { }, }); }); + + it("can load an audio file with a space in the name", async () => { + const buffer = new ToneAudioBuffer( + "./test/audio/name with space.wav" + ); + expect(buffer.loaded).to.be.false; + await ToneAudioBuffer.loaded(); + expect(buffer.loaded).to.be.true; + }); + + it("can load an encoded audio file with a space in the name", async () => { + const buffer = new ToneAudioBuffer( + "./test/audio/" + encodeURIComponent("name with space.wav") + ); + expect(buffer.loaded).to.be.false; + await ToneAudioBuffer.loaded(); + expect(buffer.loaded).to.be.true; + }); + }); + + context("baseUrl", () => { + afterEach(() => { + // reset baseUrl + ToneAudioBuffer.baseUrl = ""; + }); + + it("can resolve a url without a baseUrl", async () => { + const buffer = new ToneAudioBuffer("./test/audio/sine.wav"); + expect(buffer.loaded).to.be.false; + await ToneAudioBuffer.loaded(); + expect(buffer.loaded).to.be.true; + expect(buffer.duration).to.be.closeTo(3, 0.01); + }); + + it("can resolve a url with a baseUrl", async () => { + ToneAudioBuffer.baseUrl = "./test/audio"; + const buffer = new ToneAudioBuffer("sine.wav"); + expect(buffer.loaded).to.be.false; + await ToneAudioBuffer.loaded(); + expect(buffer.loaded).to.be.true; + expect(buffer.duration).to.be.closeTo(3, 0.01); + }); + + it("can resolve a url with a baseUrl that has a trailing slash", async () => { + ToneAudioBuffer.baseUrl = "./test/audio/"; + const buffer = new ToneAudioBuffer("sine.wav"); + expect(buffer.loaded).to.be.false; + await ToneAudioBuffer.loaded(); + expect(buffer.loaded).to.be.true; + expect(buffer.duration).to.be.closeTo(3, 0.01); + }); }); context("loading", () => { @@ -141,20 +192,6 @@ describe("ToneAudioBuffer", () => { expect(hadError).to.equal(true); }); - it("can load a file with fallback extensions", async () => { - const buffer = await ToneAudioBuffer.load( - "./test/audio/sine.[nope|nada|wav]" - ); - expect(buffer).to.exist; - }); - - it("takes the first supported format when multiple extensions are provided", async () => { - const buffer = await ToneAudioBuffer.load( - "./test/audio/sine.[wav|nope]" - ); - expect(buffer).to.exist; - }); - it("instance .load method returns Promise", (done) => { const promise = new ToneAudioBuffer().load(testFile); expect(promise).to.have.property("then"); diff --git a/Tone/core/context/ToneAudioBuffer.ts b/Tone/core/context/ToneAudioBuffer.ts index be983737d..d9584f8f3 100644 --- a/Tone/core/context/ToneAudioBuffer.ts +++ b/Tone/core/context/ToneAudioBuffer.ts @@ -372,20 +372,6 @@ export class ToneAudioBuffer extends Tone { * Loads a url using fetch and returns the AudioBuffer. */ static async load(url: string): Promise { - // test if the url contains multiple extensions - const matches = url.match(/\[([^\]\[]+\|.+)\]$/); - if (matches) { - const extensions = matches[1].split("|"); - let extension = extensions[0]; - for (const ext of extensions) { - if (ToneAudioBuffer.supportsType(ext)) { - extension = ext; - break; - } - } - url = url.replace(matches[0], extension); - } - // make sure there is a slash between the baseUrl and the url const baseUrl = ToneAudioBuffer.baseUrl === "" || @@ -393,15 +379,7 @@ export class ToneAudioBuffer extends Tone { ? ToneAudioBuffer.baseUrl : ToneAudioBuffer.baseUrl + "/"; - // encode special characters in file path - const location = document.createElement("a"); - location.href = baseUrl + url; - location.pathname = (location.pathname + location.hash) - .split("/") - .map(encodeURIComponent) - .join("/"); - - const response = await fetch(location.href); + const response = await fetch(baseUrl + url); if (!response.ok) { throw new Error(`could not load url: ${url}`); } diff --git a/package-lock.json b/package-lock.json index 7a52ded5f..73c191fd2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "tone", - "version": "15.0.0", + "version": "15.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "tone", - "version": "15.0.0", + "version": "15.1.0", "license": "MIT", "dependencies": { "standardized-audio-context": "^25.3.70", diff --git a/package.json b/package.json index 48635227b..f6c481077 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tone", - "version": "15.0.0", + "version": "15.1.0", "description": "A Web Audio framework for making interactive music in the browser.", "type": "module", "main": "build/esm/index.js", diff --git a/test/audio/name with space.wav b/test/audio/name with space.wav new file mode 100644 index 000000000..a66b5c18c Binary files /dev/null and b/test/audio/name with space.wav differ