启动HTML5<音频>在随机位置

Start HTML5 <Audio> at random position

本文关键字:随机 位置 gt 音频 lt 启动 HTML5      更新时间:2023-09-26

我有一个大约2小时长的音轨,我想在我的网站上使用。我希望它在页面加载时在随机位置开始播放曲目。这可能使用HTML5吗?我知道你可以使用element.currentTime()函数来获得当前位置,但在完全下载之前,你如何获得曲目的总时间?我已经试过了每种加载、预加载、自动缓冲区的组合,还有数百种。

<script>
var stream_url_mp3 = "";
var stream_url_ogg = "";
var stream_total_time = 100;
var stream_start_time = Math.floor(Math.random() * stream_total_time);
var daJukebox = document.createElement('audio');
if (daJukebox.canPlayType) {
    if ("" != daJukebox.canPlayType('audio/mpeg')) {
        daJukebox.src = stream_url_mp3;
    } else if ("" != myAudio.canPlayType('audio/ogg; codecs="vorbis"')) {
        daJukebox.src = stream_url_ogg;
    }
    daJukebox.preload = true;
    daJukebox.autobuffer = true;
    daJukebox.pause();
    daJukebox.currentTime = stream_start_time;
    daJukebox.play();
}

感谢:)

如果无法从HTML5音频元素获取信息,可以在服务器上确定持续时间,并将信息作为数据属性传递给HTML。例如:

<audio id="some-id" data-duration="7200">

其中CCD_ 2是以秒为单位的时间(或某个其他时间单位)。然后,您可以在JavaScript中使用该属性的值来决定在哪里启动音频文件。

daJukebox.duration返回什么?它应该是以秒为单位的轨道的总长度。

我做了一点研究,看起来只有当服务器配置为正确地将文件头设置为type="audio/mp3"name="filename.mp3"(或ogg)时,.duration才会工作,检查开发控制台的网络选项卡,我敢打赌你的服务器发送的文件类型为octet/stream,这会导致Opera中的"infinite"持续时间和其他浏览器中的NaN持续时间。

我自己还没有设置,但我在http://dev.opera.com/articles/view/html5-audio-radio-player/

// Invoke new Audio object
var audio = new Audio('test.ogg');
// Get the play button and append an audio play method to onclick
var play = document.getElementById('play');
play.addEventListener('click', function(){
    audio.play();
}, false);
// Get the pause button and append an audio pause method to onclick
var pause = document.getElementById('pause');
pause.addEventListener('click', function(){
    audio.pause();
}, false);
// Get the HTML5 range input element and append audio volume adjustment to onchange
var volume = document.getElementById('volume');
volume.addEventListener('change', function(){
    audio.volume = parseFloat(this.value / 10);
}, false);
// Get where one are in playback and push the time to an element
audio.addEventListener("timeupdate", function() {
    var duration = document.getElementById('duration');
    var s = parseInt(audio.currentTime % 60);
    var m = parseInt((audio.currentTime / 60) % 60);
    duration.innerHTML = m + '.' + s + 'sec';
}, false);

不知道这是如何交叉兼容的,但这表明你可能可以做一些类似的事情

var audio = new Audio('test.ogg');
audio.currentTime = "some time format I'm not sure how to format yet";