AVAudioPlayer Aider: Jouer plusieurs sons simultanément, s'arrêtant tout à la fois, et de travailler autour Automatique de Comptage de Référence

Je suis en train de créer des boutons qui play seul le son des fichiers et un button que stops tous les sons en cours de lecture. Si l'utilisateur clique sur plusieurs boutons ou même button dans un court laps de temps, l'application doit être en train de jouer tous les sons simultanément. J'ai accompli tout cela sans beaucoup de difficulté à l'aide de Son Système de Services de iOS. Cependant, le Son du Système de Services de jouer les sons à travers le volume que le iPhone's de la sonnerie est réglé. J'essaie maintenant d'utiliser le AVAudioPlayer de sorte que les utilisateurs peuvent play les sons à travers les médias de volume. Voici le code que je suis actuellement (mais sans succès) à l'aide de la jouer les sons:

-(IBAction)playSound:(id)sender
{
   AVAudioPlayer *audioPlayer;
   NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"Hello" ofType:@"wav"];
   audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:soundFile] error:nil];
   [audioPlayer prepareToPlay];
   [audioPlayer play];
}

Chaque fois que j'exécute ce code dans le Simulateur d'iPhone, il ne joue pas le son, mais ne s'affiche pas une tonne de sortie. Quand je le lance sur mon iPhone, le son n'est tout simplement pas jouer. Après avoir fait quelques recherches et essais, j'ai trouvé que le audioPlayer variable est en train d'être libéré par Automatique de Comptage de Référence. En outre, ce code fonctionne lorsque l'audioPlayer variable est définie comme une variable d'instance et une propriété dans mon fichier d'interface, mais il ne me permet pas de jouer plusieurs sons à la fois.

Première chose: Comment puis-je jouer un nombre infini de sons à la fois à l'aide de la AVAudioPlayer et coller avec Automatique de Comptage de Référence? Aussi: Lorsque ces sons sont joués, comment puis-je mettre en place une seconde IBAction méthode pour arrêter de jouer à tous?

Il est intéressant de noter qu'en vertu de l'ARC, on ne peut pas attribuer à une instance locale de AVAudioPlayer et de la jouer. Vous devez conserver une certaine façon. Fort bien fonctionné dans mon cas.

OriginalL'auteur bnasty | 2012-06-25