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

Trigger audio files using a slider in R 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/", xseq, ".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)

这是基于我之前的回答