J'utilise les classes MPMusicPlayerController et AVSpeechSynthesizer pour la première fois dans une application. C'est une application en cours d'exécution qui joue de la musique (en utilisant MPMusicPlayerController) et met à jour le coureur avec des statistiques toutes les 5 minutes (en utilisant AVSpeechSynthesizer). Cela fonctionne bien, mais la musique et la diffusion sont au même volume, donc en fonction de la chanson jouée, il peut être difficile d'entendre les statistiques, alors maintenant je veux que le volume de musique diminue pendant que les statistiques sont diffusées. Le code ci-dessous ne fonctionne que pour réduire le volume de musique lorsque les statistiques commencent à diffuser, mais il ne reprend pas la musique après la diffusion des statistiques, ce qui est bien sûr ce que je veux qu'il fasse. J'utilise cette solution à partir de ce poste Setting iOS MPMusicPlayerController volume relative to AVAudioPlayer. Mon code est ci-dessous:MPMusicPlayerController et AVSpeechSynthesizer essayant d'implémenter 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];
}
}