मुझे आशा है कि शीर्षक बहुत भ्रामक नहीं है का उपयोग कर ... :)AudioServicesAddSystemSoundCompletion __bridge
मैं इतना है कि यह करने के लिए एक प्रणाली ध्वनि चलाने और जोड़ने SoundCompletion-कॉलबैक:
AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, completionCallback, (__bridge_retained void *)self);
«जबकि स्वयं »एक सरल NSObject
पूरा होने के कॉलबैक में मैं फिर से खेल दिनचर्या कॉल करने के लिए कोशिश है:
मैं __bridge_transfer और जोड़ने के लिए किया था _ cbridge को _bridge_retained, अन्यथा मुझे त्रुटियों, दुर्घटनाओं, या अन्य अप्रत्याशित व्यवहार मिलता है।
लेकिन पूरी चीज इसके बावजूद काम नहीं करती है।
मैं एनएसएमयूटेबलएरे में खेलने के लिए ध्वनि संग्रहीत करता हूं, सरणी की पहली प्रविष्टि पकड़ता हूं और इसे चलाता हूं, ध्वनि पूर्णता जोड़ता हूं और आशा करता हूं कि सामान होता है। - लेकिन सब है कि बनाए रखा हस्तांतरण सामग्री के साथ, NSMutableArray दूसरी कॉल पर खाली है ...
कोड यह रहा:
static void completionCallback (SystemSoundID mySSID, void *myself) {
NSLog(@"Audio callback");
AudioServicesRemoveSystemSoundCompletion (mySSID);
AudioServicesDisposeSystemSoundID(mySSID);
[(__bridge_transfer Speaker *)myself speakCharacter];
CFRelease(myself); // I heard I need this?
}
-(void)speakCharacter{
if([sounds count] > 0){
NSString *soundToPlay = [sounds objectAtIndex:0];
[sounds removeObjectAtIndex:0];
NSLog(@"TxtToSpeak %@", soundToPlay);
CFURLRef soundFileURLRef;
NSURL *path = [[NSBundle mainBundle] URLForResource:[soundToPlay uppercaseString] withExtension:@"aif"];
soundFileURLRef = (__bridge CFURLRef)path;
SystemSoundID soundID;
AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, completionCallback, (__bridge_retained void *)self);
AudioServicesPlaySystemSound (soundID);
}
}
[संपादित करें] - मेरी खुद सवाल का जवाब:
इसे स्वयं ढूंढने के लिए हमेशा अच्छा लगा :)
बाहर निकलता है, मैं लगभग वहां था।
कॉलबैक स्थापित करने के लिए कॉल इस प्रकार है:
AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, completionCallback, (__bridge_retained void *)self);
फिर, कॉलबैक-समारोह में, मैं यह कर:
myClass *theClass = (__bridge myClass *)myself;
CFRelease(myself);
[theClass playNextSound]; // The routine that plays the sounds
और यह काम करता है ...
उत्तर के लिए धन्यवाद, वास्तव में मेरी मदद की! हालांकि इसे लगभग याद किया गया है, क्योंकि प्रश्न अनुत्तरित दिखाई देता है - क्या आपको अपने प्रश्न का उत्तर जोड़ने की अनुमति है? या मैं इसे अपनी टिप्पणियों पर इंगित कर सकता हूं? चीयर्स वी वैसे भी;] – davidfrancis