2012-07-28 13 views
5

próbuję uzyskać dźwięk do odegrania, ale kiedy kod:CFURLRef wymaga zmostkowany błąd cast

AudioServicesCreateSystemSoundID ((CFURLRef) alertSound, &soundFileObject); 

zgłasza następujący błąd:

obsady Objective-C typu wskaźnika " bibliotece NSURL *”do C typu wskaźnika 'CFURLRef' (aka 'const struct __CFURL *') wymaga zmostkowany błąd cast

próbowałem zarówno z dwóch następujących sugerowanych rozwiązań:

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

lub

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

Ale nadal nie można uzyskać dźwięk grać.

Domyślam się, że pytanie brzmi: czy błąd pomostu jest przyczyną braku dźwięku, czy powinienem szukać gdzie indziej?

Mogę uzyskać dźwięk do odtworzenia przy użyciu przykładowego kodu SysSound i używam iOS 6 i Xcode 4.5.

Dzięki za wszelkie wskazówki :)

Odpowiedz

9

Obsada nie jest chyba powód, dźwięk nie jest odtwarzany:

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

jest w porządku.

Najprawdopodobniej Twój błąd wynika z kodu, którego nam nie pokazałeś. Częstym problemem jest błąd w tworzeniu adresu URL lub nieprawidłowy format pliku.

zmodyfikować kod w następujący sposób:

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

i sprawdzić, jaki status kodu masz; parmErr (-50) jest stosunkowo powszechny i ​​zazwyczaj oznacza, że ​​adres URL jest zerowy.

Aha, i jeszcze jedna myśl, nie pokazujesz, gdzie właściwie grasz. Wiesz, że AudioServicesCreateSystemSoundID właściwie nie odtwarza dźwięku. Musisz zadzwonić pod numer:

AudioServicesPlaySystemSound(soundFileObject); 

Przeprosiny, jeśli już o tym wiesz!

+0

Tak, -50. Mój NSURL wygląda następująco: NSURL * alertSound = [[NSBundle mainBundle] URLForResource: @ "tap" withExtension: @ "aif"]; Plik "tap.aif" znajduje się w grupie, którą utworzyłem o nazwie Dźwięki. Czy jest jakiś konkretny element, który należy umieścić? Dziękujemy za pomoc! – robspencer77

+0

Dla pewności sprawdź w debuggerze lub 'NSLog', że adres URL jest rzeczywiście zerowy. Oznaczałoby to (jak sądzę, że zaczynasz podejrzewać), że Xcode nie kopiuje twojego dźwięku do pakietu twojej aplikacji. Możesz spróbować usunąć (tylko odniesienie !!!!) z twojego projektu i ponownie go dodać, a także podwójnie sprawdzić, czy pisownia nazwy pliku jest poprawna (czy może to być .aiff?). Nie sądzę, że musisz umieścić go w dowolnym miejscu. Zwykle umieszczam takie rzeczy w grupie "Supporting Files", którą tworzy Xcode, ale nie sądzę, że jest to wymagane. – idz

+0

Ah, rozumiem! Dzięki! :) Nie wiem, dlaczego to nie zostało dodane w pierwszej kolejności. Pozdrawiam, idz! – robspencer77

Powiązane problemy