MPMusicPlayerController 音量衰减

Posted

技术标签:

【中文标题】MPMusicPlayerController 音量衰减【英文标题】:MPMusicPlayerController Volume Fade 【发布时间】:2012-05-12 23:23:47 【问题描述】:

我有:

 MPMusicPlayerController *musicPlayer = [MPMusicPlayerController iPodMusicPlayer];

在使用该应用程序时,我需要降低音乐以发出警报,当它消失时,我想将其调高到之前的音量。这里的 musicVolume 是一个双精度数,用于存储衰减前的音量:

musicVolume = musicPlayer.volume;
if (musicPlayer.playbackState == MPMusicPlaybackStatePlaying)
    [self fadeMusicOut];

这可以很好地淡出音乐。

将其淡入:

    - (void) fadeMusicIn
    
            [musicPlayer play];
            musicPlayer.volume += 0.05;
            if (musicPlayer.volume < musicVolume)
                [self performSelector: @selector(fadeMusicIn) 
                           withObject: nil 
                           afterDelay: 0.1 ];
            else 
            

            
    

这可以很好地淡入音乐,但是,它总是使音量低于之前设置的音量。

如何才能恢复到原始音量? 提前致谢。

【问题讨论】:

【参考方案1】:

你说的是if (musicPlayer.volume &lt; musicVolume),一旦musicPlayer.volume 等于或大于musicVolume,这基本上是停止调用performSelector: withObject: afterDelay: 方法或该if 语句中调用的任何方法。但你希望它是平等的。所以试试:

- (void) fadeMusicIn

    ...
        if (musicPlayer.volume == musicVolume)
            [self performSelector: @selector(fadeMusicIn) 
                       withObject: nil 
                       afterDelay: 0.1 ];
    ...

这样,如果musicPlayer.volume 小于或等于,if 语句就会停止,所以一旦相等,它就会停止

更新,试试 ==

【讨论】:

感谢您的回复。我确实尝试过这个,这使得差异小了一点。但是,问题仍然存在。假设您从第 0.8 卷开始。您将其淡入到 0.0 并淡入到 0.8。在这一点上,我从 musicPlayer.Volume 和 musicVolume 中得到了一个 NSLog,它们的读法相同。但是,耳机发出的实际音乐音量要小得多。

以上是关于MPMusicPlayerController 音量衰减的主要内容,如果未能解决你的问题,请参考以下文章

带有 MPMusicPlayerController 的 AVAudioPlayer

在后台检测 MPMusicPlayerController 通知

iPhone - MPMusicPlayerController - 从队列中选择音频并播放

MPMusicPlayerController 可以从本地资源播放音乐吗?

AudioUnits 和 MPMusicPlayerController

使用 MPMusicPlayerController 时无法修改 MPRemoteCommandCenter 操作