AVAudioSession RemoteIO playAndRecord

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

Какие 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 ведут себя по-другому.


person Deepak Sharma    schedule 18.11.2017    source источник
comment
Какие параметры AVAudioSession вы используете? Только Bluetooth или A2DP тоже?   -  person hotpaw2    schedule 19.11.2017
comment
Я использую только Bluetooth, это повлияет?   -  person Deepak Sharma    schedule 19.11.2017


Ответы (1)


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

person woosiki    schedule 21.11.2017