Выберите Back Microphone на iPhone 5
Есть ли способ для RemoteIO-устройства поднять микрофон на iPhone 5? Я могу настроить AVAudioSession
на выбор между передним микрофоном или нижним микрофоном, но я не могу найти способ выбрать задний микрофон.
AVFoundation framework
наверняка использует задний микрофон для видеозаписи при использовании задней камеры, но я хочу, чтобы выбрать тот же, используя CoreAudio. Возможно ли это?
Ответы
Ответ 1
Настройка kAudioSessionProperty_Mode
на kAudioSessionMode_VideoRecording
с помощью AudioSessionSetProperty
использует микрофон, ближайший к камере, который должен быть задним микрофоном. Это, если вы используете Службы аудио сессии. AVAudioSessionModeVideoRecording
, если вы используете AVFoundation для записи. Док говорит: "Использование этого режима может привести к тому, что система обеспечит соответствующую обработку звукового сигнала". который я интерпретирую как "мы также можем использовать другие микрофоны для шумоподавления".
Ответ 2
Используйте AVAudioSession для получения доступных входов. На моем iPhone 5 это выглядит так.
NSLog(@"%@", [AVAudioSession sharedInstance].availableInputs);
"<AVAudioSessionPortDescription: 0x14554400, type = MicrophoneBuiltIn; name = iPhone Microphone; UID = Built-In Microphone; selectedDataSource = Back>"
Затем используйте один из этих входов для получения доступных источников данных, например.
NSLog(@"%@", [AVAudioSession sharedInstance].availableInputs[0].dataSources);
"<AVAudioSessionDataSourceDescription: 0x145afb00, ID = 1835216945; name = Bottom>",
"<AVAudioSessionDataSourceDescription: 0x145b1870, ID = 1835216946; name = Front>",
"<AVAudioSessionDataSourceDescription: 0x145b3650, ID = 1835216947; name = Back>"
Теперь вы можете установить предпочтительный источник данных.
AVAudioSessionPortDescription *port = [AVAudioSession sharedInstance].availableInputs[0];
for (AVAudioSessionDataSourceDescription *source in port.dataSources) {
if ([source.dataSourceName isEqualToString:@"Back"]) {
[port setPreferredDataSource:source error:nil];
}
}