AVAudioPlayer 本地音频设置番外篇:后台定时修改音频音量NSTimer

AVAudioPlayer 本地音频设置番外篇:后台定时修改音频音量NSTimer

设备/引擎:Mac(11.6)/cocos

开发工具:Xcode(13.0)

开发语言:Objective-c/c++

开发需求:满足后台定时修改音频音量

本篇其实是想说明一下NSTimer的相关问题,同时涉及到音频的设置问题,所以就算是AVAudioPlayer的番外篇吧!

需求很明确,就是希望在特定时间音频音量逐渐削弱,再在另一特定时间音频逐渐停止播放!其实一开始是想在程序中用c++来写,基于之前黑屏状态下程序挂起的问题,所以就pass了这个想法,转而用OC代码来进行定时设定!

项目中的代码如下:
1.在.h文件中声明一下

NSTimer *timerReduce;

2.在.mm文件中实现

if (!timerReduce) {
        //    [timer setFireDate:[NSDate distantPast]];
            timerReduce = [NSTimer timerWithTimeInterval:SleepManager::sharedManager()->audioTime*0.66 target:self selector:@selector(volumeSub) userInfo:nil repeats:NO];
            [[NSRunLoop mainRunLoop] addTimer:timerReduce forMode:NSDefaultRunLoopMode];
        //    SleepManager::sharedManager()->audioPlayed[audiosIndex]=1;
    }

看过之前文章的应该知道之前我的代码主要以c++为主,再调用OC代码,完成功能需求。但此次准备使用NSTimer,其中需要调用的方法必须用OC代码,所以就索性将之前AVAudioPlayer相关的代码改为纯OC代码。

新增一个volumeSub方法,主要是用来声音在固定时间音量逐渐减弱。代码如下:

-(void)volumeSub{
    //设置音量
    CCLOG("---%d---",GameManager::sharedManager()->audioCounts);
    if (SleepManager::sharedManager()->whichScene==0) {
        for (int i=0; i<4; i++) {
            [player[i] setVolume:player[i].volume*0.8 fadeDuration:2.0];
        }
    }else if(SleepManager::sharedManager()->whichScene==1){
        [player[4] setVolume:player[4].volume*0.7 fadeDuration:2.0];
    }else if(SleepManager::sharedManager()->whichScene==2){
        for (int i=0; i<3; i++) {
            [player[i+5] setVolume:player[i+5].volume*0.7 fadeDuration:2.0];
        }
    }
}

其余部分跟之前C++的大同小异,只是改成了OC代码,所以就不再展示相关代码,若有需要可以翻看之前的笔记查看,也可私信咨询。
本次项目中因为涉计到后台播放,调控音量等等,所以未直接使用cocos代码实现。

希望给大家提供一些帮助!!!

你可能感兴趣的:(cocos2d,xcode,游戏引擎,objective-c)