Как вы можете настроить AVAudioSession для прослушивания музыки и приостановки разговорного звука? - PullRequest
0 голосов
/ 01 ноября 2018

Я работаю над навигационным приложением, которое использует 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?

1 Ответ

0 голосов
/ 25 января 2019

Вот как это делается:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback
                                 withOptions:AVAudioSessionCategoryOptionDuckOthers | AVAudioSessionCategoryOptionInterruptSpokenAudioAndMixWithOthers
                                       error:nil];

Работает шарм!

...