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的主要内容,如果未能解决你的问题,请参考以下文章
AVAudioPlayer 本地音频设置补充篇:后台播放设置
Android番外篇 华为手机APP闪退重启清空Log日志问题解决
Android番外篇 Android Studio Gradle 删除缓存的依赖库