草庐IT

javascript - HTML5 音频 : How to Play only a Selected Portion of an Audio File (audio sprite)?

coder 2023-08-02 原文

我正在开发一个 iOS 节拍器网络应用程序。由于手机Safari只能播放one sound at a time ,我正在尝试创建一个“音频 Sprite ”——我可以在其中使用单个音轨的不同片段来生成不同的声音。我有一个 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();
}

序列和设置/清除间隔存在一些问题,但就我的目的而言 - 它似乎有效。

JSFiddle

附言如果有人对此有修复,则可以在游戏和界面声音 FX 中使用。

最佳答案

我认为这里有几个问题。

首先,每次用户点击播放 1 时,您都会添加一个事件监听器。

我也觉得

if (currentTime >= 0.5) { ...

应该是

if (audio.currentTime >= 0.5) { ...

这也有效:

<audio id="sample" src="http://dl.dropbox.com/u/222645/click1sec.mp3" controls preload></audio>

<a href="javascript:playSegment(0.0, 0.5);">Play1</a>
<a href="javascript:playSegment(0.5);">Play2</a>

<script>
var audio = document.getElementById('sample');
var segmentEnd;

audio.addEventListener('timeupdate', function (){
    if (segmentEnd && audio.currentTime >= segmentEnd) {
        audio.pause();
    }   
    console.log(audio.currentTime);
}, false);

function playSegment(startTime, endTime){
    segmentEnd = endTime;
    audio.currentTime = startTime;
    audio.play();
}
</script>

关于javascript - HTML5 音频 : How to Play only a Selected Portion of an Audio File (audio sprite)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5932412/

有关javascript - HTML5 音频 : How to Play only a Selected Portion of an Audio File (audio sprite)?的更多相关文章

随机推荐