2012-01-09 14 views
6

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

मेरी पृष्ठभूमि .m4a संगीत फ़ाइल AVAudioPlayer के साथ खेला जाता है। मैंने कोकोस डेंशन पर इसका उपयोग करना चुना क्योंकि मेरे पास वर्तमान समय संपत्ति तक पहुंच है। मैं गलत हो सकता हूं, लेकिन मुझे नहीं लगता कि मैं इसे कोकोसडेन्सियन के साथ एक्सेस कर सकता हूं।

मैंने एक .wav फ़ाइल बनाई जो बहुत कम है (एक सेकंड से भी कम)। मैं init पर मेरी ध्वनि प्रभाव प्रीलोड:

[[SimpleAudioEngine sharedEngine] preloadEffect:@"Assist.wav"]; 

तो ध्वनि प्रभाव खेलने के लिए, CCTouchesBegan में मैं फोन:

[[SimpleAudioEngine sharedEngine] playEffect:@"Assist.wav"]; 

के बाद कि यह उन समय और पुरस्कार अंक निर्धारित करने के लिए मेरे कोड कहता है। किसी भी विचार से यह क्यों लगी हो सकती है, या संगीत के साथ समय में ध्वनि प्रभाव खेलने का बेहतर तरीका?

संपादित करें: मैंने हाल ही में कुछ परिणामों के साथ कुछ चीजों की कोशिश की है। सबसे पहले मैंने गाने में उचित समय तक पहुंचने के बाद ध्वनि को स्वचालित रूप से चलाने की कोशिश की। अभी भी अंतराल था, इसलिए मुझे नहीं लगता कि यह स्पर्श घटनाओं धीमी है। मैंने 3 अलग-अलग ध्वनि पुस्तकालयों की भी कोशिश की।

हालांकि, जब मैं सिम्युलेटर में भाग गया, तो यह लग रहा था। क्या किसी को कुछ पता है? मैं अनजान हूं और इसकी एक प्रमुख विशेषता है कि मैं वास्तव में बाहर नहीं ले सकता ...

+0

क्या उपकरणों पर जानकारी प्रदान करें आपके द्वारा चलाए जा रहे हैं, और एक्स-कोड के साधन cpu लोड और GPU लोड के बारे में जानकारी, और भी कैसे एक ही समय में कई ध्वनियों खेल रहे हैं की एक विचार है, और क्या में प्रारूप है आपके पृष्ठभूमि संगीत (अनुमान है कि एक है)। –

उत्तर

1

आपको इस कोड से बचना चाहिए: - [[SimpleAudioEngine साझाEngine] preloadEffect: @ "Assist.wav"];

एप्लिकेशन की शुरुआत के साथ

आप इस कोड लिख कर अपने ढांचे SimpleAudioEngine लोड होनी चाहिए: -

// SimpleAudioEngine * palySound; .h फ़ाइल में ऑब्जेक्ट बनाया गया। palySound = [SimpleAudioEngine साझाEngine];

और जब भी आप ध्वनि बजाना चाहते हैं तो आप लिख सकते हैं: [palySound playEffect: @ "Assist.wav"];

+0

उत्तर के लिए धन्यवाद। मैंने कोशिश की, लेकिन ऐसा लगता है कि यह कोई अलग नहीं है। आवाज अभी भी पीछे है। – Arbel

+0

क्या आपने SimpleAudioEngine को Appflegate में किया था FinishLaunchingWithOptions ... –

+0

हाँ कोई फर्क नहीं पड़ता। शायद स्पर्श घटनाएं धीमी हैं? – Arbel

0

मुझे यकीन नहीं है कि आप अपने SoundEngine में क्या कर रहे हैं, लेकिन मेरे अपने अनुभव में, ध्वनि चलाने के लिए अंतराल प्राप्त करने का सबसे अच्छा तरीका प्रत्येक ध्वनि फ़ाइल के लिए AVAudioPlayer असाइन करना है (जब तक कि आप गड़बड़ाना शुरू नहीं करना चाहते ऑडियोक्यूज़ के साथ)।

मान लें कि आप अपने वर्तमान दृश्य नियंत्रक में एक AVAudioPlayer *assistPlayer; करते हैं:

यहाँ यह एक उदाहरण है।

में अपने viewDidLoad अपने ध्वनि के साथ यह प्रारंभ:

NSURL *wavURL = [[NSBundle mainBundle] URLForResource:@"Assist" withExtension:@"wav"]; 
assistPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:wavURL error:nil]; 

फिर, अपने IBAction में जहां बस करो फ़ाइल खेलना चाहते हैं,:

[assistPlayer play]; 

आप किसी भी अंतराल नहीं मिलना चाहिए ।

+0

कोशिश की लेकिन यह एक फर्क नहीं लग रहा था। वास्तव में कम प्रदर्शन मिला। ओपनल के लिए डेंशन एक सुंदर पतला आवरण है। – Arbel

+0

नमूना आवृत्ति और आपकी WAV फ़ाइल की बिट गहराई क्या है? क्या आपने इसे दोबारा इस्तेमाल करने की कोशिश की है और इसे केवल 16 बिट्स का उपयोग किया है? –

0

क्या आपने Finch को आजमाया था? यह कम विलंबता के साथ ध्वनि बजाने का दावा करता है, और यह ओपनएएल के आसपास सिर्फ एक रैपर भी है।

उसके अलावा, मैं वास्तव में OpenAL के साथ अनुभव नहीं कर रहा हूँ, लेकिन अपने अंतराल के दो संभावित कारण के बारे में सोच सकते हैं:

  1. मुख्य थ्रेड बहुत व्यस्त है - दूसरे के लिए इसे से काम ऑफलोड करने की कोशिश करो धागे।

  2. शायद ओपनएएल को बहुत अधिक बफर के साथ परिभाषित किया गया है, इसलिए पाइपलाइन पूरी आवाज को बफर (या इसका एक बड़ा हिस्सा) में लोड करती है, और उसके बाद प्लेबैक शुरू होती है।

+0

हाँ मैंने फिंच को एक कोशिश दी लेकिन डेंशन के समान परिणाम थे। मैं इसे एक बहुत ही सरल नमूना प्रोजेक्ट में दोहराने में भी सक्षम था https://github.com/so3arbelnox/soundtest – Arbel

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