Play a local mp3 file on Alexa Echo dot

@MarkWattTech found your video before stumbling on this thread. Great tutorial, thank you for making it.

The only drawback so far is playback of the mp3’s when using a speaker group in Alexa as the target (e.g. media_player.everywhere) doesn’t work. I think part of the problem is you have to set the “type” to “announce” when using a speaker group as a target, instead of “tts”. It appears the audio tag isn’t supported when using “announce”.

Note that I’ve converted my mp3 files using the Jovo converter, and can play them from a browser using my Nabu Casa base url (e.g. https://**MY NABU CASA UNIQUE ID**.ui.nabu.casa/local/mp3/Alexa-tng-red-alert.mp3 ). They all work fine when playing to a single Echo device.

For example, this works fine:

service: notify.alexa_media_everywhere
data:
  message: "Alert, unauthorized access detected."
  title: Intruder Alert
  data:
    type: announce

This, however, doesn’t. It only plays the bong sound that Alexa plays when you use the announce type:

service: notify.alexa_media_everywhere
data:
  message: "<audio src='https://**MY NABU CASA UNIQUE ID**.ui.nabu.casa/local/mp3/Alexa-tng-red-alert.mp3' />"
  title: Intruder Alert
  data:
    type: announce

If you change “type” to “tts”, nothing plays for either.

EDIT:
Figured out a workaround thanks to actually reading the description of the parameter values in the developer tools. This workaround is probably common knowledge or at least obvious to many, but since I was being dense this morning, I figured it may not be readily apparent to others.

If you need to play the mp3 to multiple Echo devices, you have to manually specify each device as a target, such as this:

service: notify.alexa_media
data:
  message: "<audio src='https://**MY NABU CASA UNIQUE ID**.ui.nabu.casa/local/mp3/Alexa-tng-chime-clean.mp3' />"
  target: 
    - media_player.office_echo
    - media_player.living_room_echo_show
  data:
    type: tts
3 Likes

I think you need use Nabu for this to work.

Yes, that is correct.

Since I have a trusted SSL certificate set up in HA (e.g. not a self signed certificate) and port forwarding enabled on my router, I tried using the direct public URL to my HA instance. That decidedly did not work, as expected.

Edit: probably also worth noting that the Jovo Tech site only hosts your converted mp3 for 24 hours, so you pretty much have to have Nabu if you don’t want to create custom Alexa skills.

Thanks. Jovo url is working. What’s special in Jovo url (vs duckdns url)?

Is there a guide for that?

I couldn’t answer that, to be honest. Although, it may not have worked with my direct URL since there is a port included in the address, e.g https://my.custom_ha_url.com:8123. It may be just that Alexa can’t handle the port which probably makes sense. The way my network is set up, https traffic on port 443 is directed to another set of servers behind a proxy that HA isn’t configured as a part of (mainly due to lack of time and necessity). I wouldn’t generally recommend exposing HA to the internet directly, but I had a lot of inconsistent issues with location tracking with HA mobile apps when they were pointed to the Nabu link.

As far as custom skills, I think there is some info closer to the top of this thread, but I didn’t spend any time looking in to it. I’m comfortable creating an Alexa skill, but since using the Nabu url is working for me now, I haven’t had reason to mess with it.

And why would a custom Alexa skill be needed?
If Alexa can play the MP3 from the jovo URL without any skill installed why can’t it play the same MP3 from my own site?
I have a domain with SSL, i dropped the MP3 on there, i can play the MP3 with my browser.
But when i change the URL from:
message: "<audio src='https://www.jovo.tech/audio/lpQALZpJ-de-droger-is-klaar.mp3'/>"
to:
message: "<audio src='https://automatiseer.eu/audio/De-droger-is-klaar.mp3'/>"
Alexa starts complaining about a “Simon Says” skill.

Again, both URL’s are reachable, both URL’s have a valid SSL certificate.
So, what am i missing?

EDIT: Hmmm… i think this explains what is going wrong…

To implement account linking for smart home skills, you must have the following prerequisites:

  • Your system must support OAuth 2.0 and the authorization code grant type.

If you do not have your own authorization server, you can use Login with Amazon (LWA) or any OAuth 2.0 provider that has a certificate signed by an Amazon-approved certificate authority. Note that you cannot use https://letsencrypt.org/, even though it is on the certificate list.

And i’m using Letsencrypt on my domain.

EDIT2:
I moved my SSL from Letsencrypt to Cloudflare, and poof it works, i can play any MP3 without a problem.

EDIT3: and after trial and error i also got it working using Node Red.
afbeelding
And this is the Data field in json

{
    "message": "<audio src='https://automatiseer.eu/audio/kleine-wasjes-grote-wasjes.mp3'/>",
    "data": {
        "type": "tts"
    }
}
3 Likes

Curious if anyone here can help with the converting of the audio files to the amazon required format. I’m trying to use the command provided by the jovo site to do the conversion which is as follows.

ffmpeg -i -ac 2 -codec:a libmp3lame -b:a 48k -ar 24000 <output-file.mp3>

However, it does not seem to be working. If I run a file through the jovo site and then look at it with the file command I get the following.

file iYEHPdGL-fire-dispatch-07-03-2021-09-24-56.mp3
iYEHPdGL-fire-dispatch-07-03-2021-09-24-56.mp3: Audio file with ID3 version 2.4.0, contains:MPEG ADTS, layer III, v2, 48 kbps, 24 kHz, JntStereo

This file will play on the echo using the skill.

However, when I try to convert the same file on my own using the command provided by the jovo site, I get the following output using the file command.

file new_sdr.mp3
new_sdr.mp3: Audio file with ID3 version 2.4.0, contains:MPEG ADTS, layer III, v2, 64 kbps, 24 kHz, Stereo

This file will not play on the echo using the skill. Looking through the documentation I don’t understand why the output of the ffmpeg command is 64kpbs since it should be 48kbps. Any ideas on what I’m doing wrong?

Well that’s annoying! Been trying to get this work with my domain (running letsencrypt) and even tried another one that I found was using cloudflare, and neither worked. Swapped my mp3 code for yours and it worked right away. Wonder what the work around is besides switching certificates…Guess I’ll just have to hose some files 3rd party until I figure something out.

Has anyone ever found a fix for this not working with letsencrypt certs?

Nope, Amazon doesn’t like Letsencrypt, so the only way to get this working is using another CERT.
Cloudflare is free, and works.

1 Like

I have this running every half hour, 12 hours a day, without fail, with LetsEncrypt certs for a few weeks now, but I didn’t change anything from how I had it previously… it just spontaneously started working.

I had the same problem with my Let’s Encrypt certificate… Thank you for that info btw! My solution was to host my mp3 on a Backblaze B2 account. The first 10gb is free and you can get direct link to your file. So far so good! I hope for a better solution in the future but for now it’s good enough.

1 Like

@0xHack Thanks for this… Backblaze is what I decided to use for simplicity. I am using duckdns and not sure when it stop working.

1 Like

I’m using following shell_command with hassOS ffmpeg which generates mp3 playable by Alexa:

ffmpeg -y -i /config/www/source.mp3 -ac 2 -codec:a libmp3lame -b:a 48k -ar 16000 /config/www/out.mp3

Unfortunately isn’t working for me… Echo Dot is working fine through Home Assistant and I can play standard text notifications but i can’t play MP3 files.
I can’t even play the ones converted at the Jovo site.
Every time I try, Alexa is complaining about “Simon Says” Skill… (Of course this skill is also installed and running)
My code:

service: notify.alexa_media
data:
  message: "<audio scr='https://www.jovo.tech/audio/3pjSzfp6-alarm-system-alarm1.mp3'/>"
  target: media_player.alexa_home_asistant
  data:
    type: tts

I also test with two different Echo Dots.

Any ideas?
Thanks in advance.

@MarkWattTech

Having same problem as @rlopez2005. I followed your youtube, can play the mp3 via the url. But when trying the service in developer tools, my alexa says shes having trouble accessing the simon says now skill. I THINK i have the right skill, but searching the skills stores, theres many under that name. Can you show me which one you have?

1 Like

Is anybdy else having a issue with the web page not allowing a audio file to be downloaded after it was uploaded?

I was able to do this a few weeks ago?

any suggestions? maybe a computer setting?

yep, same issue.

same here, had it for a few ways, trying to work out an alternative and simple way of doing it

Here you go: ffmpeg -i -ac 2 -codec:a libmp3lame -b:a 48k -ar 16000 <output-file.mp3>

1 Like