使用 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)
这是基于我之前的回答。
你好我正在尝试开发一个闪亮的应用程序,其中一个可移动的滑块触发音频样本,滑块中的每个点(比如从 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)
这是基于我之前的回答