Javascript Audio - 在某个位置寻找另一个位置

时间:2017-06-14 22:32:25

标签: javascript jquery html5

我有一个正在播放歌曲的<audio>元素。当歌曲到达一个非常具体的点时,我希望它能够无缝地寻找另一个特定的点并继续播放。

首先,我是开放的,我正在寻找方向,以确定哪个是用于实现此目的的最佳音频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>

1 个答案:

答案 0 :(得分: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设置为您的偏移量。