AVAudioSession RemoteIO playAndRecord

Я думаю, что API-интерфейсы AVAudioSession сильно изменились со времен iOS7 и часто сбивают с толку. Моя цель - настроить устройство RemoteIO, одновременно записывать звук с микрофона и воспроизводить сэмплы через наушники. Если нет наушников, не воспроизводите. Если присутствует микрофон Bluetooth, выберите его в качестве предпочтительного вместо микрофона гарнитуры или микрофона USB. Если имеется отдельный наушник, воспроизводите семплы через него. Если тот же блютуз-микрофон также поддерживает гарнитуру, избегайте его воспроизведения сэмплов, так как это приведет к петлеобразованию, создавая беспорядок.

Каковы правильные API, чтобы сделать это? В настоящее время я использую следующий код, но он не выполняет всю работу.

   AVAudioSession *session = [AVAudioSession sharedInstance];


    NSUInteger bluetoothOpt = AVAudioSessionCategoryOptionAllowBluetooth;


    if (![session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:bluetoothOpt | AVAudioSessionCategoryOptionMixWithOthers error:nil]) {
        NSLog(@"Could not set audio session category");
    }

Должен ли я использовать AVAudioSessionCategoryMultiRoute вместо этого? Как выбрать предпочтительный ввод и вывод? Все в iOS 11, как я вижу, API на нем ведут себя по-разному.

1 ответ

Эти требования слишком сложны для выполнения с AVAudioSession. Сделайте ручное управление в remoteIO с помощью обратного вызова рендеринга. В AVAudioSession.sharedInstance(). CurrentRoute вы можете получить выходные данные и входные данные.

Другие вопросы по тегам