Выберите 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];
    }
}