2009-07-04 8 views
3

Je travaille sur deux applications iPhone différentes qui enregistrent et jouent simultanément des sons. Pensez au mixage multipiste ... jouez un son et enregistrez-le, puis écoutez ce son tout en enregistrant le son suivant dans un autre fichier. Mon mécanisme pour cela a été de démarrer deux files d'attente audio différentes, une pour l'enregistrement, et une pour jouer.Erreur d'enregistrement audio kAudioQueueErr_CannotStart sur iPhone OS 3.0

Ce travaillait A-OK jusqu'à ce que la sortie de OS 3.0 ... Depuis lors, cependant, ce qui suit se produit:

Si je commence à la file d'attente d'enregistrement en premier lieu, il commence soi-disant bien, mais l'appel à AudioQueueStart pour la file d'attente de lecture renvoie kAudioQueueErr_CannotStart. Si je démarre d'abord la file d'attente de lecture, elle est supposée démarrer correctement, mais l'appel à AudioQueueStart pour la file d'attente d'enregistrements renvoie la même erreur, kAudioQueueErr_CannotStart.

Quelqu'un a-t-il de la chance pour déboguer cette erreur? On dirait que peut-être les deux files d'attente piétinent sur la mémoire de l'autre ou quelque chose? La description officielle est: "La file d'attente audio a rencontré un problème et ne peut pas démarrer." Pas super utile ...

Jeremy

+0

La gestion de session audio s'est révélée être le problème. Les docs sont un peu bizarres parce qu'ils impliquent qu'il est vraiment nécessaire de gérer les sessions audio pour gérer la façon dont votre application interagit avec d'autres applications. Certainement pas le cas. Il faut se méfier. –

Répondre

6

C'est une sorte de réponse cliché, mais avez-vous utilisé l'API de session audio pour définir votre catégorie audio pour "lire et enregistrer"? Vous devez le faire afin de réserver le microphone pour l'utilisation de votre application. Il y avait un tas de changements à la session audio dans 3.0 (pour créer la classe de commodité obj-c AVAudioSession, et pour définir de nouvelles catégories), il est donc possible que des changements là-bas vous gâchent.

BTW, si vous n'êtes pas sur la liste coreaudio-api (lists.apple.com), vous devriez être. La communauté et les ingénieurs d'Apple sont vraiment utiles.

+0

Pour être plus précis: UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord; AudioSessionSetProperty ( kAudioSessionProperty_AudioCategory, sizeof (sessionCategory), & sessionCategory); travaillé pour moi. –

0

Peut-être que je me trompe, mais j'ai le sentiment que seule une file d'attente audio (actif?) Peut exister à la fois.

Vous devrez peut-être passer votre file d'attente audio de sortie sur une unité audio (E/S distantes).
Et AudioQueues sont un peu boiteux pour la lecture, donc une unité audio ne pouvait pas nuire.

Ce mec a réussi à le faire, et en parle dans ce blog post.

Questions connexes