2017-06-14 78 views
0

我有一个<audio>元素,通过歌曲播放。当歌曲达到特定点时,我希望它能够无缝地寻找另一个特定点并继续播放。Javascript音频 - 寻找另一个位置,当在一个位置

首先,我很开放,我正在寻找关于哪个是最好的音频API来完成这个的方向,无论是DOM Audio Object还是(新)Web Audio API

设置事件监听器在歌曲中的某个点触发(如果可能)的最佳方法是?我应该播放歌曲并保留一个单独的计时器(但它应该是异步的)?

下面我有一个基本的例子。这个例子应该可以播放,但是在音频的特定点上,它应该无缝地跳过并继续播放。

感谢您的帮助!

$('#player')[0].play(); 
 

 
//$('#player')[0].currentTime = 0.5;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<audio controls id="player"> 
 
    <source src="https://www.w3schools.com/html/horse.ogg" type="audio/ogg"> 
 
    <source src="https://www.w3schools.com/html/horse.mp3" type="audio/mpeg"> 
 
    Your browser does not support the audio element. 
 
</audio>

回答

0

我想你想使用的Web Audio API获得对您的音频更多的控制。

下面是从MDN一些代码:

function getData() { 
    source = audioCtx.createBufferSource(); 
    request = new XMLHttpRequest(); 

    request.open('GET', 'yourfilehere.wav', true); 

    request.responseType = 'arraybuffer'; 


    request.onload = function() { 
    var audioData = request.response; 

    audioCtx.decodeAudioData(audioData, function(buffer) { 
     myBuffer = buffer; 
     source.buffer = myBuffer; 
     source.connect(audioCtx.destination); 
     source.loop = true; 
     source.loopEnd = //your endOffsetInSeconds 
     }, 

     function(e){"Error with decoding audio data" + e.err}); 

    } 

    request.send(); 
} 

您如何获取我们的数据是你的,但重要的部分是设置你的source.loop为true,你source.loopEnd您抵消秒。

+0

谢谢你。我有点困惑,因为我可以如何连锁。例如,如果歌曲开始播放,我希望它从1秒跳到7秒,播放到10秒,然后跳到12秒,然后继续播放,如何实现? 我正在处理一个音频文件。从你给我的例子来看,这是不是播放这首歌,但是当它到达'endOffsetInSeconds'时,它刚刚从头开始? – Toby

+0

我一定误解了你的问题。让我再看看 –

+0

老实说,我认为最简单的做法是从原件中创建一个新的音频文件,并将这些部分剪掉。你可以尝试[大胆](http://www.audacityteam.org/) –

相关问题