Domanda

Ho una semplice app per iPhone con diversi suoni già in riproduzione. Tuttavia, uno in particolare non lo farà. Il blocco di codice che ho hackerato è:

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);

La console mostra che l'errore è nullo, il valore booleano ritorna vero e anche la durata è corretta! Tuttavia, il gioco non fa nulla. Se cambio " gameover " ad un altro suono (un semplice segnale acustico), va tutto bene.

Anche se sarebbe bello farlo funzionare, sto anche lottando per capire quali condizioni di errore, ecc. Posso verificare 1) sapere che non è riuscito e 2) perché.

Il suono è una domanda disponibile su http://wdr1.com/gameover.wav .

È stato utile?

Soluzione

Il problema è che non dovresti rilasciare automaticamente AVAudioPlayer. Il metodo di gioco si svolge in modo asincrono e se il giocatore viene rilasciato automaticamente, non c'è nulla che lo trattiene e morirà.

Dovresti rilasciare il tuo lettore audio una volta che il giocatore ha finito di giocare nel delegato:

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)audioPlayer successfully:(BOOL)flag
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top