2010-01-06 19 views
15

मैं सी में लिखे गए एक ऑडियो एप्लिकेशन पर काम कर रहा हूं, मुझे विंडोज के तहत लाइव ऑडियो प्लेबैक प्रदान करने की आवश्यकता है। मुझे यह तय करने की ज़रूरत है कि कौन सी ऑडियो एपीआई उपयोग करेगी। मैं the basic waveOut API का उपयोग करने की योजना बना रहा हूं, लेकिन मैं यह देखना चाहता हूं कि समुदाय यहां क्या सिफारिश करता है।विंडोज में निम्न स्तर के ऑडियो के लिए सर्वश्रेष्ठ एपीआई?

मुझे कोड चाहिए जो विंडोज के किसी भी हालिया संस्करण पर काम करेगा, पुस्तकालयों को स्थापित करने की आवश्यकता नहीं है; और मुझे न्यूनतम विलंबता चाहिए।

मुझे किसी भी "प्रभाव" की आवश्यकता नहीं है या नहीं, मुझे केवल जो भी लहर नमूने एप्लिकेशन उत्पन्न करता है, उसे ईमानदारी से चलाने की आवश्यकता है।

मेरी समझ यह है कि विंडोज़ पर अधिकांश पेशेवर ऑडियो एप्लिकेशन एएसआईओ का उपयोग करते हैं, जो उत्कृष्ट कम विलंबता देता है, लेकिन मैं एएसआईओ नहीं चाहता क्योंकि मैं चाहता हूं कि मेरा कोड बस काम करे और अधिकांश लोगों के पास एएसआईओ प्री- अपने कंप्यूटर पर स्थापित। (बाद की तारीख में मैं वापस जा सकता हूं और एक विकल्प के रूप में एएसआईओ भी जोड़ सकता हूं, लेकिन मैं पहले सबसे सामान्य समाधान के लिए जा रहा हूं।)

क्या वहां कुछ भी है जो मेरे उद्देश्यों के लिए तरंग से बेहतर होगा, या क्या यह सबसे अच्छा विकल्प है?

उत्तर

15

यह इस बात पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं। ऑडियो स्ट्रीमिंग के लिए मूल तरंगऑट ऑडियो एपीआई बेहतर है। यह आपको कई बफर कतारबद्ध करने देता है और उन्हें उत्तराधिकार में स्वचालित रूप से खेला जाता है। लेकिन अगर ऑडियो चल रहा है और आप इसे बदलना चाहते हैं, या इसमें कुछ जोड़ना चाहते हैं, तो यह अपेक्षाकृत कठिन है।

डायरेक्टएक्स ऑडियो ईवेंट आधारित ऑडियो के लिए बेहतर है। आप मिश्रण करने के बिना एक ही समय में कई चीजें खेल सकते हैं। आप आसानी से ऑडियो के छोटे टुकड़े जोड़ या निकाल सकते हैं - जैसे उपयोगकर्ता अपनी बंदूक पर ट्रिगर खींचता है तो ध्वनि बजाना। लेकिन स्ट्रीमिंग (यानी एक के बाद 1 बफर खेलना) कठिन है।

waveOut को एक एमपी 3 फ़ाइल की तरह निरंतर ऑडियो चलाने में सुविधा के लिए डिज़ाइन किया गया है। डायरेक्टएक्स ऑडियो के लिए डिज़ाइन किया गया है जो गेम में फीडबैक की तरह अस्थायी है।

एएसआईओ प्रोग्रामिंग की कठिनाई के मामले में तरंगऑट और डायरेक्टएक्स की सबसे बुरी तरह की तरह है। और यह स्थिर नहीं है। एप्लिकेशन आमतौर पर ऑडियो डिवाइस साझा नहीं कर सकते हैं। लेकिन यह आपको उस ऑडियो हार्डवेयर की सबसे कम विलंबता पहुंच प्रदान करता है।

एएसआईओ आपको कई उपकरणों पर प्लेबैक सिंक्रनाइज़ करने का एक तरीका भी प्रदान करता है।

आप परिवर्तन क्या सही होने से पहले ही खेला जाता है खेला जा रहा है करने के लिए सक्षम होने के लिए की जरूरत नहीं है, और आप कई उपकरणों तो आप ASIO की जरूरत नहीं है सिंक्रनाइज़ करने के लिए जरूरत नहीं है।

+0

और क्या XAudio2 के बारे में? –

+0

XAudio2 डायरेक्टसाउंड के प्रतिस्थापन के रूप में है। यह WinXP पर डायरेक्टसाउंड के शीर्ष पर लागू किया गया है। WinVista के लिए और बाद में, यह कर्नेल ऑडियो में एकीकृत है। यदि आप वेवआउट के बजाय डायरेक्टसाउंड का उपयोग करने की योजना बना रहे हैं तो यह डायरेक्टसाउंड का उपयोग करने की तुलना में शायद बेहतर विकल्प है। –

+1

@JohnKnoeller यह necroing के लिए खेद है। क्या आप "XAudio2) पर अधिक विस्तार कर सकते हैं WinXP पर डायरेक्टसाउंड के शीर्ष पर लागू किया गया है। WinVista के लिए और बाद में, यह कर्नेल ऑडियो में एकीकृत है।" मैं [इस सवाल] से आ रहा हूं (http://gamedev.stackexchange.com/questions/51450) –

4

जॉन नोवेलर द्वारा उल्लिखित विकल्पों के अलावा, WASAPI है जो वेवऑट की तुलना में बहुत कम लेटेंसी की अनुमति देता है, लेकिन दुर्भाग्य से केवल विंडोज विस्टा से ही उपलब्ध है।

2

डायरेक्टसाउंड स्ट्रीमिंग एप्लिकेशन स्वयं लिखने के बाद, मैं निश्चित रूप से कम विलंबता और उपयोग में आसानी के लिए अनुशंसा करता हूं। साथ ही, यह आपको विंडोज के विरासत संस्करणों पर प्लेबैक के लिए उच्च गुणवत्ता वाले प्रारूप को सेट करने में सक्षम बनाता है।

5

उस समय मैंने इस सवाल से पूछा, मैंने waveOut और waveIn APIs का उपयोग करके स्ट्रीमिंग कोड लिखा था।

PortAudio http://www.portaudio.com/

PortAudio एक वाणिज्यिक के अनुकूल लाइसेंस के साथ मुफ्त सॉफ्टवेयर है: तब से, मैं एक उपयोगी पुस्तकालय की खोज की है।यदि आप PortAudio को कॉल करने के लिए अपना कोड लिखते हैं तो यह waveOut उपकरणों के साथ काम करने में सक्षम होना चाहिए, लेकिन विंडोज के तहत एएसआईओ डिवाइस के साथ भी; इसे फिर लिनक्स के लिए पुन: संकलित किया जा सकता है और ALSA उपकरणों के साथ काम करना चाहिए; और इसे मैक के लिए फिर से सम्मिलित किया जा सकता है और CoreAudio उपकरणों के साथ काम करना चाहिए। मैंने मैक भाग का परीक्षण नहीं किया है लेकिन मेरी परियोजना विंडोज और लिनक्स के साथ बढ़िया काम कर रही है।

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