Я работаю над навигационным приложением, которое использует AVSpeechSynthesizer для вызова направлений. Если я играю подкаст, я хотел бы иметь возможность приостановить звук во время произнесения направления и возобновить его после этого. Это успешно достигается с помощью:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback
withOptions:AVAudioSessionCategoryOptionInterruptSpokenAudioAndMixWithOthers
error:nil];
Однако, если я играю музыку, используя приведенный выше код, инструкция смешивается с музыкой без уменьшения громкости музыки, что затрудняет ее прослушивание. Итак, я попробовал:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback
withOptions:AVAudioSessionCategoryOptionDuckOthers
error:nil];
Теперь фоновая музыка уменьшается в громкости, и это то, что я хочу, но когда я играю разговорный звук (то есть подкаст), он больше не приостанавливается и вместо этого смешивается с инструкцией, хотя и с меньшей громкостью.
Что я действительно хочу, так это что-то вроде: AVAudioSessionCategoryOptionInterruptSpokenAudioAndDuckWithOthers. Однако этого не существует. Я знаю, что такая комбинация возможна, потому что другие приложения (например, Waze) имеют такое поведение.
Я знаю, что вы можете определить, когда воспроизводится звук, используя:
BOOL isOtherAudioPlaying = [[AVAudioSession sharedInstance] isOtherAudioPlaying];
Но я не смог найти способ определить, говорилось ли это аудио или нет. Если бы я мог, я мог бы настроить все согласно тому, что играет в любой момент времени. Может кто-нибудь помочь с этим, предпочтительно в Objective C?