गेम खेलने के लिए मैं एचटीएमएल 5 का उपयोग कर रहा हूं; मैंने अभी जो बाधा डाली है, वह है कि ध्वनि प्रभाव कैसे खेलें।
विशिष्ट आवश्यकताएं संख्या में कम हैं:
- खेलते हैं और कई ध्वनियों को मिलाते हैं,
- एक ही नमूना कई बार खेलें, संभवतः अतिव्यापी प्लेबैक,
- किसी भी बिंदु पर एक नमूना के बाधित प्लेबैक,
- अधिमानतः WAV फ़ाइलें (कम गुणवत्ता वाली) कच्ची PCM चलाएं, लेकिन मैं इन्हें रूपांतरित कर सकता हूं, अवश्य।
मेरा पहला दृष्टिकोण HTML5 <audio>
तत्व का उपयोग करना और मेरे पृष्ठ में सभी ध्वनि प्रभावों को परिभाषित करना था। फ़ायरफ़ॉक्स WAV फ़ाइलों को सिर्फ पीच निभाता है, लेकिन #play
कई बार कॉल करना वास्तव में कई बार नमूना नहीं खेलता है। एचटीएमएल 5 कल्पना की मेरी समझ से, <audio>
तत्व प्लेबैक स्थिति को भी ट्रैक करता है, इसलिए यह बताता है कि क्यों।
मेरा तात्कालिक विचार ऑडियो तत्वों को क्लोन करना था, इसलिए मैंने अपने लिए ऐसा करने के लिए निम्नलिखित छोटी जावास्क्रिप्ट लाइब्रेरी बनाई (जो 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();
फायरबग कंसोल और प्ले से snd/boom.wav
कर सकता हूं, लेकिन मैं अभी भी एक ही नमूना कई बार नहीं खेल सकता हूं। ऐसा लगता है कि <audio>
तत्व वास्तव में किसी के साथ साउंड इफ़ेक्ट खेलने के बजाय स्ट्रीमिंग फीचर के अधिक है।
क्या ऐसा करने का एक चतुर तरीका है जो मुझे याद आ रहा है, अधिमानतः केवल HTML5 और जावास्क्रिप्ट का उपयोग कर रहा है?
मुझे यह भी उल्लेख करना चाहिए कि, मेरे परीक्षण वातावरण Ubuntu 9.10 पर फ़ायरफ़ॉक्स 3.5 है। अन्य ब्राउज़र जो मैंने कोशिश की है - ओपेरा, मिडोरी, क्रोमियम, एपिफेनी - अलग-अलग परिणाम उत्पन्न किए। कुछ कुछ नहीं खेलते हैं, और कुछ अपवादों को फेंक देते हैं।