【发布时间】:2020-10-04 20:11:23
【问题描述】:
我正在开发一个 iOS 节拍器网络应用。由于移动版 Safari 只能播放 one sound at a time,因此我正在尝试创建一个“音频精灵”——我可以在其中使用单个音轨的不同片段来生成不同的声音。我有一个 1 秒的剪辑,上面有 2 个半秒的声音。
<audio id="sample" src="sounds.mp3"></audio>
<a href="javascript:play1();">Play1</a>
<a href="javascript:play2();">Play2</a>
<a href="javascript:pauseAudio();">Pause</a>
<script>
var audio = document.getElementById('click');
function play1(){
audio.currentTime = 0;
audio.play();
// This is the problem area
audio.addEventListener('timeupdate', function (){
if (currentTime >= 0.5) {
audio.pause();
}
}, false);
}
function play2(){
audio.currentTime = 0.5;
audio.play();
}
function pause(){
audio.pause();
}
</script>
在JSFiddle 上查看。
如您所见,我尝试使用 'timeupdate' 事件 (jPlayer example) 无济于事。
我见过 Remy Sharp's post on audio sprites,但是 (A) 我无法让它为我工作,并且 (B) 我宁愿远离库依赖项。
有什么想法吗?
更新
我现在可以使用 setInterval:
function play1(){
audio.currentTime = 0;
audio.play();
int = setInterval(function() {
if (audio.currentTime > 0.4) {
audio.pause();
clearInterval(int);
}
}, 10);
}
function play2(){
clearInterval(int);
audio.currentTime = 0.5;
audio.play();
}
序列和设置/清除间隔存在一些问题,但出于我的目的 - 它似乎有效。
附:如果有人对此有修复,可以在游戏和界面音效中使用。
【问题讨论】:
标签: javascript html dom-events mobile-safari html5-audio