2013-10-19 14 views
6

L'iPhone 5 ha tre microfoni: superiore anteriore, superiore posteriore e inferiore. Vorrei registrare su tutti contemporaneamente per eseguire l'elaborazione del segnale. Ho provato per diversi giorni senza successo.registrazione stereo su iPhone

Utilizzando AVAudioSession, posso vedere i microfoni:

NSLog(@"%@", [AVAudioSession sharedInstance].availableInputs); 

    "<AVAudioSessionPortDescription: 0x14554400, type = MicrophoneBuiltIn; name = iPhone Microphone; UID = Built-In Microphone; selectedDataSource = Back>" 

NSLog(@"%@", [AVAudioSession sharedInstance].availableInputs[0].inputDataSources); 

    "<AVAudioSessionDataSourceDescription: 0x145afb00, ID = 1835216945; name = Bottom>", 
    "<AVAudioSessionDataSourceDescription: 0x145b1870, ID = 1835216946; name = Front>", 
    "<AVAudioSessionDataSourceDescription: 0x145b3650, ID = 1835216947; name = Back>" 

posso usare AVAudioSessionPortDescription -setPreferredDataSource:error: registrare da uno dei tre. Ma non posso registrare su più di uno contemporaneamente. Se imposto il numero di canali di input su 2, ottengo due tracce identiche dallo stesso microfono.

AVAudioRecorder ha una proprietà channelAssignments che sembra che dovrebbe funzionare, ma AVAudioSession inputNumberOfChannels e maximumInputNumberOfChannels sono entrambi 1. La struttura è progettata per channelAssignments microfoni ausiliari che hanno molteplici canali.

Ho provato a utilizzare AudioUnit di basso livello, ma ottengo lo stesso risultato. Non sono riuscito a trovare alcuna proprietà su AudioUnit per modificare la sorgente di input.

Qualsiasi aiuto sarebbe apprezzato.

risposta

4

La mia comprensione, dopo tutte le mie ricerche che cercano di fare la stessa cosa, è proprio quello che hai descritto - non puoi preferire più fonti di dati per l'unico dispositivo, quindi non puoi registrare da più built-in microfoni contemporaneamente. Se qualcuno può dimostrarmi sbagliato, mi piacerebbe molto sentirlo!

Sidenote: Non riesco a eseguire il codice. Come scritto, ho

Property availableInputs not found on object of type 'id' 

Anche dopo il massaggio quello che hai in un formato che non richiede alcuna cast espliciti:

NSLog(@"%@", [[[AVAudioSession sharedInstance] availableInputs][0] inputDataSources]); 

ottengo SIGABRT:

-[AVAudioSessionPortDescription inputDataSources]: unrecognized selector sent to instance 0xd59dbe0' 

quale SDK stai usando che il tuo codice in realtà compila, molto meno corre?

+0

Penso che sarà necessario ≥ iOS 7.0 (consultare https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAudioSession_ClassReference/Reference/Reference.html#//apple_ref/doc/uid/TP40008240 -CH1-SW112). –

+2

Tutta la mia esperienza riguarda l'utilizzo dell'SDK di iOS 7, quindi da solo non è sufficiente per rispondere alla mia domanda, ma forse mi manca qualcosa di più specifico. –

+0

Hai provato su iOS8 o anche su iOS9 beta? Mi interessa anche registrare due fonti contemporaneamente. – nacho4d