2009-01-06 7 views
3

J'ai réussi à jouer un seul son dans l'application iPhone que j'ai commencé, mais je souhaite maintenant jouer plusieurs sons basés sur un bouton. Créer un ensemble distinct de fichiers .m et .h pour chaque son, puis les inclure tous, ne semble pas être le moyen le plus efficace d'aborder ce problème en termes de codage ... alors, encore une fois, je ne fais que commencer avec Cocoa et vient de terminer ma première application.Plusieurs sons audio dans l'application iPhone?

Toute aide est appréciée. La clé ici est plusieurs sons, chacun déclenché par son propre bouton ou image. Merci.

+1

S'il vous plaît ne pas faire une autre application de pet. Je t'en supplie. –

Répondre

2

Je n'ai aucune expérience directe avec le développement de l'iPhone, mais en théorie pourriez-vous créer un seul gros fichier son avec tous vos sons? Chaque son peut être séparé par juste assez de silence pour être accédé individuellement par un index temporel. Bien sûr, l'inconvénient est que vous devrez charger le fichier entier en mémoire, à moins que vous ne puissiez trouver un moyen de charger des morceaux de façon aléatoire ...

8

Si les fichiers sont au format MP3 ou AAC, alors vous ne pouvez jouer un à la fois. Ceci est une limitation de l'audio de base sur l'iPhone.

En termes de jouer plusieurs sons à la fois, c'est facile, il suffit de créer une nouvelle instance de joueur pour chacun que vous voulez jouer (et souvenez-vous de les libérer lorsque vous avez terminé)

NSString *path = [[NSBundle mainBundle] pathForResource:@"dream" ofType:@"m4a"]; 
AVAudioPlayer* theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; 
theAudio.delegate = self; 
[theAudio play]; 

Pour convertir un fichier MP3 en quelque chose comme IMA4 (que vous pouvez jouer plus d'un à la fois) vous exécutez la commande suivante (dans le terminal, léopard):

/usr/bin/afconvert -f caff -d ima4 sound.mp3 sound.caf 

le code ci-dessus est le firmware 2.2 uniquement, mais vous pouvez faire la même chose avec les fichiers AudioQueue si vous voulez soutenir les firmwares plus anciens (c'est juste beaucoup plus complexe, donc je n'ai pas listé le code ici).

1

@rustyshelf - cela fonctionne-t-il dans le simulateur? J'utilise ce code, et en utilisant # import, mais ni audioPlayerDidFinishPlaying ni audioPlayerDecodeErrorDidOccur ne sont jamais appelés. Très ennuyeux d'essayer de déboguer.

+0

Aha - Je l'ai compris, en quelque sorte. Assurez-vous de désactiver tous les périphériques audio Bluetooth sur le simulateur. http://www.iphonedevsdk.com/forum/iphone-sdk-development/2362-bluetooth-error-simulator.html – John