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

Posted ImCode0222

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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代码实现。

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

以上是关于AVAudioPlayer 本地音频设置番外篇:后台定时修改音频音量NSTimer的主要内容,如果未能解决你的问题,请参考以下文章

番外篇-Flutter初识三问

AVAudioPlayer 本地音频设置补充篇:后台播放设置

Android番外篇 华为手机APP闪退重启清空Log日志问题解决

Android番外篇 Android Studio Gradle 删除缓存的依赖库

Android番外篇 ViewPager.setOffscreenPageLimit()

重学springboot系列番外篇之RestTemplate