设置相对于 AVAudioPlayer 的 iOS MPMusicPlayerController 音量

Posted

技术标签:

【中文标题】设置相对于 AVAudioPlayer 的 iOS MPMusicPlayerController 音量【英文标题】:Setting iOS MPMusicPlayerController volume relative to AVAudioPlayer 【发布时间】:2013-06-11 23:00:32 【问题描述】:

我有一个使用 MPMusicPlayerController 播放背景音乐和使用 AVAudioPlayer 播放前景声音的应用。我想控制相对音量以使 MPMusicPlayerController 低得多,但设置音量会改变整个系统音量,就像使用手机侧面的按钮一样。有没有办法在不降低系统音量的情况下降低 MPMusicPlayerController 的音量?

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];

【问题讨论】:

澄清一下,我希望系统音量保持在用户使用手机侧面的音量按钮设置的任何值。然后我想设置 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);

【讨论】:

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

以上是关于设置相对于 AVAudioPlayer 的 iOS MPMusicPlayerController 音量的主要内容,如果未能解决你的问题,请参考以下文章

ios删除avaudioplayer循环延迟

iOS mp3 (AVaudioPlayer) 的比特率值

ios开发之--AVAudioPlayer制作了一款播放器,耳机有声音,扬声器没声音

iOS AVAudioPlayer播放音频时声音太小

iOS - AVAudioPlayer 在后台不会继续播放下一首歌曲

找出 iOS 中的实际本地化(相对于当前区域)?