gpt4 book ai didi

javascript - 在播放下一个声音之前停止任何以前在 javascript 中播放的声音(base64)的方法

转载 作者:行者123 更新时间:2023-12-05 00:36:23 25 4
gpt4 key购买 nike

我有一个 JavaScript 函数,可以从 base64 纯文本中播放特定的声音。我正在寻找的东西我认为很简单,但我对 js 一点也不熟悉,因为我实际上在 R 中使用 js 作为 Shiny 应用程序的一部分。我只是在寻找一种方法,当调用此函数时,它将取消任何先前播放的来自可能已经播放的相同或类似函数的声音:

shinyjs.soundmaker = function() {
var snd = new Audio("data:audio/wav;base64,blablablabla");
snd.play();
}
任何帮助都会很棒!

最佳答案

使用 js 和 R Shiny 解决这个问题的方法是创建一个单独的 js 函数来阻止声音播放。然后,每次你想开始一个新的声音,你首先还要调用声音停止函数——因此,任何以前播放的声音都会在新的声音开始之前停止。

library(shiny)
library(shinyjs)

ui <- fluidPage(

useShinyjs(),

extendShinyjs(script = "marbles.js", functions = c("marbles")),
extendShinyjs(script = "birds.js", functions = c("birds")),
extendShinyjs(script = "stopper.js", functions = c("stopper")),

column(10, offset = 1,
align = "center",
fluidRow(column(4,
align = "center",
column(10,
align = "center",
offset = 1,
br(),
actionButton('sound1','Sound 1', width = '100%',
style="color: #ffffff; background-color: #35467b; border-color: #2e1911"))),
column(4,
align = "center",
column(10,
align = "center",
offset = 1,
br(),
actionButton('sound2','Sound 2', width = '100%',
style="color: #ffffff; background-color: #1dbd6b; border-color: #1dbd6b"))),
column(4,
align = "center",
column(10,
align = "center",
offset = 1,
br(),
actionButton('stopper','Stop sounds', width = '100%',
style="color: #ffffff; background-color: #b73838; border-color: #b73838")))
)),
)

server <- function(input, output) {

observeEvent(input$sound1, {

js$stopper()
js$birds()

})

observeEvent(input$sound2, {

js$stopper()
js$marbles()

})

observeEvent(input$stopper, {

js$stopper()

})


}

# Run the application
shinyApp(ui = ui, server = server)
声音停止功能很简单:
shinyjs.stopper = function() {

snd.pause();

}
那么这两个声音函数将如下所示,但是您在“新音频”部分插入自己的 base64 纯文本(要将 wav 转换为 base64,请参见例如: https://base64.guru/converter/encode/audio/wav)。所有 javascript 函数都应保存为 js 文件,位于与您的应用程序相同的工作目录中名为“www”的文件夹中:
shinyjs.birds = function() {
snd = new Audio("data:audio/wav;base64,blablablabla");
snd.play();
}

shinyjs.marbles = function() {
snd = new Audio("data:audio/wav;base64,blablablabla");
snd.play();
}
简而言之,无论出于何种原因,在开始播放新声音的函数开头调用 sound.pause() 似乎都不起作用。相反,制作一个单独的函数来停止声音,然后再运行新的声音。

关于javascript - 在播放下一个声音之前停止任何以前在 javascript 中播放的声音(base64)的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70085204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com