pako
pako

Reputation: 1919

Playing a sound in a Firefox add-on

I would like to create a simple add-on that would play a different MP3 recording every time the user double clicks a word in a webpage he is visiting and selects a special option from the context menu.

The MP3 files are located on a remote server. Normally I would use JavaScript+Flash to play the MP3 file. In a Firefox add-on, however, I'm unable to load external scripts for some reason (playing the sound works fine if it's the webpage itself that loads the scripts, but of course I need it to work with every website and not just the ones that include the script).

So what's the easiest way to play a remote MP3 file in a Firefox add-on using JavaScript?

Upvotes: 8

Views: 2924

Answers (4)

Max.-F.
Max.-F.

Reputation: 303

I know this is an old question, but if someone needs a way to do it:

let player = document.createElement("audio");
player.src = browser.runtime.getURL(SOUND_URL);
player.play();

There is one caveat: the user must have allowed autoplay on the website.

Upvotes: 2

Vitaly Zdanevich
Vitaly Zdanevich

Reputation: 14822

var window = require('sdk/window/utils').getMostRecentBrowserWindow();
var audio = ('http://example.com/audio.mp3');
audio.play();

Upvotes: 0

user1226320
user1226320

Reputation: 453

Here is a working code....

var sound = Components.classes["@mozilla.org/sound;1"].createInstance(Components.interfaces.nsISound); 
var soundUri = Components.classes['@mozilla.org/network/standard-url;1'].createInstance(Components.interfaces.nsIURI); 
soundUri.spec = "chrome://secchat/content/RING.WAV"; 
sound.play(soundUri);  

Upvotes: 0

Purge
Purge

Reputation: 647

This may not entirely solve your question, as I don't BELIEVE it plays MP3s, but I'm not certain.

Firefox has nsISound, which I KNOW can play remote WAV files, as I've tested and proved it.

You may want to test it for yourself and see if it leads you a little closer!

var ios = Components.classes['@mozilla.org/network/io-service;1'].getService(Components.interfaces.nsIIOService);
var sound = ios.newURI("http://www.yoursite.com/snds/haha.wav", null, null); 
var player = Components.classes["@mozilla.org/sound;1"].createInstance(Components.interfaces.nsISound);

player.play(sound);

Good luck, I hope this at least gets you close!

Upvotes: 5

Related Questions