2013-06-11 30 views
1

我有一个应用程序,播放使用MPMusicPlayerController的背景音乐和使用AVAudioPlayer的前景声音。我想控制相对音量,以便MPMusicPlayerController低得多,但设置音量会改变整个系统音量,就好像使用手机侧面的按钮一样。有没有办法在不降低系统音量的情况下降低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之前和之后调用下面的方法。

基本上,[self setAudioSessionWithDucking:YES]之前和[self setAudioSessionWithDucking: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

谢谢。有一段时间我没有看过这个问题。 –

相关问题