Trouble playing audio from *.mp3* files in Sanity blog site
4 replies
Last updated: Nov 28, 2022
A
Hi everyone. I've been stuck on something for a few days now, and after looking online and trying different things, I still can't figure it out. I haven't been using Sanity that long and have not yet had to do this, so I don't know what I'm doing wrong.
So I'm building like a blog site that displays cards with student names, bios, an image, etc. Each card also has a button that when clicked, should play a short audio clip from an
.mp3 file. I am able to see all of the information displayed in the browser when the information is entered in Sanity (the text for the name bio, the image file, etc.). However, I am not able to hear the audio when I click the button to hear the audio. When I click the button, I get the error in the console (see screenshot). As I understand from the documentation , the
However, I noticed that when I use a URL instead of
However, it does not work when I use
So I'm building like a blog site that displays cards with student names, bios, an image, etc. Each card also has a button that when clicked, should play a short audio clip from an
.mp3 file. I am able to see all of the information displayed in the browser when the information is entered in Sanity (the text for the name bio, the image file, etc.). However, I am not able to hear the audio when I click the button to hear the audio. When I click the button, I get the error in the console (see screenshot). As I understand from the documentation , the
filetype is used for all other file types such as documents and audio files. Going by this information, I added to my "student" schema (lines 17-19 in my screenshot). Then, in my component, I added audio to my query (see "query" screenshot", line 10). Finally, down below in the component, I added a click event for the audio (see "button" screenshot, lines 4-7), using
student.audioin order to get the .mp3 audio from Sanity. Up above, I used
student.nameto get the name,
student.imageto get the image, etc., and they all worked. The audio is the only thing I am having problems with.
However, I noticed that when I use a URL instead of
student.audioit works, though I need it to work when an .mp3 file is added into Sanity, and not a URL:
let audio = new Audio('<https://assets.coderrocketfuel.com/pomodoro-times-up.mp3>');
student.audioand this is when I get the error in the console. I don't know what I am doing wrong and how I can make it work so that the .mp3 audio plays. Any thoughts or ideas? Maybe my schema or query or both are incorrect? Any ideas would help. And by the way, there is nothing wrong with the .mp3 files I'm using (they all work), so it's not that. Thank you so much!
Nov 27, 2022, 10:18 PM
D
File will contain a reference to an asset, like image. Try apply the same logic in your groq query as you have for image and reference it by student.audio.asset.url
Nov 27, 2022, 10:26 PM
A
user G
Thank you, Daniel. I'll play around with that and see if I can get that to work.Nov 27, 2022, 10:41 PM
A
user G
Update: I finally got it! Using what you mentioned, I wrote my GROQ query like this:audio{ asset->{ _id, url } },
onClick= {() => { let audio = new Audio(student.audio.asset.url); audio.play(); }}
Nov 28, 2022, 2:07 AM
D
Awesome!
Nov 28, 2022, 9:42 AM
Sanity– build remarkable experiences at scale
Sanity is a modern headless CMS that treats content as data to power your digital business. Free to get started, and pay-as-you-go on all plans.