Wie kann man debuggen, warum ein Sound nicht über Avaudioplayer spielt?
-
05-07-2019 - |
Frage
Ich habe eine einfache iPhone -App mit mehreren Sounds, die bereits abgespielt werden. Eins wird es jedoch insbesondere nicht tun. Der Codeblock, den ich gehackt habe, ist:
NSString *soundPath2 = [[NSBundle mainBundle] pathForResource:@"gameover" ofType:@"wav"];
NSURL *soundFileURL2 = [NSURL fileURLWithPath:soundPath2];
NSError *err;
AVAudioPlayer *sound2 = [[[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL2 error:&err] autorelease];
NSLog(@"Error: %@", [err description]);
NSLog(@"Duration: %f ", [sound2 duration]);
BOOL b = [sound2 play];
NSLog(@"Play Bool: %d", b);
Die Konsole zeigt, dass der Fehler null ist, der Boolesche kehrt wahr und selbst die Dauer ist korrekt! Dennoch macht das Spiel nichts. Wenn ich "Gameover" in einen anderen Sound (ein einfaches Piepton) ändere, ist alles in Ordnung.
Obwohl es großartig wäre, es ins Spiel zu bringen, habe ich auch Schwierigkeiten zu verstehen, welche Fehlerbedingungen usw. Ich kann nach 1) wissen, dass es fehlgeschlagen ist und 2) warum.
Der Sound ist die Frage zur Verfügung unter http://wdr1.com/gameover.wav.
Lösung
Das Problem ist, dass Sie die Avaudioplayer nicht autorelease. Die Spielmethode erfolgt asynchron und wenn der Spieler autorelea wird, hält nichts daran und er stirbt einfach.
Sie sollten Ihren Audio -Player veröffentlichen, sobald der Spieler im Delegierten gespielt hat:
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)audioPlayer successfully:(BOOL)flag