AVAudioPlayer 本地音频设置第二弹:调节指定音频音量

AVAudioPlayer 本地音频设置第二弹:调节指定音频音量

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

开发工具:Xcode(13.0)

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

开发需求:满足用户自己调节指定音频的音量

上篇文章说到了如何同时播放多个音频,本篇将介绍如何满足用户自己去调节想要调节的音频的音量,以及停止播放指定音频、对指定音频静音……

介于要对指定音频进行音量控制操作,所以要对第一弹中的所有音频添加索引,以便获取。
之前的代码:

void DeviceManager::setAudioVolume(const char* audioName,const char* audioName1,float volume){
    AVAudioPlayer* player;
    NSString* name =[[NSString alloc] initWithUTF8String:audioName];        //传递音频文件路径名称
    NSString* name1 =[[NSString alloc] initWithUTF8String:audioName1];      //传递音频文件类型(mp3/m4a……)
    NSString* path = [[NSBundle mainBundle] pathForResource:name ofType:name1]; //音频路径、类型(mp3/m4a……)字符串
    NSURL* urlMusic = [NSURL fileURLWithPath:path];                             //获取路径、类型
    player = [[AVAudioPlayer alloc] initWithContentsOfURL:urlMusic error:nil];  //将获取到的路径、类型给到player
    
    [player prepareToPlay];                                                 //播放准备
    player.numberOfLoops = -1;                                              //播放循环 (>0为设置的循环次数,<0为无限循环)
    player.volume = volume;                                                 //播放音频音量
    //注:对音量的设置代码需要放在play之前
    [player play];                                                          //播放音频(必须添加,负责无法播放)
}

修改后的代码如下:
在函数中添加一个音频索引的参数,同时以数组的形式进行音频记录存储,如此便可给每个音频添加上索引。

//设置音量大小
void DeviceManager::setAudioVolume(const char* audioName,const char* audioName1,float volume,int audiosIndex){
//    AVAudioPlayer* player;
    NSString* name =[[NSString alloc] initWithUTF8String:audioName];        //传递音频文件路径名称
    NSString* name1 =[[NSString alloc] initWithUTF8String:audioName1];      //传递音频文件类型(mp3/m4a……)
    NSString* path = [[NSBundle mainBundle] pathForResource:name ofType:name1]; //音频路径、类型(mp3/m4a……)字符串
    NSURL* urlMusic = [NSURL fileURLWithPath:path];                             //获取路径、类型
    player[audiosIndex] = [[AVAudioPlayer alloc] initWithContentsOfURL:urlMusic error:nil];  //将获取到的路径、类型给到player
    
    [player[audiosIndex] prepareToPlay];                                                 //播放准备
    player[audiosIndex].numberOfLoops = -1;                                              //播放循环 (>0为设置的循环次数,<0为无限循环)
    player[audiosIndex].volume = volume;                                                 //播放音频音量
    //注:对音量的设置代码需要放在play之前
    [player[audiosIndex] play];                                                          //播放音频(必须添加,负责无法播放)
//    [player stop];
}

修改完存储音频的部分之后,就需要用OC代码再写一个控制音频音量的函数,以便在具体场景中调用
代码如下:

//调节音量
void DeviceManager::audioChange(int audiosIndex,float value){
    player[audiosIndex].volume = value/100;
}

函数共包含两个参数,一个是标记音频的索引,另一个是用来传递当前的音量值。静音功能也是调用此部分代码,直接将音频音量调至0即可。

停止播放音频代码:
注:停止播放与静音并不通用,AVAudioPlayer有专门停止播放的参数,直接调用即可

//停止播放音乐
void DeviceManager::stopAudioVolume(int audiosIndex){
    [player[audiosIndex] stop];
}

以上部分有关音频存储、播放、音量控制、停止播放的前期工作基本完成。

下面便是在场景中实现用户的操作,主要为手动控制音量条,同时将音量条的变化值传给对应的音频,以此来同步设置音量。相关代码此处不再演示,需要根据项目的具体需求来实现。

要想实现对指定音频的音量控制,最关键的就是对每个音频添加索引,再通过索引来达到控制指定音频。

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GameTomato

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值