Saya menggunakan HTML5 untuk memprogram game; kendala yang saya hadapi sekarang adalah bagaimana memainkan efek suara.
Persyaratan spesifik jumlahnya sedikit:
- Mainkan dan campur beberapa suara,
- Putar sampel yang sama beberapa kali, mungkin tumpang tindih pemutaran,
- Mengganggu pemutaran sampel di titik mana pun,
- Lebih disukai memutar file WAV yang berisi PCM mentah (kualitas rendah), tetapi saya dapat mengonversinya, tentu saja.
Pendekatan pertama saya adalah menggunakan <audio>
elemen HTML5 dan mendefinisikan semua efek suara di halaman saya. Firefox memainkan file WAV hanya dengan sangat bagus, tetapi memanggil #play
beberapa kali tidak benar-benar memainkan sampel beberapa kali. Dari pemahaman saya tentang spesifikasi HTML5, <audio>
elemen ini juga melacak status pemutaran, sehingga menjelaskan alasannya.
Pikiran langsung saya adalah untuk mengkloning elemen audio, jadi saya membuat pustaka JavaScript kecil berikut untuk melakukannya untuk saya (tergantung pada 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;
};
});
}
};
Jadi sekarang saya dapat melakukannya Snd.boom();
dari Firebug console dan bermain snd/boom.wav
, tetapi saya masih tidak bisa memainkan sampel yang sama beberapa kali. Tampaknya <audio>
elemen tersebut lebih merupakan fitur streaming daripada memainkan efek suara.
Apakah ada cara cerdas untuk mewujudkan hal ini bahwa saya tidak ada, lebih baik hanya menggunakan HTML5 dan JavaScript?
Saya juga harus menyebutkan bahwa, lingkungan pengujian saya adalah Firefox 3.5 di Ubuntu 9.10. Browser lain yang saya coba - Opera, Midori, Chromium, Epiphany - menghasilkan hasil yang beragam. Beberapa tidak memainkan apa pun, dan beberapa melemparkan pengecualian.