Tutoriel audio pour iOS: Lecture audio programmatique & lbrack; Edition 2014 & rsqb;

Advertisement

Si vous êtes nouveau ici, vous pouvez vous abonner à mon flux RSS ou suivez-moi sur Twitter. Merci de votre visite!

Tutoriel audio pour iOS: Lecture audio programmatique & lbrack; Edition 2014 & rsqb;

Capture d'écran de l'exemple de projet BasicSounds

Cet article est le troisième d'une série de trois Tutoriel audio couvrant des sujets audio d'intérêt pour le développeur iPhone.

Jusqu'à présent, dans cette série de didacticiels audio, nous avons parlé de la différence entre les formats de fichier et de données et la façon de convertir et d'enregistrer de l'audio sur votre Mac. Maintenant, nous allons à la partie amusante - en fait la lecture audio sur votre téléphone!

Il existe de nombreuses façons de jouer audio sur l'iPhone - Sound System Services, AVAudioPlayer , Services audio file d' attente, et OpenAL. Sans bibliothèques de soutien à l' extérieur, les deux moyens les plus faciles sont de loin système Sound Services et AVAudioPlayer - Parlons donc quand vous le feriez (et ne serait pas) à utiliser ceux -ci , et comment vous pouvez les utiliser.

Services de son système

System Sound Services offre un moyen extrêmement facile de lire des fichiers audio courts. Cela est particulièrement utile pour les alertes audio et les sons de jeu simples (comme faire un «clic» lors du déplacement d'une pièce de jeu). Tout ce que vous avez à faire est le suivant:

  NSString * pewPewPath = [[NSBundle mainBundle] pathForResource: @ "pew-pew-lei" ofType: @ "caf"];  NSURL * pewPewURL = [NSURL fichierURLWithPath: pewPewPath];  AudioServicesCreateSystemSoundID ((__ bridge CFURLRef) pewPewURL et self.pewPewSound);  AudioServicesPlaySystemSound (self.pewPewSound); 

Il est important de définir pewPewSound comme un iVar ou une propriété, et non comme une variable locale afin que vous puissiez en disposer plus tard dans dealloc. Il est déclaré comme SystemSoundID.

Si vous deviez disposer immédiatement après AudioServicesPlaySystemSound(self.pewPewSound) , puis le son ne serait jamais jouer.

N'obtient pas beaucoup plus facile que cela. Cependant, cette méthode présente de sérieux inconvénients:

  • Il prend en charge uniquement les formats de données audio linéaire PCM ou IMA4.
  • Il ne prend en charge que les formats de fichiers audio CAF, AIF ou WAV.
  • Les sons doivent être de 30 secondes ou moins de longueur
  • Le son joue à la fois.
  • Un seul son peut être joué à la fois
  • Et plus encore - consultez le Guide de programmation multimédia.

AVAudioPlayer

Alors que faire si vous avez un fichier audio encodé avec AAC ou MP3 que vous voulez jouer en tant que musique de fond? Un autre moyen facile de jouer de la musique se fait via le AVAudioPlayer classe. Depuis la AVAudioPlayer classe fait partie de AVFoundation , vous devrez @import AVFoundation dans votre projet.
Pour la plupart, il est encore assez simple:

  NSError * erreur;  Self.backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: erreur backgroundMusicURL: & erreur];  [Self.backgroundMusicPlayer prepareToPlay];  [Jeu self.backgroundMusicPlayer]; 

Il existe de nombreux avantages de l' utilisation AVAudioPlayer ; Il vous donne beaucoup de bang pour le mâle. Vous pouvez également jouer plusieurs sons à la fois ( en utilisant un autre AVAudioPlayer pour chaque son), et vous pouvez jouer des sons même lorsque votre application est en arrière - plan.

Cependant, l'inconvénient de AVAudioPlayer est qu'il peut être extrêmement lente. Si vous appuyez sur un bouton et essayez de déclencher un son avec AVAudioPlayer , il y aura un petit retard notable. Mais si cela n'a pas d' importance pour vous (comme pour le démarrage de la musique de fond), AVAudioPlayer est un excellent choix. Par ailleurs, prepareToPlay est facultative; si vous ne l' appelez pas, il sera appelé implicitement lorsque les AVAudioPlayer appels play .

Et il ya un couple d'autres choses à garder à l'esprit:

  1. Si vous jouez de la musique de fond, vous devriez vérifier si d'autres sons (comme l'iPod) jouent en premier, donc vous n'avez pas deux couches de musique en cours à la fois!
  2. Si un appel téléphonique arrive et l'utilisateur choisit "Déclin," par défaut de votre AVAudioPlayer arrêtera. Vous pouvez démarrer sauvegarder à nouveau en vous inscrivant à la AVAudioPlayerDelegate et de reprendre la musique dans le audioPlayerEndInterruption:withOptions méthode.

Exemple de code

Je mets ensemble quelques exemples de code montrant comment utiliser le système Sound Services et AVAudioPlayer que vous pourriez vouloir vérifier. Il illustre également comment utiliser AVAudioSessions, comment gérer les interruptions et comment configurer l'audio pour qu'il soit lu en arrière-plan. Et en plus de démontrer ces API, il a quelques battements funky puissants et un vaisseau spatial cool pour démarrer. Pan Pan!

OpenAL

Si vous écrivez un jeu ou une autre application où vous souhaitez un contrôle fin de l'audio avec une faible latence, vous ne voulez probablement pas utiliser les méthodes ci-dessus. Au lieu de cela, vous pouvez utiliser OpenAL , une bibliothèque audio multi-plateforme supportée par l'iPhone.

OpenAL peut être une bête avec une courbe d'apprentissage abrupte. Heureusement, Alex Restrepo a fait une belle bibliothèque sonore du moteur en utilisant OpenAL que vous pouvez utiliser dans vos projets ou utiliser comme référence.

Une autre option est la bibliothèque de jeux Cocos2D, qui comprend un moteur de son extrêmement facile à utiliser qui rend la lecture audio en un clin d'oeil. Vous pouvez apprendre comment l'utiliser le tutoriel sur Comment faire un jeu iPhone simple avec Cocos2D 3.0.

Où aller en partant d'ici?

C'est à peu près tout ce que je vais couvrir sur les sujets audio dans la programmation iPhone pour l'instant - mais gardez à l'esprit que j'ai à peine rayé la surface. Si vous êtes intéressé par plus, je vous recommande de lire les documents d'Apple, en particulier le Core Audio Overview et le Guide de programmation audio Session, et peut-être creuser OpenAL un peu plus. Vous pouvez également regarder le tutoriel Comment faire un visualiseur de musique qui contient des exemples supplémentaires d'audio iPhone.

J'espère que cette série de didacticiels audio a été utile à d'autres développeurs qui peuvent être nouveaux dans les concepts audio. N'hésitez pas à partager toute autre information que vous connaissez concernant la programmation audio qui peut être utile à d'autres!