作者热门文章
- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我经常读到无法使用 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/
我们有一个可用的应用程序,它使用 AU 图 - CoreAudio API - 来播放音频。图形始终在运行,各种源 Material 的播放/暂停状态在图形渲染回调函数中进行管理。我们成功地响应了 U
我正在我的应用程序上运行kill -3或jstack,我想知道在那段时间它是否处于GC暂停状态,有没有简单的方法可以从输出中找出答案? 在 GC 暂停期间它是否应答?我希望它能以某种方式自然地工作,所
我正在制作一个 jQuery 幻灯片放映,其中一张幻灯片上有一个 HTML5 视频播放器。当 jQuery 幻灯片检测到视频正在播放时,除了“幻灯片播放/暂停”按钮之外,还有什么方法可以让它从其他自动
我是一名优秀的程序员,十分优秀!