2009-11-02 15 views
7

हमारे पास एक ऐसा गेम है जो रिलीज़ होने के बहुत करीब है, लेकिन हमारे पास एक बहुत ही परेशानी की समस्या है। हमारे बीटा टेस्टर्स फोनों में से एक, वह गेम ध्वनि प्रभाव में से किसी एक को नहीं सुन सकता है। हालांकि, वह पृष्ठभूमि संगीत और शीर्षक स्क्रीन संगीत को ठीक कह सकता है।क्या ऑडियो सर्विसेजप्लेसिस्टमसाउंड और AVAudioPlayer को मिश्रित करना ठीक है?

पृष्ठभूमि और शीर्षक संगीत दोनों AVAudioPlayer के माध्यम से खेला जा रहा है (वे लंबे समय तक हैं, हमें लूपिंग और वॉल्यूम कंट्रोल आदि की आवश्यकता है)। साउंड इफेक्ट्स को ऑडियो सर्विसेजप्लेसिस्टम साउंड के साथ खेला जा रहा है (वे बहुत कम हैं, हमें सटीक नियंत्रण की आवश्यकता नहीं है या पता है कि वे कब खत्म होते हैं, आदि)। यह अधिकांश iPhones पर काम करता है, लेकिन इस पर नहीं। यह सब AVAudioSessionCategorySoloAmbient के ऑडियो सत्र के साथ खेला जा रहा है।

तो मेरे पास दो प्रश्न हैं: - पहला, क्या यह स्वीकार्य कार्यान्वयन है? यानी क्या मुझे कुछ याद आया जो कहता है कि आप इन दो ढांचे को मिश्रण नहीं कर सकते हैं, या एक कारण यह है कि उन्हें मिश्रण करने का बुरा विचार क्यों है? - दूसरा, क्या किसी ने पहले ऐसा कुछ देखा है? यदि हां, तो क्या आपको इसके चारों ओर एक रास्ता मिल गया?

अतिरिक्त पृष्ठभूमि नोट: मैं निश्चित रूप से कह सकता हूं कि अपने फोन पर, यह दो ढांचे का मिश्रण है। वह मोटे तौर पर वही निर्माण तक आवाज सुनने में सक्षम था जहां हमने शीर्षक स्क्रीन संगीत जोड़ा था। इसके अलावा, अगर मैं AVAudioPlayer के माध्यम से काम करने के लिए ध्वनियों में से एक को बदलता हूं, तो वह इसे सुन सकता है। दुर्भाग्यवश, मैं बस ध्वनि को AVAudioPlayers में स्थानांतरित नहीं कर सकता क्योंकि यह बिल्कुल अच्छा प्रदर्शन नहीं करता है, और मुझे बेहतर सिंक्रनाइज़ेशन की आवश्यकता है।

उत्तर

8

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

यदि यह मदद नहीं करता है, तो मुझे अपनी आवाज/कोड के बारे में और बताएं और मैं अपने ऐप में कुछ कोड जोड़ सकता हूं यह देखने के लिए कि क्या मैं वही व्यवहार कर सकता हूं। बेशक, आपके परीक्षकों की तरह लगता है कि इस समस्या में कोई समस्या नहीं है, और शायद मैं इसे भी नहीं देखूंगा।

+0

मैं के रूप में आप अपने मुख्य सवाल (आप दो मिश्रण कर सकते हैं) का उत्तर दिया है, के रूप में स्वीकार किए जाते हैं अपने जवाब को चिह्नित करने के लिए जा रहा हूँ। मुझे लगता है कि यह परीक्षक का फोन एक झटका हो सकता है, क्योंकि मैंने इसे दूसरों के समूह पर काम किया है। – Bdebeez

9

EDIT 2:
मैंने त्रुटि का कारण निर्धारित किया है। दो अलग-अलग ऑडियो फ्रेमवर्क दो अलग-अलग वॉल्यूम सेटिंग्स पर खेलते हैं। मुख्य वॉल्यूम है (जो ऐप में एक बार दिखाई देता है, और इसमें कोई शीर्षक नहीं है) और रिंगर वॉल्यूम (यह तब होता है जब आप बिना किसी एप लोड किए होम स्क्रीन पर होते हैं)। AVAudioPlayer कॉल मुख्य वॉल्यूम सेटिंग के साथ खेलता है। जैसा कि मैंने श्रेणी को AVAudioSessionCategorySoloAmbient (नीचे कोड देखें) सेट किया है, यह वॉल्यूम नियंत्रण है जिसे ऐप के अंदर वॉल्यूम रॉकर का उपयोग करने पर समायोजित किया जाएगा। सिस्टमसाउंड, हालांकि, रिंगर वॉल्यूम में खेले जाते हैं। यह ऐप के अंदर नहीं आएगा, और इस तरह उपयोगकर्ता को गेम के दौरान अपनी सेटिंग्स को समायोजित करने की अनुमति नहीं देता है।

उपयोगकर्ता के लिए संभावित भ्रम देखना आसान है: मान लें कि उनके पास रिंगर सेट कम है, या यहां तक ​​कि बंद भी है। वे खेल खेलना शुरू करते हैं। वे शीर्षक स्क्रीन संगीत (AVAudioPlayer) सुनते हैं और वॉल्यूम को ऊपर या नीचे चालू करने में सक्षम होते हैं और यह सामान्य रूप से प्रतिक्रिया देता है। फिर वे खेल शुरू करते हैं और ध्वनि प्रभाव खेलते हैं (सिस्टमसाउंड), और वे कुछ भी नहीं सुनते क्योंकि रिंगर वॉल्यूम कम/बंद होता है। ध्वनि प्रभाव सुनने के प्रयास में, वे वॉल्यूम को टक्कर देते हैं और पृष्ठभूमि संगीत तदनुसार जवाब देता है। तो इस दृष्टिकोण से, यह निश्चित रूप से लगता है कि ध्वनि प्रभाव सिर्फ खेल नहीं रहे हैं।

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

मूल उत्तर: सभी दस्तावेज़ों के माध्यम से पुनः खोदने में, मुझे जवाब मिला। मैं ऑडियो सत्र को सही ढंग से सक्रिय नहीं कर रहा था। इससे पहले मैं केवल श्रेणी स्थापित करने के लिए इस कोड को था:

NSError *setCategoryError = nil; 
BOOL categoryWasSet = [[AVAudioSession sharedInstance] 
           setCategory: AVAudioSessionCategorySoloAmbient 
           error: &setCategoryError]; 

लेकिन मैं यह भी निम्न कोड को स्पष्ट रूप से ऑडियो सत्र सक्रिय करने के लिए जोड़ने के लिए की जरूरत:

NSError *activationError = nil; 
BOOL activationSuccess = [[AVAudioSession sharedInstance] 
           setActive: YES 
           error: &activationError]; 

मैं गए इस उपयोगकर्ता के साथ फिर से परीक्षण किया , और इसने पूरी तरह से इस मुद्दे को ठीक कर दिया है। उम्मीद है कि किसी भी ऐसी समस्या में मदद मिलेगी जो समान समस्या हो सकती है।

संपादित करें: ऐसा लगता है कि यह सब कुछ हल नहीं हुआ है। मुझे अपने परीक्षक से झूठा सकारात्मक मिला, और जब विस्तार से अधिक जांच की गई तो ऐसा लगता है कि उसने वास्तव में सिस्टमसाउंड उत्पन्न आवाजों को नहीं सुना था।

+0

मुझे आश्चर्य है कि अगर यह है कि उपयोगकर्ता एक साधारण परीक्षण एप्लिकेशन कि दो ध्वनियों निभाता है, के साथ साथ AVAudioSession सेटिंग्स, और मात्रा, आदि – mahboudz

+0

हाँ, यह एक बहुत अच्छा विचार है जैसी चीजों के लिए NSLogs का एक बहुत भेजने और एक ही बात सोच रहा था के लायक है। अगर मैं कुछ दिलचस्प पा सकता हूं तो मैं वापस रिपोर्ट करूंगा। – Bdebeez

+0

अजीब तरह से पर्याप्त है, मैं सिम्युलेटर पर इस पुन: पेश करने में सक्षम था - और मैं एक संदेश दिखाई श्रेणी करने में कोई समस्या नहीं है। मुझे बिल्कुल यकीन नहीं है कि इसका जवाब कैसे दिया जाए। मैं शायद एमपी 3 शीर्षक संगीत नहीं चला सकता (क्योंकि श्रेणी/डब्ल्यू ओ श्रेणी में मुझे एचडब्ल्यू डिकोडर्स तक पहुंच नहीं होगी)। वास्तव में विडंबना बात है जब मैं इस परीक्षण उपयोगकर्ता अपने फोन से लॉग खींचती थी, प्राप्त करने के लिए है कि पहले टेस्ट रन लॉग वास्तव में काम किया है और खेला सब लगता है :) तो मैं अपनी सुंदर निर्णायक है कि इसके ज्यादातर एक अस्थायी लगता है, और है शायद श्रेणी सेट को ठीक से प्राप्त करने से संबंधित है। – Bdebeez

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