Oyunları programlamak için HTML5 kullanıyorum; şu an karşılaştığım engel ses efektlerinin nasıl çalınacağı.
Özel gereksinimlerin sayısı azdır:
- Birden fazla ses çalın ve karıştırın,
- Aynı örneği birden çok kez oynatın, muhtemelen çakışan oynatmalar,
- Bir numunenin herhangi bir noktada çalınmasına ara verin,
- Tercihen (düşük kaliteli) ham PCM içeren WAV dosyalarını oynatın, ancak elbette bunları dönüştürebilirim.
İlk yaklaşım HTML5 <audio>
öğesini kullanmak ve sayfamdaki tüm ses efektlerini tanımlamaktı. Firefox, WAV dosyalarını sadece şeftali gibi oynatır, ancak #play
birden çok kez çağırmak , örneği çok kez çalmaz. HTML5 spesifikasyonunu anladığımdan, <audio>
öğe oynatma durumunu da izler, böylece nedenini açıklar.
Benim acil düşüncem ses öğelerini klonlamak oldu, bu yüzden benim için bunu yapmak için aşağıdaki küçük JavaScript kitaplığı oluşturdum (jQuery bağlıdır):
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;
};
});
}
};
Şimdi Snd.boom();
Firebug konsolundan yapabilir ve oynayabilirim snd/boom.wav
, ancak yine de aynı örneği birden çok kez çalamıyorum. O görünüyor <audio>
eleman yerine ses efektleri oynamak için bir şey gerçekten daha fazla bir akış özelliği taşımaktadır.
Tercihen yalnızca HTML5 ve JavaScript kullanarak bunu kaçırmamı sağlamanın akıllıca bir yolu var mı?
Şunu da belirtmeliyim ki, test ortamım Ubuntu 9.10 üzerinde Firefox 3.5. Denediğim diğer tarayıcılar - Opera, Midori, Chromium, Epiphany - çeşitli sonuçlar üretti. Bazıları hiçbir şey oynamaz, bazıları da istisna atar.