2013-05-12 3 views
3

Je dois avoir un enregistrement audio (un cours, etc.) sur l'iPhone et lire directement les écouteurs.Utilisation simultanée d'AVAudioRecorder et d'AvAudioPlayer

J'ai du code qui fonctionne - la plupart du temps!

  1. Je mis mon AVAudioSession

    [[AVAudioSession sharedInstance] setCategory: erreur AVAudioSessionCategoryPlayAndRecord: nil];

  2. J'ai configuré mon lecteur et enregistreur, les deux pointant vers la même URL.

    AudioRecorder = [[AVAudioRecorder alloc] initWithURL: soundFileURL paramètres: recordSettings erreur: erreur &];

    // mis en place la lecture audio Audioplayer = [[AVAudioPlayer alloc] initWithContentsOfURL: soundFileURL erreur: erreur &];

  3. je me prépare à jouer et enregistrer

    [AudioRecorder prepareToRecord]; [audioPlayer prepareToPlay];

Tout se passe bien pendant un moment. Puis, soudainement, le joueur s'arrête et son temps actuel passe à zéro.

Il ne semble pas que cela soit traité, car je peux continuer à jouer le son enregistré juste à partir de la position de départ. L'arrêt se produit apparemment de manière aléatoire, à des moments différents à chaque fois.

Quelqu'un at-il des suggestions sur le problème ou comment déboguer?

Merci d'avance!

+0

Cela semble être une condition de concurrence. Si l'enregistreur n'insère pas suffisamment de données, le lecteur atteindra la fin et s'arrêtera. Jetez un oeil à cette question: http://stackoverflow.com/questions/7184341/ios-sample-code-for-simultaneous-record-and-playback – borrrden

Répondre

2

Pour résumer la randonnée suivante: dans mon expérience, l'AVAudioPlayer ne jouera que aussi longtemps que le fichier avait des données, quand il a été initialisé.

Je me bats avec la même chose; Je me demande si vous avez déjà trouvé une bonne solution. Je travaille sur un projet similaire (je veux pouvoir enregistrer, et lire avec un léger retard, tout en enregistrant).

Je commence par créer un AVAudioRecorder, qui fonctionne bien. Ensuite, je lance un AVAudioPlayer avec initWithContentsOfURL, pointant vers le même fichier. Ce que j'ai trouvé c'est que s'il y avait, par exemple, 3 secondes de son (via la propriété .duration) dans ce fichier au démarrage du lecteur, il s'arrêterait après 3 secondes, même si l'AVAudioRecorder a continué après cela . J'ai essayé de contourner ce problème en créant un second lecteur une fois que le premier approche de la fin de la durée initiale de l'enregistrement, mais il en résulte une petite perte d'audio dont j'ai l'air de me débarrasser.

Si seulement nous pouvions dire à AVAudioPlayer de continuer à lire le fichier!

Questions connexes