微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用R Shiny中的滑块触发音频文件

如何解决使用R Shiny中的滑块触发音频文件

嗨,我正在尝试开发一个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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。