我試圖讓聲音文件播放速度更快,以跟上以下代碼中的文字顯示。聲音的作品(無論如何,在Firefox中),但它似乎只玩一次文件的一個實例。如何在多個重疊實例中製作聲音文件播放?
我想讓每個字母都會彈出到屏幕上並伴有爆音。現在,彈出的聲音是隨機的,並沒有計時玩每個字母。
我想知道是否需要聲音對象的多個實例,以及如何做到這一點。
我已經儘可能縮短了聲音文件,並且文件的長度比我使用的setTimeout
間隔短。它只是不會重疊同一個聲音文件的多個副本,因爲我不確定的一些很好的理由。
這裏是整個代碼:
(我想JSFiddle it,但不能得到那個工作(我會保存問題的較後日期))
<html>
<head>
<style>
#display {
color: white;
font-size: 150%;
padding: 2em 5em;
min-height: 600px;
max-width: 600px;
margin-left: auto;
margin-right: auto;
}
body {
background-color: black;
padding: 0;
margin:0;
}
</style>
<script>
var text = "Test String... 1, 2, 3; Everything seems to be working, but the sound is lagging.";
var charDelay = 40; // Sets the delay time for the character loop
function loadText() {
var i = 0; // Character counter
var myPud = new Audio("http://southernsolutions.us/audio/pud03.ogg");
var displayBox = document.getElementById("display");
displayBox.innerHTML = "<p>";
textLoop();
function textLoop() {
if (i == text.length){ // This condition terminates the loop
displayBox.innerHTML += "</p>";
return;
} else if (i < text.length) { // This condition appends the next character
displayBox.innerHTML += text[i];
i++;
myPud.play();
setTimeout(function(){return textLoop()}, charDelay);
}
}
}
window.onload = function(){loadText()};
</script>
</head>
<body>
<div id="display"></div>
</body>
</html>
它需要一個非常短的音頻文件播放每秒25次。即使是正弦波週期,在這一點上也會聽起來像是一個恆定的25hz低音;不是你最想要的東西。一邊:不要使用額外的事件包裝:函數是函數,所以你可以setTimeout(textLoop,charDelay),並設置window.onload = loadText; (不是問題,但良好的做法) – dandavis
音頻文件的長度爲10毫秒。 – Cyclopeus
好吧,我明白你在說什麼,從'loadText()'中取出'textLoop()',並且只傳遞變量作爲參數。我可以做到這一點。 – Cyclopeus