ฉันกำลังใช้ HTML5 กับเกมโปรแกรม อุปสรรคที่ฉันพบตอนนี้คือวิธีเล่นเอฟเฟกต์เสียง
ข้อกำหนดเฉพาะมีจำนวนน้อย:
- เล่นและผสมเสียงหลาย ๆ
- เล่นตัวอย่างเดียวกันหลายครั้งอาจเล่นทับกัน
- ขัดจังหวะการเล่นตัวอย่างทุกจุด
- ควรเล่นไฟล์ WAV ที่มี PCM แบบดิบ (คุณภาพต่ำ) แต่ฉันสามารถแปลงไฟล์เหล่านี้ได้แน่นอน
วิธีแรกของฉันคือการใช้<audio>
องค์ประกอบHTML5 และกำหนดเอฟเฟกต์เสียงทั้งหมดในหน้าของฉัน Firefox เล่นไฟล์ WAV เพียงลูกพีช แต่การโทร#play
หลายครั้งไม่ได้เล่นตัวอย่างหลาย ๆ ครั้ง จากความเข้าใจของฉันเกี่ยวกับข้อมูลจำเพาะ HTML5 <audio>
องค์ประกอบยังติดตามสถานะการเล่นด้วยดังนั้นจึงอธิบายได้ว่าทำไม
ความคิดฉับพลันของฉันคือการโคลนองค์ประกอบเสียงดังนั้นฉันจึงสร้างไลบรารี JavaScript ขนาดเล็กต่อไปนี้ขึ้นมาเพื่อทำสิ่งนั้นสำหรับฉัน (ขึ้นอยู่กับ jQuery):
var Snd = {
init: function() {
$("audio").each(function() {
var src = this.getAttribute('src');
if (src.substring(0, 4) !== "snd/") { return; }
// Cut out the basename (strip directory and extension)
var name = src.substring(4, src.length - 4);
// Create the helper function, which clones the audio object and plays it
var Constructor = function() {};
Constructor.prototype = this;
Snd[name] = function() {
var clone = new Constructor();
clone.play();
// Return the cloned element, so the caller can interrupt the sound effect
return clone;
};
});
}
};
ดังนั้นตอนนี้ฉันสามารถทำได้Snd.boom();
จากคอนโซล Firebug และเล่นsnd/boom.wav
แต่ฉันยังไม่สามารถเล่นตัวอย่างเดียวกันหลาย ๆ ครั้งได้ ดูเหมือนว่า<audio>
องค์ประกอบนั้นเป็นคุณสมบัติการสตรีมมากกว่าสิ่งที่จะเล่นเอฟเฟกต์ด้วย
มีวิธีที่ฉลาดในการทำให้สิ่งนี้เกิดขึ้นว่าฉันขาดหายไปโดยเฉพาะอย่างยิ่งควรใช้เฉพาะ HTML5 และ JavaScript หรือไม่
ฉันควรพูดถึงว่าสภาพแวดล้อมการทดสอบของฉันคือ Firefox 3.5 บน Ubuntu 9.10 เบราว์เซอร์อื่น ๆ ที่ฉันได้ลอง - Opera, Midori, Chromium, Epiphany - ให้ผลลัพธ์ที่แตกต่าง บางคนไม่เล่นอะไรเลยและบางคนก็มีข้อยกเว้น