Я впервые использую классы MPMusicPlayerController и AVSpeechSynthesizer в приложении. Это запущенное приложение, которое воспроизводит музыку (используя MPMusicPlayerController) и обновляет бегун со статистикой каждые 5 минут (используя AVSpeechSynthesizer). Он отлично работает, но музыка и трансляция находятся на том же громкости, поэтому в зависимости от песни, которую может быть трудно услышать, ее можно услышать, поэтому теперь я хочу, чтобы громкость музыки уменьшалась, когда статистика транслируется. Приведенный ниже код работает только для уменьшения громкости музыки, когда статистика начинает вещание, но она не возобновляет музыку после завершения передачи статистики, что, конечно же, я хочу, чтобы она делала. Я использую это решение из этого сообщения Setting iOS MPMusicPlayerController volume relative to AVAudioPlayer. Мой код ниже:MPMusicPlayerController и AVSpeechSynthesizer пытается реализовать ducking
- (void)setAudioSessionWithDucking:(BOOL)isDucking
{
AudioSessionSetActive(NO);
UInt32 overrideCategoryDefaultToSpeaker = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof (overrideCategoryDefaultToSpeaker), &overrideCategoryDefaultToSpeaker);
UInt32 overrideCategoryMixWithOthers = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof (overrideCategoryMixWithOthers), &overrideCategoryMixWithOthers);
UInt32 value = isDucking;
AudioSessionSetProperty(kAudioSessionProperty_OtherMixableAudioShouldDuck, sizeof(value), &value);
AudioSessionSetActive(YES);
}
- (void)updateLabels
{
if(fmod(mins,5) == 0){
[self setAudioSessionWithDucking:YES];
AVSpeechUtterance *utterance = [AVSpeechUtterance
speechUtteranceWithString:newText];
AVSpeechSynthesizer *synth = [[AVSpeechSynthesizer alloc] init];
utterance.rate = 0.45;
utterance.pitchMultiplier = 0.95;
utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-GB"];
utterance.volume = 1.0;
[synth speakUtterance:utterance];
[self setAudioSessionWithDucking:NO];
}
}