2013-07-15 236 views
4

這對我不起作用!任何人有同樣的問題?我的代碼看起來很簡單,但只有當我需要一遍又一遍地播放時纔會播放。看到如下:HTML5音頻不會播放多次

我的HTML:

<audio id="siren" src="sounds/400.ogg" preload="auto"> 

和我的JS:

function play_siren() { 
    log("play sound"); 
    if(document.getElementById('siren').paused == true){ 
     document.getElementById('siren').play(); 
    } 
} 
function pause_siren() { 

    try{ 
     if(document.getElementById('siren').paused == false){ 
      document.getElementById('siren').pause(); 
     } 
     log("paused siren"); 
    }catch(err){ 
     log(err.message); 
    } 
    try{ 
     if(document.getElementById('siren').currentTime > 0.0){ 
      document.getElementById('siren').currentTime = 0.0; 
     } 
     log("reset siren"); 
    }catch(err){ 
     log(err.message); 
    } 
} 

它在JS代碼編程方式啓動如下:

if(Obj[3].siren == true && isPlayingSiren == false){ 
    play_siren(); 
    isPlayingSiren = true; 
}else if(Obj[3].siren == false && isPlayingSiren == true){ 
    pause_siren(); 
    isPlayingSiren = false; 
} 

我發現這紳士的代碼和他的DOES似乎工作:http://html5.komplett.cc/code/chap_video/js_audioPlayer_en.html

但設置「currentTime = 0」對我來說沒有任何幫助。

我找不出來。我使用Chrome,Firefox和Safari進行測試。到目前爲止,Firefox根本無法使用Chrome瀏覽器似乎是HTML5的最佳選擇,但我仍然只能播放一次。

我甚至試過mp3和ogg一樣的行爲。

請說明一下。謝謝!

這裏到處是HTML:

<html> 
<head> 
<meta charset="utf-8"> 
<link rel="stylesheet" media="all" href="js_audioPlayer.css"> 
<title>HTMLMediaElement example - Audio Player</title> 
<script src="../js/audioPlayer.js"></script> 
</head> 
<body> 
<fieldset> 
<audio src="sounds/400.ogg" preload="auto"></audio> 
<legend>Audio Player (400)</legend> 
</fieldset> 

<script> 
function loadXMLDoc(){ 
_pause(); 
updateProgress(0); 
playPause(); 
} 

var loadXmlTimer = setInterval(loadXMLDoc, 2000); 
</script> 
</body> 
</html> 

這裏是完整的JavaScript:

// global callback functions 
var playPause, updateProgress, _play, _pause; 

/* initialize audio player */ 
window.onload = function() { 
// keep track of playback status 
var AudioStatus = { 
isPlaying : false 
}; 

// define references to audio, pulldown menu, play-button, slider and time display 
var audio = document.querySelector("AUDIO"); 

/* load track by menu-index */ 
var loadTrack = function(idx) { 
audio.src = '../sounds/400.ogg'; 
audio.load(); 
}; 

/* callback to play or pause */ 
_play = function() { 
audio.play(); 
log("play"); 
AudioStatus.isPlaying = true; 
}; 

_pause = function() { 
audio.pause(); 
log("pause"); 
AudioStatus.isPlaying = false; 
}; 

playPause = function() { 
if (audio.paused) { 
    _play(); 
} 
else { 
    _pause(); 
} 
}; 

/* callback to set or update playback position */ 
updateProgress = function(value) { 

    audio.currentTime = value; 
    log("updateProgress"); 
}; 

}; 

定時播放聲音編程上的失效。只要它是私密的,它就可以工作。我不明白爲什麼它必須是私人的。

+0

到目前爲止,它看起來像是如果我把代碼放在一個私人類的作品,但我會確認,然後在這裏發佈代碼。 – Gilson

+0

私人課程似乎很穩定,適用於PC和MAC的Chrome。它不能在Android Chrome上運行,但它可以在Android Firefox上運行。看起來像是Android版的Chrome存在問題,或者我的代碼並不完美。我將通過USB進行調試。我剛剛發現,Chrome手機有一個USB調試功能,我會嘗試它。 – Gilson

+0

好吧,我看到問題,但沒有解決方案。如果我用任何值調用audio.updateProgress;從定時器函數loadXMLDoc它的工作原理,但如果我從XMLHttpRequest上下文中調用audio.updateProgress它不工作在這種情況下它是隻讀的。我不知道如何解決Javascript中的線程上下文。 – Gilson

回答

0

它是否通過if語句?

您可以使用ontimeupdate將document.getElementById('siren')。currentTime的值放入變量中。 如果設置爲大於0,則可以在if conditionnal中更新它。

+0

不是我想要做的,但感謝您的評論。 – Gilson

0

所有以前的解決方案都是不可接受的,因爲它們每次播放聲音時都下載相同的聲音文件!爲了簡單和高效,請這樣做:

var sound = document.getElementById("mySound") 
if(window.chrome){ 
    sound = sound.cloneNode() 
} 
sound.play() 

這就是我用chrome專門解決問題的方法。