Wie man etwas anderes als Linear PCM auf dem iPhone aufzeichnen
-
21-08-2019 - |
Frage
Ich habe eine harte Zeit versucht, etwas anderes als lineare PCM auf dem iPhone aufnehmen :-( Die Proben, die ich gefunden habe (SDK SpeakHere, Zdziarski sind und Sadun Bücher und derjenige bei trailsinthesand.com) verwenden all linear PCM, aber ich würde stattdessen ein häufig verwendetes komprimiertes Format wie (keinen IMA4 oder was auch immer der Name ist ...).
Ich kann einfach nicht herausfinden, wie Sie den Beispielcode zwicken mit verwendet werden, zum Beispiel AAC, MP3 oder AMR statt. Irgendwelche Vorschläge und Hinweise, wie das zu tun, sind sehr willkommen!
(Btw, ich glaube nicht, ein MP3-Encoder noch AMR-Kodierer aus Lizenzgründen zur Verfügung stehen, aber AAC nicht vorhanden ist, oder ???)
Bearbeiten / Update: ich auf den folgenden Text stolperte in Apples "iPhone Application Programming Guide", 2009-01-06, Seite 137, Abschnitt: Recording Audio:
Bevorzugte Audio-Formate in iPhone OS „(Seite 140)‚ und als bevorzugte Audio-Formate auf Seite 140‘Sie können in Audio in jeden der aufgeführten Formate aufnehmen“: „Für komprimiertes Audio wenn einen Ton zu einem Zeitpunkt, zu spielen, und wenn Sie müssen nicht Audio gleichzeitig mit der iPod-Anwendung zu spielen, das AAC-Format in einer CAF oder m4a-Datei verpackt verwenden. "
So interpretiere ich das als ein klares Indiz dafür, dass es in der Tat, nicht nur möglich, sondern sogar bevorzugt, Audio in AAC-Format in einer Datei m4a verpackt aufnehmen, die genau das, was ich will. Aber noch, ich bin nicht in der Lage, dies zu erreichen?!
Danke, / John
Lösung
Halten Sie an diesem docs suchen. In "Core Audio Essentials", die im Abschnitt "Core Audio-Plug-In: Audio Units und Codecs" stellt fest, dass:
iPhone OS enthält die Aufnahme Codecs in Tabelle 2-5 aufgeführt. Wie du kannst sehen, weder MP3 noch AAC-Aufnahme verfügbar. Dies ist aufgrund der hohen CPU Overhead und die daraus folgende Batterie Drain dieser Formate.
Tabelle 2-5 listet verschiedene Formate, sondern als die Text-Notizen nicht enthalten die, die Sie suchen. Wenn Sie diese Formate möchten, müssen Sie haben Ihren eigenen Encoder zu bringen.
Andere Tipps
Es ist möglich, in iPhone 3GS und iPod 2. Generation und höher. Sie haben eine Hardware enconder für AAC. Es ist ein Apple-Beispielprojekt für das, das tut genau das, was Sie tun mögen:
iPhoneExtAudioFileConvertTest
Ein Tipp für faac mit von iPhone-Ausgabe Linear-PCM-Dateien in der AAC-Format zu konvertieren:
Ich fand durch Experimente, dass Sie die -X
Flagge auf der Kommandozeilen-Version von faac (läuft auf Mac OS X) zu verwenden, das „tauscht das Eingangsbytes.“ (Ich denke, es ändert sich die Bytereihenfolge.)
So zum Beispiel, wenn Sie Audio-Datei linear.pcm
auf Ihrem iPhone aufgenommen, könnten Sie dann ausführen:
faac -XP linear.pcm
auf Ihrem Mac, die in die aac-Datei linear.aac
zu konvertieren.
Ich vermute, dies bedeutet, dass Sie vielleicht in der Lage sein faac in Ihrer App verwenden, um die Konvertierung zu tun, wenn man wollte, da es sich um eine C-Bibliothek ist.
Beachten Sie auch, dass, technisch gesehen, ist die Dateien Ausgabe von iPhone-Audio-Diensten in der Regel CAF-Dateien, Core Audio-Format, die sich um eine Reihe von möglichen Kodierungen Art von Wrapper-Format ist: Apples docs auf CAF . Die obige Befehlszeile funktioniert gut für mich, obwohl linear.pcm
mit dem caff
Header beginnt.
Haben Sie versucht, Lame MP3-Encoder? Oder faac / faad AAC-Codecs? Sie können sie in ffmpeg rel="nofollow.
Warum versuchen Sie nicht, TPAACAudioConverter geschrieben von dem legendären Michael Tyson?
TPAACAudioConverter ist eine einfache Objective-C-Klasse, die das führt Umwandlung jeder Audiodatei in einer AAC-codierten M4A, asynchron mit einem Delegierten oder wandelt jede Audiodatenquelle durch eine Klasse bereitgestellt (Das sieht gerade in der AAC-Aufnahme).