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 вы можете получить выходные данные и входные данные.