我有兩首歌曲,我都需要在EXACT同時播放(在AudioBuffer的索引下,我將其轉換爲秒數除以採樣率) ,問題是,執行song1.play();
和song2.play();
需要200ms(使用console.time
)執行,這會拋出計時 - 是否有緩衝區或一些JS魔法在同一時間播放它們?Javascript音頻(可能是網絡音頻)設置確切時間
回答
我做了一個簡單的頁面並進行了測試。
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<audio id="player1" controls style="width: 400px;">
<source type="audio/mpeg" src="http://127.0.0.1:8080/1.mp3"></source>
</audio>
<audio id="player2" controls style="width: 400px;">
<source type="audio/mpeg" src="http://127.0.0.1:8080/1.mp3"></source>
</audio>
<script>
var plyr1 = document.getElementById('player1');
var plyr2 = document.getElementById('player2');
</script>
</body>
</html>
我把plyr1.play(); plyr2.play();
在控制檯(火狐),然後回車。這些聲音之間沒有區別!我不知道你的情況有什麼問題,但你可以試一試plyr1.autoplay = true; plyr2.autoplay = true;
,這不是一個函數,所以經驗表示應該花費更少的時間;)
aha,如果你使用的是new Audio()
你應該注意到使用new
關鍵字導致JavaScript變慢。避免它,並使用document.createElement('audio')
來代替。
如果你打電話'audio1.play(); audio2.play()''如果你使用'new Audio'或'document.createElement'就沒有關係。另外,你的假設對我來說聽起來不正確,當文件被緩衝時,autoplay會觸發'play'方法狀態'canplay'使得IMO js或html屬性不會改變任何東西。 – Kaiido
@Kaiido我應該說[在時間問題上有所不同](http://www.w3schools.com/js/js_object_definition.asp)。假設你的第二個字是真實的(但我不認爲設置對象的屬性可以激發一個方法!可以嗎?它是否與getter或setters(訪問器)有關?是否有新的問題......),我沒有看到任何東西這些聲音之間的差異。我不知道他爲什麼會錯誤地播放聲音。 – TechJS
我沒有看到任何關於時間的鏈接(你應該避免w3School)。但'new Audio()'創建者和'document.createElement'方法都是同步的,所以如果你調用兩個對象的'play'方法,在創建這些對象之後,創建它們的方式並不重要。現在,請注意,我使用術語「屬性」而不是屬性,原因是:HTML具有屬性,當由瀏覽器解析時,屬性會創建對象的屬性。在àutoplay'屬性的情況下,它只是一個布爾值,它在音頻的內部'canplay'事件中被檢查。 – Kaiido
隨着網絡音頻,您可以指定AudioBufferSources的開始時間:
https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode/start
的- 1. HTML5/Javascript網絡音頻API
- 2. 音頻/語音網絡RTC
- 3. 使用網絡音頻api和wavesururfer.js剪切和粘貼音頻
- 4. 網絡音頻流
- 5. 網絡音頻播放器,可以鏈接到音頻的特定時間?
- 6. 麥克風音頻可視化器網絡音頻API
- 7. html5音頻 - 沒有網絡音頻的彎音API API
- 8. Toggle One and Off - JavaScript - 網絡音頻API
- 9. 網絡音頻Api:與經過時間相關的頻率
- 10. 網絡音頻Api輸出
- 11. 網絡音頻API WaveShaperNode
- 12. WebRTC與網絡音頻
- 13. 網絡音頻API:從打
- 14. 網絡音頻API增益
- 15. 網絡音頻API,事件?
- 16. 網絡音頻API的聲音庫
- 17. 網絡音頻API記錄功能
- 18. iOS鈴聲切換將網絡音頻靜音
- 19. iOS音頻:剪切和拼接音頻?
- 20. html5音頻標籤播放音頻時,它是加載音頻
- 21. CSCore:可能,剪切音頻文件
- 22. 如何使用網絡音頻API反向播放音頻?
- 23. 網絡音頻API - 克隆音頻緩衝區
- 24. 使用網絡音頻API構建HTML5音頻播放器
- 25. 網絡音頻API:如何播放和停止音頻?
- 26. 使用網絡音頻播放編碼的音頻流Api
- 27. 網絡音頻API createMediaElementSource打破了音頻標籤
- 28. 網絡音頻API和音頻下載和保護
- 29. Chrome網絡音頻不播放我的音頻
- 30. 網絡音頻Api記錄音頻節點
可能重複[HTML5/JavaScript的音頻同時播放多音軌(http://stackoverflow.com/問題/ 21016656/html5-javascript-audio-play-multiple-tracks-at-the-the-the-the-time) –
嗯,我試過這個答案,但是當我執行'song1.play()'時,只有song1播放? – javatripping
是的,使用WebAudio API,您可以使用[內部音頻時鐘](https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/currentTime)。查看[MDN演示](https://developer.mozilla.org/en-US/docs/Games/Techniques/Audio_for_Web_Games#Loading_your_tracks) – Kaiido