gpt4 book ai didi

javascript - Web Audio API 从暂停状态恢复

转载 作者:技术小花猫 更新时间:2023-10-29 12:35:43 26 4
gpt4 key购买 nike

我经常读到无法使用 Web Audio API 暂停/恢复音频文件.
但现在我看到了 example他们实际上使暂停和恢复成为可能。我试图弄清楚他们是怎么做到的。我想也许 source.looping = false 是关键,但事实并非如此。
现在我的音频总是从头开始重新播放。

这是我当前的代码

var context = new (window.AudioContext || window.webkitAudioContext)();

function AudioPlayer() {
this.source = context.createBufferSource();
this.analyser = context.createAnalyser();
this.stopped = true;
}

AudioPlayer.prototype.setBuffer = function(buffer) {
this.source.buffer = buffer;
this.source.looping = false;
};

AudioPlayer.prototype.play = function() {
this.source.connect(this.analyser);
this.analyser.connect(context.destination);

this.source.noteOn(0);
this.stopped = false;
};

AudioPlayer.prototype.stop = function() {
this.analyser.disconnect();
this.source.disconnect();
this.stopped = true;
};

有人知道该怎么做才能让它发挥作用吗?

最佳答案

Oskar 的回答和 ayke 的评论很有帮助,但我缺少代码示例。所以我写了一个:http://jsfiddle.net/v3syS/2/希望对您有所帮助。

var url = 'http://thelab.thingsinjars.com/web-audio-tutorial/hello.mp3';

var ctx = new webkitAudioContext();
var buffer;
var sourceNode;

var startedAt;
var pausedAt;
var paused;

function load(url) {
var request = new XMLHttpRequest();
request.open('GET', url, true);
request.responseType = 'arraybuffer';
request.onload = function() {
ctx.decodeAudioData(request.response, onBufferLoad, onBufferError);
};
request.send();
};

function play() {
sourceNode = ctx.createBufferSource();
sourceNode.connect(ctx.destination);
sourceNode.buffer = buffer;
paused = false;

if (pausedAt) {
startedAt = Date.now() - pausedAt;
sourceNode.start(0, pausedAt / 1000);
}
else {
startedAt = Date.now();
sourceNode.start(0);
}
};

function stop() {
sourceNode.stop(0);
pausedAt = Date.now() - startedAt;
paused = true;
};

function onBufferLoad(b) {
buffer = b;
play();
};

function onBufferError(e) {
console.log('onBufferError', e);
};

document.getElementById("toggle").onclick = function() {
if (paused) play();
else stop();
};

load(url);

关于javascript - Web Audio API 从暂停状态恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11506180/

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