2013-06-11 1 views
1

У меня есть приложение, которое воспроизводит фоновая музыка, используя MPMusicPlayerController и передние звуки, используя AVAudioPlayer. Я хочу контролировать относительный объем, чтобы MPMusicPlayerController был намного ниже, но установка volumne изменяет общий объем системы, как если бы вы использовали кнопки на боковой панели телефона. Есть ли способ снизить объем MPMusicPlayerController без снижения объема системы?Настройка уровня громкости iOS MPMusicPlayerController относительно AVAudioPlayer

MPMusicPlayerController *musicPlayer = [MPMusicPlayerController applicationMusicPlayer]; 
musicPlayer.volume = 0.1; // at this point the overall system volune has been set to 0.1 
[musicPlayer setQueueWithItemCollection:collection]; 
[musicPlayer play]; 

AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&err]; 
[player prepareToPlay]; 
[player setVolume: 1.0]; // I want this to be twice as loud as MPMusicPlayerController 
[player play]; 
+0

Чтобы уточнить, я хочу, чтобы громкость системы оставалась на том, что пользователь установил, используя кнопки регулировки громкости на боковой панели телефона. Затем я хочу установить объемы воспроизведения MPMusicPlayerController и AVAudioPlayer относительно друг друга, чтобы AVAudioPlayer громче. –

ответ

1

Вам нужно научиться «утка» MPMusicPLayer. Попробуйте вызвать метод ниже до и после воспроизведения AVAudioPlayer.

В принципе, [самозаводящийсяAudioSessionWithDucking: YES] перед тем и [сам комплектAudioSessionWithDucking: NO] после.

- (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); 
} 
+0

Спасибо. Некоторое время я не рассматривал этот вопрос. –