问题描述
嗨,我正在尝试开发一个Shiny应用程序,其中可移动的滑块会触发音频样本,从而将滑块中的每个点(例如,从0到100)映射到特定的音频。因此,移动滑块将根据滑块位置改变声音。理想情况下,我希望滑块位置之间的过渡能够使声音平滑并具有高度的交互性。
tags$audio(src = "sound.mp3",type = "audio/mp3",autoplay = NA,controls = NA)
有人知道完成此类任务的最佳方法或给我一些建议吗?
解决方法
您可以通过JS更改src
参数,并使用滑块触发更改。
请检查以下内容:
library(shiny)
library(htmltools)
library(tuneR)
library(shinyjs)
xseq <- round(seq(from = 440,to = 880,length.out = 100),digits = 0)
if(!dir.exists("audio")){
dir.create("audio")
}
# create some audio files
filenames = paste0("audio/",xseq,".wav")
for (i in seq_along(xseq)) {
Wobj <- sine(xseq[i])
writeWave(Wobj,filename = filenames[i])
}
# Add directory of static resources to Shiny's web server
addResourcePath(prefix = "audioResources",directoryPath = "audio")
myAudioResources <- paste0("audioResources/",".wav")
ui <- fluidPage(
useShinyjs(),tags$audio(id = "myaudio",controls = NA,autoplay = NA,src = ""),sliderInput(inputId = "selectTrack","Select track",min = 1,max = length(xseq),value = 1)
)
server <- function(input,output,session) {
observeEvent(input$selectTrack,{
runjs(sprintf("document.getElementById('myaudio').src = '%s';",myAudioResources[input$selectTrack])) # dynamically change src
})
}
shinyApp(ui,server)
这是基于我之前的答案here。