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];
}
以上部分有关音频存储、播放、音量控制、停止播放的前期工作基本完成。
下面便是在场景中实现用户的操作,主要为手动控制音量条,同时将音量条的变化值传给对应的音频,以此来同步设置音量。相关代码此处不再演示,需要根据项目的具体需求来实现。
要想实现对指定音频的音量控制,最关键的就是对每个音频添加索引,再通过索引来达到控制指定音频。
希望能给大家提供一些帮助!!!