2009-03-24 4 views
5

Ho difficoltà a provare a registrare qualcosa di diverso dal PCM lineare su iPhone :-( I campioni che ho trovato (SDK's SpeakHere, i libri di Zdziarski e Sadun e tutti su PCM lineare ma preferisco un formato compresso comunemente usato (non ima4 o qualunque sia il nome ...)Come registrare qualcosa di diverso da Linear PCM su iPhone

Non riesco proprio a capire come modificare il codice di esempio da utilizzare con, ad esempio, AAC, MP3 o AMR.Qualsiasi suggerimento e suggerimento su come farlo sono molto apprezzati!

(Btw, non penso che un encoder MP3 o codificatore AMR siano disponibili a causa di problemi di licenza, ma AAC non esiste, o ???)

Edit/Update: mi sono imbattuto il seguente testo in "Applicazione iPhone Programming Guide" di Apple, 2009-01-06, pagina 137, sezione: Registrazione audio:
" È possibile registrare l'audio in uno dei formati elencati in "Formati audio preferiti in iPhone OS" (pagina 140) ", e come formati audio preferiti a pagina 140 sono:" Per audio compresso quando si riproduce un suono alla volta e quando si non è necessario riprodurre l'audio simultaneamente con l'applicazione iPod, utilizzare il formato AAC confezionato in un file CAF o m4a. "
Pertanto, lo interpreto come una chiara indicazione che è davvero, non solo possibile, ma anche preferibile, per registrare l'audio in formato AAC racchiuso in un file m4a, che è proprio quello che voglio nt. Ma ancora, non sono in grado di farlo ?!

Grazie, /John

risposta

4

Continua a guardare quei documenti. In "Core Audio Essentials", la sezione "Core Audio Plug-in: Audio Units e codec", osserva che:

iPhone OS contiene la registrazione codec elencati nella Tabella 2-5. Come è possibile vedere vedere, né la registrazione MP3 o AAC è disponibili. Ciò è dovuto all'alto sovraccarico della CPU e alla conseguente scarica della batteria , di questi formati.

La Tabella 2-5 elenca diversi formati, ma poiché le note di testo non includono quelle che state cercando. Se vuoi quei formati dovrai portare il tuo codificatore.

+0

Grazie per il riferimento a quella documentazione! Questo rende chiaro che devo ottenere un encoder esterno. –

0

Hai provato Lame encoder mp3? Oppure i codec AAC faac/faad? Puoi incorporarli in ffmpeg per ancora più codec audio.

+0

Preferisco non usare ancora un'altra libreria se è possibile evitarlo, quindi no, non ho provato nessuna di quelle librerie. Ad esempio, è sicuro che sia possibile registrare in AAC su iPhone senza ricorrere a strumenti esterni, giusto? –

+1

Da http://developer.apple.com/iphone/library/documentation/MusicAudio/Conceptual/CoreAudioOverview/index.html, AAC, MP3 e AMR dovrebbero essere disponibili nativamente su iPhone. Ho suggerito alternative open source perché pensavo che ciò non corrispondesse alle tue esigenze. – mouviciel

+0

Penso che questi codec siano tutti decodificatori capaci, ma quando si parla di codifica non credo che MP3 e AMR siano capaci. Non so su AAC. Ancora una volta, la mia domanda è: come faccio a modificare i campioni esistenti per utilizzare qualcosa di diverso dal PCM lineare? –

1

Un consiglio per l'utilizzo di FAAC convertire da file PCM lineari iPhone-output in formato AAC:

Ho trovato attraverso la sperimentazione che si deve utilizzare il flag -X sulla versione da riga di comando di FAAC (in esecuzione su Mac OS X), che "scambia i byte di input". (Credo che cambia l'endian-ness.)

Così, per esempio, se si audio registrato il file linear.pcm sul vostro iPhone, si potrebbe quindi eseguire:

faac -XP linear.pcm 

sul vostro Mac per convertire in il file aac linear.aac.

Suppongo che questo significhi che potresti essere in grado di utilizzare faac all'interno della tua app per eseguire la conversione, se lo desideri, dato che si tratta di una libreria C.

Si noti inoltre che, tecnicamente, i file prodotti dai servizi audio di iPhone sono in genere file CAF, Core Audio Format, che è una specie di formato wrapper attorno a una serie di possibili codifiche: Apple's docs on CAF. La riga di comando sopra funziona bene per me anche se linear.pcm inizia con l'intestazione caff.

2

E 'possibile in iPhone 3GS e iPod di seconda generazione e superiori. Hanno un hardware enconder per AAC. C'è un progetto di esempio di Apple per questo che fa esattamente ciò che si vuole fare:

iPhoneExtAudioFileConvertTest

0

Perché non provare TPAACAudioConverter scritto dal leggendario Michael Tyson?

TPAACAudioConverter è una semplice classe Objective-C che esegue la conversione di qualsiasi file audio a un m4a AAC codificato, asincrono con un delegato, o converte qualsiasi audio fornita da una classe di origine di dati (che fornisce per registrare direttamente in AAC).