iOS 在应用程序内存不足警告上淡出音频

Posted

技术标签:

【中文标题】iOS 在应用程序内存不足警告上淡出音频【英文标题】:iOS fade audio on app low memory warning 【发布时间】:2012-08-06 17:35:30 【问题描述】:

我正在寻找一种方法来利用 didReceiveMemoryWarning 在终止音频播放器之前淡出我的应用程序中播放的音乐。我想在不影响系统音量的情况下淡出音乐并从内存中删除播放器(或者至少在完成后重置系统音量。)我只需要支持 ios 5+。

我在这里问这个问题的原因是:

    我无法访问实际播放音乐的代码,它位于第 3 方框架中(所以我认为我唯一的解决方案是重新调整系统音量。) 到目前为止,我发现的所有解决方案都非常陈旧、老套,并且/或者带有关于不被 App Store 接受的警告等。

是否有一种可接受的方式来淡化 iPhone 的音频?

【问题讨论】:

【参考方案1】:

如果您最终找到了至少可以访问播放器的方法,这里有几种方法可以做到。

while-loop中运行

-(void)fadeOut

    while (data.volume > 0) 
        data.volume = data.volume - 0.1;
    
    [data stop];
    data = nil;

或者,使用计时器:

- (void)fadeOutWithTimer

    if (data.volume > 0.1) 
        data.volume = data.volume - 0.1;
        [self performSelector:@selector(fadeOutWithTimer) withObject:nil afterDelay:0.05];
     else 
        [data stop];
        data = nil;
    

【讨论】:

【参考方案2】:

在允许的 API 范围内,只有用户可以控制系统音量。您的应用无法对其进行调整。正如您所提到的,在应用商店中将不允许访问这些其他 API,并且可能需要越狱设备。

您使用的是哪个 3rd 方框架?你能检查一下它内部是否使用了标准的音频播放器,比如AVAudioPlayer?如果是这样,您也许可以通过这种方式对其进行修改。

更新:正如 Randy 在下面指出的那样,您实际上可以通过控制 iPod 的音量来做到这一点:

[[MPMusicPlayerController iPodMusicPlayer] setVolume:0.05];

【讨论】:

这确实改变了我的 iPad (iOS 5) 和 iPhone (iOS 6) 上的 系统音量[MPMusicPlayerController setVolume: 0.4]; 我正在使用rdio ios sdk,它不需要AVAudioPlayer 所需的AVFoundation.framework,但它确实需要AudioToolbox.framework,我认为Core 需要它音频。 @RandyMarsh 根据文档,这只会设置“音乐播放器的音频播放音量”。 @RandyMarsh 令人惊讶的是,它实际上会影响 MPVolumeView 滑块中显示的音量和我的应用程序的输出。这是我刚刚尝试过的:[[MPMusicPlayerController iPodMusicPlayer] setVolume:0.05]; 现在我只需要构建代码来淡化它:) @Aaron 但是如果你改变“iPod”音乐播放器的音量,你实际上改变了系统音量。

以上是关于iOS 在应用程序内存不足警告上淡出音频的主要内容,如果未能解决你的问题,请参考以下文章

应用程序在 iPad 2 上运行良好,在 iPad 3 上崩溃,内存不足警告

新 iPad:内存不足警告未出现?

为啥我的视图在内存不足警告时消失了?

iOS 应用程序以 350MB 大小发出低内存警告

为啥在屏幕上绘制图像之前不会出现内存不足的问题?

Instruments 指出内存不足警告,但内存使用率非常低