2012-07-28 8 views
5

मैं खेलने के लिए एक ध्वनि पाने के लिए कोशिश कर रहा हूँ की आवश्यकता है लेकिन जब मैं कोड:CFURLRef एक पाट डाली त्रुटि

AudioServicesCreateSystemSoundID ((CFURLRef) alertSound, &soundFileObject); 

यह निम्न त्रुटि फेंकता है:

ऑब्जेक्टिव-सी सूचक प्रकार के कास्ट ' NSURL * CFURLRef '(उर्फ' स्थिरांक struct __CFURL * ')' सी सूचक प्रकार करने के लिए 'एक पाट डाली त्रुटि

मैं दो के दोनों की कोशिश की है की आवश्यकता है सुझाव दिया समाधान निम्नलिखित:

AudioServicesCreateSystemSoundID ((__bridge CFURLRef) alertSound, &soundFileObject); 

या

AudioServicesCreateSystemSoundID ((CFURLRef) CFBridgingRetain(alertSound), &soundFileObject); 

लेकिन मैं अभी भी ध्वनि चलाने के लिए नहीं मिल सकता है।

मुझे लगता है कि सवाल यह है: क्या ब्रिजिंग त्रुटि ध्वनि के कारण नहीं है, या मुझे और कहां देखना चाहिए?

मैं SysSound नमूना कोड का उपयोग करके ध्वनि चलाने के लिए ध्वनि प्राप्त कर सकता हूं और मैं आईओएस 6 और एक्सकोड 4.5 का उपयोग कर रहा हूं।

किसी भी संकेत दिए गए के लिए धन्यवाद :)

उत्तर

9

डाली शायद यही कारण है ध्वनि नहीं चल रहा है नहीं है:

AudioServicesCreateSystemSoundID ((__bridge CFURLRef) alertSound, &soundFileObject); 

ठीक है।

अधिकतर आपकी त्रुटि उस कोड में है जिसे आपने हमें नहीं दिखाया है। एक सामान्य समस्या यूआरएल निर्माण या अमान्य फ़ाइल प्रारूप में एक त्रुटि है।

इस प्रकार अपने कोड को संशोधित करें:

OSStatus status = AudioServicesCreateSystemSoundID((__bridge CFURLRef)alertSound, &soundFileObject); 
NSLog(@"AudioServicesCreateSystemSoundID status = %ld", status); 

और क्या स्थिति कोड आपको मिल की जांच; parmErr (-50) अपेक्षाकृत आम है और आमतौर पर इसका मतलब है कि आपका यूआरएल शून्य है।

ओह, और एक और विचार, आप यह नहीं दिखाते कि आप वास्तव में ध्वनि कहां बजा रहे हैं। आप जानते हैं कि AudioServicesCreateSystemSoundID वास्तव में ध्वनि नहीं चलाता है। आपको कॉल करने की आवश्यकता है:

AudioServicesPlaySystemSound(soundFileObject); 

क्षमा करें यदि आप पहले से ही जानते थे!

+0

हाँ, -50। मेरा NSURL इस तरह दिखता है: NSURL * चेतावनीसाउंड = [[एनएसबंडल मेनबंडल] URLForResource: @ "टैप" एक्सटेंशन के साथ: @ "aif"]; और फ़ाइल "tap.aif" एक समूह में स्थित है जिसे मैंने ध्वनि कहा है। क्या कहीं विशिष्ट है कि इसे रखा जाना चाहिए? आपकी मदद के लिए बहुत धन्यवाद! – robspencer77

+0

बस यह सुनिश्चित करने के लिए कि डीबगर में या 'एनएसएलओजी' के साथ जांच करें कि यूआरएल वास्तव में शून्य है। इसका मतलब यह होगा कि (जैसा कि मुझे लगता है कि आपको संदेह होना शुरू हो रहा है) कि एक्सकोड आपके ऐप के बंडल में आपकी आवाज कॉपी नहीं कर रहा है। आप इसे प्रोजेक्ट से (केवल संदर्भ !!!!) को हटाने का प्रयास कर सकते हैं और इसे फिर से जोड़ सकते हैं और यह भी जांच कर सकते हैं कि फ़ाइल नाम की वर्तनी सही है (यह .aiff हो सकती है?)। मुझे नहीं लगता कि आपको इसे कहीं भी विशेष रखना होगा। मैं आमतौर पर ऐसी चीजें "सहायक फाइल" समूह में डालता हूं जो एक्सकोड बनाता है, लेकिन मुझे नहीं लगता कि यह आवश्यक है। – idz

+0

आह, समझ गया! धन्यवाद! :) यह सुनिश्चित नहीं है कि उसने पहले स्थान पर ठीक से क्यों नहीं जोड़ा था। चीयर्स, idz! – robspencer77

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