2012-06-24 25 views
12

में ध्वनि मेरी खेल की जरूरतों को मैं 2 डी ध्वनि की आवश्यकता के लिए। इसका मतलब है, emmiter कहीं 2 डी विमान पर तैनात किया जाना चाहिए। मैं जावास्क्रिप्ट में इस प्रभाव को कैसे प्राप्त करूं? क्या मुझे एक विशेष ध्वनि प्रारूप का उपयोग करने की आवश्यकता है या क्या मैं स्पीकर पर वॉल्यूम को नियंत्रित कर सकता हूं?स्थानिक (2 डी) जावास्क्रिप्ट

मुझे लगता है कि मैं बिंदु जहां मैं प्रत्येक वक्ता के लिए 2 संस्करणों के लिए प्राप्त कर सकते हैं, लेकिन मैं कैसे जावास्क्रिप्ट में एक ही ध्वनि के लिए अलग-अलग मात्रा लागू करने के लिए के रूप में अनजान हूँ।

+2

एक '' खेल? आवाज कहाँ से आ रही है? एक '

+4

इस पढ़ें: [वेब ऑडियो API] (http://www.w3.org/TR/webaudio/) –

+0

@ ŠimeVidas, वास्तव में। – corazza

उत्तर

7

एक लेख वास्तव में इस का वर्णन एक डेमो सहित here पाया जा सकता है। में निर्मित हार्डवेयर त्वरित स्थितीय ऑडियो सुविधाओं है कि कर रहे हैं काफी सीधे आगे का उपयोग करने के

लिंक रोट को रोकने के लिए मैं सौभाग्य से

नीचे सबसे प्रासंगिक भागों के हवाले किया जाएगा, वेब ऑडियो API साथ आता है।

मूल विचार नीचे दिए गए कोड में दर्शाया गया है:

PositionSample.prototype.changePosition = function(position) { 
    // Position coordinates are in normalized canvas coordinates 
    // with -0.5 < x, y < 0.5 
    if (position) { 
    if (!this.isPlaying) { 
     this.play(); 
    } 
    var mul = 2; 
    var x = position.x/this.size.width; 
    var y = -position.y/this.size.height; 
    this.panner.setPosition(x * mul, y * mul, -0.5); 
    } else { 
    this.stop(); 
    } 
}; 

ऊपर पहली कड़ी में काम कर डेमो के पूर्ण स्रोत कोड here पाया जा सकता है।

Offtopic: मैं एक कस्टम जवाब यहाँ के रूप में हाथ से उद्धृत लेख को फिर से लिखने की सोची, परन्तु है कि अपेक्षाकृत व्यर्थ के रूप में लेख काफी स्पष्ट और डबल काम कर रही की तुलना में पहले से ही अधिक है लग रहा था व्यर्थ लगता है


संगतता के अनुसार, केवल फ्लैश का एक संयोजन और पहले उल्लिखित कोड एक वास्तविक क्रॉस-ब्राउज़र स्थिति/पैनिंग ऑडियो समाधान देता है (क्योंकि कुछ मोबाइल उपकरणों पर फ़्लैश उपलब्ध नहीं है)। आदर्श रूप में मैं ऑडियो API के उपयोग की सलाह नहीं देते, तो इस रूप में यह संभव नहीं दिखता नहीं है कि चीजें विनिर्देश में बदल जाएगा, इस प्रकार संभवतः अपने कोड तोड़ने धोखा दिया जा सकता (+ यह संभव नहीं दिखता इस मोबाइल उपकरणों पर किसी भी तरह से काम करने के लिए नहीं करने के लिए नहीं है) होगा। एकमात्र परिदृश्य जहां अधिक उन्नत वेब ऑडियो एपीआई का उपयोग करना समझ में आता है, यदि आप अपने गेम पर कम से कम 6 से 18 महीने तक काम करने की उम्मीद कर रहे हैं (क्योंकि कार्यान्वयन के लिए यह संभवतः एक उपयोगी बिंदु तक स्थिर होने के लिए भी लिया जाएगा) ।

+0

मुझे संगतता की परवाह नहीं है, हालांकि मैं चाहता हूं कि मेरे कोड में कोई फ्लैश न हो। – corazza

+0

हाहा, उस मामले में उपरोक्त समाधान आपके लिए बिल्कुल सही है हाँ: डी (मुझे लगता है कि इसका मतलब है कि आप इसे सीखने के लिए केवल कर रहे हैं, जो महान है: डी) –

+0

मैन, आप वास्तव में अपना "समाधान बेचने की कोशिश कर रहे हैं "। यह सिर्फ + 50pts है, इसे आसान ले लो। आराम करें। – MMeah

2

हम काम पर SoundManager2 का उपयोग किया है, यह था पर एक बहुत आसान बारी कुंजी समाधान और अच्छी तरह से प्रलेखित एपीआई।

http://www.schillmania.com/projects/soundmanager2/

उदाहरण:

soundManager.createSound({ 
id:'mySound1', 
url:'../mpc/audio/CHINA_1.mp3' 
}); 
soundManager.play('mySound1'); 

बीएसडी लाइसेंस: http://www.schillmania.com/projects/soundmanager2/license.txt

+4

ध्वनि पैन के लिए, आप केवल बाएं या दाएं चैनल को रिकॉर्ड कर सकते हैं और दोनों के बीच फीका कर सकते हैं। कोई भी ध्वनि संपादक इसे अनुमति देगा। इसके लिए दो फाइलों की आवश्यकता है, लेकिन यह एक समाधान है। – MMeah

+0

2 फ़ाइलों के बीच लुप्तप्राय नहीं है सटीक समय मिलान की आवश्यकता है, जिसे कभी-कभी आसानी से नहीं किया जाता है? – wizzard0

+0

वेब ऑडियो एपीआई के लिए इसके लिए बहुत सारे उपयोगी टूल हैं, हालांकि आप निश्चित रूप से किसी भी गंभीर सामग्री के लिए ध्वनि प्रबंधक लाइब्रेरी का उपयोग नहीं कर सकते हैं।(मेरे उत्तर में आलेख देखें और कुछ समय के स्पष्टीकरण के लिए थोड़ा ऊपर स्क्रॉल करें) –

संबंधित मुद्दे