8
votes

For this question, I'm using

library("shiny")
library("tuneR")
library("markdown")

though I'm sure only shiny is relevant.

Per the Shiny tag glossary, I should be able to use

tags$audio(src = "wavs/tempwav.wav", type = "audio/wav", autoplay = NA, controls = NA)

which generates the html

<audio src="wavs/tempwav.wav" type="audio/wav" autoplay controls></audio> 

to play a sound in a Shiny server.

I can't get this to work with any kind of mp3, wav, or other file. Edge gives a, "this type of audio file is not supported" error, while the RStudio webpage and Chrome just show a blank playback control. I want it to work with *.wav files generated on the fly by the Shiny program. The wav files are generated correctly and play correctly in every music player I tried (eg, VLC, WMP, MMgold, WinAmp, etc).

Using the code in an HTML file, eg

<HTML>
<audio src="wavs/tempwav.wav" type="audio/wav" autoplay controls></audio>
</HTML>

works just fine in any browser. I think the issue may have to do with how R Shiny deals with directories. Suggestions?

1
Using explicit paths like paste0(getwd(),"/wavs/tempwav.wav") results in the error "this audio stopped playing suddenly" in Edge, still nothing elsewhere. Thinking it may be a result of the reactive nature of Shiny, I tried linking a static wav file without success as well.Zediiiii
Years later, but maybe helpful for others: shiny::tags$source(src = paste0("file", F, ".mp3")) worked for me.Rumpl

1 Answers

12
votes

Solution here. Technically this was written in the Shiny tag glossary - though it was easy to miss. The www sub-directory must be in the present working directory for this to operate correctly.

To be really clear, if your pwd is "c:\dir", then a directory "c:\dir\www" must contain the audio files to be played, and the tag would be written as shown in the glossary:

tags$audio(src = "sound.mp3", type = "audio/mp3", autoplay = NA, controls = NA)

it works for wav files too

tags$audio(src = "sound.wav", type = "audio/wav", autoplay = NA, controls = NA)