2009-07-04 19 views
3

Ich arbeite an ein paar verschiedenen iPhone-Apps, die gleichzeitig Töne aufzeichnen und abspielen. Denken Sie an Multitrack-Mixing ... spielen Sie einen Sound und speichern Sie ihn ab, während Sie den nächsten Sound in einer anderen Datei aufnehmen. Mein Mechanismus dafür war, zwei verschiedene Audio-Warteschlangen zu starten, eine für die Aufnahme und eine für das Abspielen.Audio-Aufnahme-Fehler kAudioQueueErr_CannotStart auf iPhone OS 3.0

Dies funktionierte A-OK bis zur Veröffentlichung von OS 3.0 ... Seitdem jedoch geschieht folgendes:

Wenn ich die Aufnahme Warteschlange zum ersten Mal starten, beginnt es angeblich in Ordnung, aber der Anruf an AudioQueueStart für die Wiedergabewarteschlange gibt kAudioQueueErr_CannotStart zurück.

Wenn ich die Wiedergabewarteschlange zuerst starte, startet es angeblich auch gut, aber der Aufruf von AudioQueueStart für die Datensatzwarteschlange gibt den gleichen Fehler zurück, kAudioQueueErr_CannotStart.

Wer hat Glück, diesen Fehler zu debuggen? Scheint es, als ob die zwei Warteschlangen auf dem Speicher des anderen herumstampfen oder so? Die offizielle Beschreibung lautet: "Die Audio-Warteschlange hat ein Problem festgestellt und kann nicht gestartet werden." Nicht super hilfsbereit ...

Jeremy

+0

Audio-Session-Management erwies sich als das Problem. Die Dokumente sind ziemlich schlecht, weil sie implizieren, dass es wirklich nur notwendig ist, mit Audio-Sitzungen umzugehen, um zu verwalten, wie Ihre App mit anderen Apps interagiert. Definitiv nicht der Fall. In acht nehmen. –

Antwort

6

Es ist eine Art Klischeeantwort, aber haben Sie die Audio-Session-API verwendet, um Ihre Audiokategorie auf "Abspielen und Aufnehmen" einzustellen? Sie müssen dies tun, um das Mikrofon für die Verwendung Ihrer App zu reservieren. Es gab eine Menge Änderungen an der Audiositzung in 3.0 (um die obj-c-Komfortklasse AVAudioSession zu erstellen und einige neue Kategorien zu definieren), so dass es möglich ist, dass Änderungen dort Sie in Unordnung bringen.

BTW, wenn Sie nicht auf der coreaudio-api-Liste (lists.apple.com) sind, sollten Sie sein. Die Community und die Apple Ingenieure dort sind sehr hilfreich.

+0

Um genauer zu sein: UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord; AudioSessionSetProperty ( kAudioSessionProperty_AudioCategory, sizeof (sessionCategory), & sessionCategory ); arbeitete für mich. –

0

Vielleicht bin ich falsch, aber ich habe das Gefühl, dass nur ein (aktiv?) Audio-Warteschlange zu einer Zeit existieren kann.

Möglicherweise müssen Sie die Audio-Ausgangswarteschlange zu einer Audioeinheit (Remote IO) umschalten.
Und AudioQueues sind irgendwie lahm für die Wiedergabe, so dass eine Audioeinheit nicht schaden könnte.

Dieser Typ schaffte es, und spricht darüber in diesem blog post.