Javascript AudioContext没有暂停属性?

Javascript AudioContext没有暂停属性?,javascript,audio,html5-audio,audiocontext,webkitaudiocontext,Javascript,Audio,Html5 Audio,Audiocontext,Webkitaudiocontext,我以前使用过javascriptAudio(),但现在我需要在音频中添加一些混响效果,我使用的是使用AudioContext api的reverb.js。我有可用的开始属性,但没有暂停属性?如何暂停或停止音频 这是我的密码: <script src="http://reverbjs.org/reverb.js"></script> <script> // 1) Setup your audio context (once) and extend with Re

我以前使用过javascript
Audio()
,但现在我需要在音频中添加一些混响效果,我使用的是使用AudioContext api的reverb.js。我有可用的开始属性,但没有暂停属性?如何暂停或停止音频

这是我的密码:

<script src="http://reverbjs.org/reverb.js"></script>
<script>
// 1) Setup your audio context (once) and extend with Reverb.js.
var audioContext = new (window.AudioContext || window.webkitAudioContext)();
reverbjs.extend(audioContext);

// 2) Load the impulse response; upon load, connect it to the audio output.
var reverbUrl = "http://reverbjs.org/Library/SaintLawrenceChurchMolenbeekWersbeekBelgium.m4a";
var reverbNode = audioContext.createReverbFromUrl(reverbUrl, function() {
  reverbNode.connect(audioContext.destination);
});

// 3) Load a test sound; upon load, connect it to the reverb node.
var sourceUrl = "./sample.mp3";
var sourceNode = audioContext.createSourceFromUrl(sourceUrl, function() {
  sourceNode.connect(reverbNode);
});
</script>
<a href="javascript:sourceNode.start()">Play</a>
<a href="javascript:sourceNode.stop()">Stop</a>

//1)设置音频上下文(一次)并使用Reverb.js进行扩展。
var audioContext=new(window.audioContext | | window.webkitadiocontext)();
扩展(音频上下文);
//2)加载脉冲响应;加载后,将其连接到音频输出。
var reverbUrl=”http://reverbjs.org/Library/SaintLawrenceChurchMolenbeekWersbeekBelgium.m4a";
var reverbNode=audioContext.createReverbFromUrl(reverbUrl,function(){
连接(audioContext.destination);
});
//3)加载测试声音;加载后,将其连接到混响节点。
var sourceUrl=“./sample.mp3”;
var sourceNode=audioContext.createSourceFromUrl(sourceUrl,function(){
连接(混响节点);
});

此外,我还尝试使用了
stop()
,但当我在单击stop后启动
start()
时,
start()
不起作用。你能帮我一个解决方案吗?

你可以使用
AudioContext
suspend()
resume()
方法暂停和恢复音频:

用一个播放/暂停/恢复按钮实现这一点的一种方法是添加一个控制播放器状态的功能。例如:

let started = false;
function pauseOrResume() {
    if (!started) {
        sourceNode.start();
        started = true;
        document.getElementById("pauseButton").innerHTML = 'Pause';
    } else if (audioContext.state === 'running') {
        audioContext.suspend().then(function () {
            document.getElementById("pauseButton").innerHTML = 'Resume';
        });
    } else if (audioContext.state === 'suspended') {
        audioContext.resume().then(function () {
            document.getElementById("pauseButton").innerHTML = 'Pause';
        });
    }
}
并将现有的“播放”按钮替换为:

<a id="pauseButton" href="javascript:pauseOrResume()">Play</a>

这样做的目的如下:

  • 如果音频尚未启动,链接将显示“播放”
  • 如果用户单击“播放”,音频将开始播放,链接文本将变为“暂停”
  • 如果用户在播放音频时单击“暂停”,音频将暂停,链接文本将更改为“恢复”

谢谢你,伙计!!我将尝试此操作并让您知道:)嘿,如果我不想恢复它,但从时间0开始重新启动它,我该怎么办?从
createBufferSource()
创建的源代码只能播放一次。一旦停止,就必须创建一个新的。因此,您可以创建一个函数,当您希望从头开始重新启动音频时,该函数将创建一个新的
sourceNode
。看一看上面的例子。您将看到,他们创建了一个
playSound
函数,每当单击play按钮时,该函数都会创建一个新的sourceNode。