2013-07-25 22 views
6

Ho provato a prendere l'elenco dei dispositivi di input audio disponibili su un iPhone utilizzando questo codice:Che cosa sono kAudioSessionProperty_InputSources effettivamente utili?

CFArrayRef arrayRef; 
UInt32 size = sizeof(arrayRef); 
OSStatus status = AudioSessionGetProperty(kAudioSessionProperty_InputSources, &size, &arrayRef); 
assert(status == noErr); 
NSArray *array = (__bridge NSArray *)arrayRef; 

Le opere di chiamata e restituisce senza errori, ma l'allineamento dei risultati è sempre vuoto, non importa quale hardware Mi sono collegato ad esso Ho provato due normali cuffie per cellulari, una originale di Apple e una di Samsung e due tipi di microfoni USB (uno iXY from Rode e uno iM2X from Tascam), ma l'array rimane sempre vuoto. Quindi mi chiedo quali tipi di fonti di input sarebbero effettivamente elencate da questa proprietà? È utilizzabile per niente?

Utilizzando un callback listener sui percorsi audio, sono stato in grado di verificare che tutti e 4 i dispositivi siano stati rilevati correttamente. Sono anche riuscito a registrare l'audio con ciascuno dei dispositivi, quindi funzionano tutti correttamente. Uso un iPhone 4S con iOS 6.1.3 (10B329).

risposta

2

Sono molto nuovo alla programmazione audio su iPhone, quindi non ho una risposta alla domanda su quale sia la particolare proprietà, ma se vuoi la lista di input audio, penso che funzionerà:

NSArray * ais = [[AVAudioSession sharedInstance] availableInputs]; 

Fornisce una matrice di oggetti AVAudioSessionPortDescription.

for (id object in ais) { 
    AVAudioSessionPortDescription * pd = (AVAudioSessionPortDescription*)object; 
    NSLog(@"%@",pd.portName); 
} 
2

La proprietà si fa riferimento è solo per sorgenti di ingresso audio a un accessorio audio USB in dotazione attraverso il kit di collegamento iPad fotocamera, come indicato nel AudioSessionServices di riferimento di classe.

Per ottenere un array che non sia zero, è necessario testare con una USB Audio Workstation che si collega al kit di connessione della fotocamera per iPad.

Ecco un collegamento che elenca alcuni componenti hardware che utilizzano il kit di connessione fotocamera iPad.

Connecting USB audio interfaces using the Apple iPad Camera Connection Kit.

anche dal riferimento classe

Se non v'è alcuna sorgente di ingresso audio disponibile dall'accessorio allegata, il valore di questa proprietà è un array vuoto.

Così dalla lista trovata nel link qui sopra (scorrere verso il basso nella lista alcuni dispositivi compatibili sub voce), dispositivi che si sarebbe interessato a, che producono una! Risultato pari a zero, sarebbe un po 'di dispositivo che offre ingresso audio come il Alesis iO4, iO2 o iO2 express.

EDIT: c'è un merito nella risposta fornita da Shawn Hershey, riguardo all'uso di un'alternativa oggettiva-c non deprecata. Tuttavia, si è più interessati alla proprietà portType della classe AVAudioSessionPortDescription. (disponibile da iOS 6.0) Due costanti di interesse sono: AVAudioSessionPortLineIn e AVAudioSessionPortUSBAudio. Il primo menzionato è per l'ingresso audio attraverso il connettore dock, che è il modo in cui i microfoni testati menzionati si connettono.

in iOS 7.0 e versioni successive è possibile interrogare i availableInputs proprietà della AVAudioSession classe. In iOS 6 è possibile interrogare solo la proprietà currentRoute.

ho trovato questo tecnico Q & A molto utile - AVAudioSession - microphone selection

+1

Sembra che tu abbia ragione. "' kAudioSessionProperty_InputSources' "è solo per ingressi audio basati su USB. Questo è un peccato, in quanto non esiste un modo non deprecato per ottenere tutti gli input audio *** tramite le funzioni Core Foundation/C (che non sono specifici di Objective-C). –

+0

@MichaelDautermann Grazie, sono d'accordo che è un peccato, dato che le alternative di livello più alto porteranno più spese generali. – Bamsworld

+0

@MichaelDautermann e altri, puoi dirmi quali alternative di Objective-C esistono per ottenere i dispositivi di input del kit non-camera-connessione-kit? È quello menzionato da Shawn Hershey nella sua risposta a questa domanda? –

Problemi correlati