2013-07-25 13 views
6

Bu kodu kullanarak bir iPhone üzerinde mevcut ses giriş cihazlarının listesini almak için denedim: hatasızkAudioSessionProperty_InputSources aslında ne işe yarar?

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

çağrı işler ve getiri, ancak sonuçlar dizisi olursa olsun, her zaman hangi donanım boş Ona bağlandım. Cep telefonları için iki adet normal kulaklık, Apple'dan bir tane ve bir tane Samsung ve iki çeşit USB mikrofon (bir iXY from Rode ve bir iM2X from Tascam) denedim, ancak dizi her zaman boş kalıyor. Peki, bu özellik tarafından hangi girdi kaynaklarının listeleneceğini merak ediyorum? Kullanılabilir mi?

Ses yollarında bir dinleyici geri çağırma kullanarak, tüm 4 aygıtın doğru şekilde algılandığını doğrulayabildim. Her bir cihazla da ses kaydı yapabildim, bu yüzden hepsi düzgün çalışıyor. IOS 6.1.3 (10B329) ile bir iPhone 4S kullanıyorum.

cevap

2

iPhone'larda ses programlaması için çok yeniyim, bu nedenle belirli özelliklerin ne kadar iyi olduğu sorusuna bir cevabım yok, ancak ses girişlerinin listesini istiyorsanız, bunun işe yarayacağını düşünüyorum:

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

Bu, bir dizi AVAudioSessionPortDescription nesnesi sağlar. AudioSessionServices sınıfı başvurusundaki belirtildiği gibi

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

kastediyorsun mülkiyet, sadece iPad kamera bağlantı kiti aracılığıyla bağlı bir USB ses aksesuarı ses giriş kaynakları içindir.

Sıfır olmayan bir dizi almak için, iPad kamera bağlantı kiti'a takılan bir USB Audio İş İstasyonu ile sınamanız gerekir.

Burada iPad kamera bağlantı kitini kullanan bazı donanımların listelendiği bir bağlantı var.

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

da sınıf referans aksesuar bağlı temin edilebilen herhangi bir ses giriş kaynağı var ise

gelen bu özelliğin değeri boş dizidir.

Yani (kaydırma aşağı başlığı bazı uyumlu cihazlar alt Listesi'ne) Yukarıdaki linkte bulunan listede, cihazlar ilginizi olacağını mesafede,! Nil sonucu verir ki bu teklifler bazı cihaz olacağını Ses girdisi Alesis iO4, iO2 veya iO2'u ifade eder. Kullanımdan kaldırılmış bir objektif-c alternatifi kullanmak için, Shawn Hershey tarafından sağlanan cevapta bir hak var. Ancak, AVAudioSessionPortDescription sınıfının portType özelliğiyle ilgilenirsiniz. (iOS 6'dan edinilebilir.0) İlgili iki sabit - AVAudioSessionPortLineIn ve AVAudioSessionPortUSBAudio. Bahsedilen ilki, test mikrofonlarınızın bahsettiği bağlantı yolu olan dock konektöründen ses girişi içindir.

iOS 7.0 ise

ve daha sonra availableInputs AVAudioSession sınıfının özelliğini sorgulayabilir. IOS 6'da yalnızca currentRoute özelliğini sorgulayabilirsiniz.

Bu Teknik Q & Çok yararlı buldu - haklısınız gibi AVAudioSession - microphone selection

+1

görünüyor. "' kAudioSessionProperty_InputSources' "sadece USB tabanlı ses girişleri içindir. Bu talihsiz bir durumdur, çünkü tüm *** ses girişlerini Core Foundation/C işlevleri (Objective-C'ye özgü olmayanlar) aracılığıyla almak için kullanılmayan bir yol yoktur. –

+0

@MichaelDautermann Teşekkür ederim, daha üst düzey alternatiflerin daha fazla yük taşıyacağı düşünülürse, bunun talihsiz olduğunu kabul ediyorum. – Bamsworld

+0

@MichaelDautermann ve diğerleri, kamera olmayan bağlantı kiti giriş cihazlarını almak için hangi Objective-C alternatiflerinin var olduğunu söyleyebilir misiniz? Bu soruya cevaben Shawn Hershey'in bahsettiği şey mi? –