混音
集成混音插件
混音功能包含在 RTCLib SDK 中。如需从网络音源混音,需要额外集成 RongRTCPlayer 插件。在导入 SDK 前,您可以前往 融云官网 SDK 下载页面 确认当前最新版本号。
通过 CocoaPods 管理依赖 (推荐)
-
如果您的项目中没有
Podfile文件,您需要打开终端并进入到项目的根目录,在终端中运行pod init命令,之后系统会自动创建一个默认的Podfile文件,在项目中的Podfile文件中添加如下内容:ruby# 基础混音功能(包含在 RTCLib 中)
pod 'RongCloudRTC', '~> x.y.z'
# 网络音源混音插件 (可选)
pod 'RongCloudRTC/RongRTCPlayer', '~> x.y.z'提示- 网络音源混音插件会自动依赖下载对应版本的 RTCLib 库,一般不需要手动指定。
x.y.z代表 RTCLib 具体的版本号,您可以在融云官网 SDK 下载页面或在终端中通过先执行pod repo update,再执行pod search RongCloudRTC命令在 CocoaPods 仓库查询 RTCLib 最新的版本。
-
打开终端并进入到
Podfile文件所在的目录,在终端中运行以下命令:shellpod install提示如果终端中出现类似
CocoaPods could not find compatible versions for等找不到相关版本的报错,可先在终端中执行pod repo update命令,再执行pod install命令。 -
通过 Xcode 打开项目目录下的
xcworkspace文件加载工程。
手动集成
-
前往 融云官网 SDK 下载页面,下载 RTCLib SDK 和混音插件:
-
导入以下内容:
RongRTCLib.xcframework(基础混音功能)RongRTCPlayer.xcframework(网络音源混音,可选)
-
修改您的项目配置。在
General→Frameworks, Libraries, and Embedded Binaries中,将手动导入的 RTCLib SDK 所有的 Framework 全部改为Embed & Sign。 -
请将工程中 Target > Build Settings > Other Linker Flags 在此项中添加 -ObjC。为避免编译失败,请勿使用 -all_load 和 -force_load。
开始混音
混音功能支持将用户自定义的音频数据与本地麦克风采集的音频数据进行混合。加入房 间并发布默认的音频流后,调用 startMixingWithURL:playback:mixerMode:loopCount: 方法混音指定的音频文件。
接口原型
- (BOOL)startMixingWithURL:(NSURL *)fileURL
playback:(BOOL)isPlay
mixerMode:(RCRTCMixerMode)mode
loopCount:(NSUInteger)count;
参数说明
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
fileURL | NSURL | 是 | 本地文件或者网络资源 URL。注意,参数 fileURL 为网络资源时,在线资源混音需要依赖 RongRTCPlayer 插件。 |
isPlay | BOOL | 是 | 是否在本地播放 |
mode | [RCRTCMixerMode][RCRTCMixerMode] | 是 | 混音方式 |
count | NSUInteger | 是 | 循环混音或者播放次数 |
返回值
混音成功返回 YES,失败返回 NO。
代码示例
#import <RongRTCLib/RongRTCLib.h>
// NSURL *mediaUrl = [NSURL URLWithString:@"https://xxxx.mp3"];
NSString *audioFilePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"mp3"];
NSURL *mediaUrl = [NSURL fileURLWithPath:audioFilePath];
[[RCRTCAudioMixer sharedInstance] startMixingWithURL:mediaUrl
playback:YES
mixerMode:RCRTCMixerModeMixing
loopCount:NSUIntegerMax];
切换左右声道
SDK 从 5.1.13 开始支持切换左右声道。仅支持本地文件混音时切换声道,不支持网络资源文件。
与本地文件混音时,可以调用 setAudioDualMonoMode 单独选择混音的左右声道。如未调用,默认模式为使用立体声混音。
例如调用 setAudioDualMonoMode 设置为左声道混音时,SDK 会拷贝当前音频的左声道数据填充右声道,进而两个声道都是左声道数据,开始混音后用户听到的就是当前左声道混音的声音。
您可以通过左右声道切换实现原唱、伴唱切换,以满足卡拉 OK 场景下的需求。通过声道切换原唱、伴唱要求音源支持,即原唱、伴唱音轨分别位于两个独立声道。
接口原型
- (BOOL)setAudioDualMonoMode:(RCRTCAudioDualMonoMode)mode;
参数说明
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
mode | [RCRTCAudioDualMonoMode][RCRTCAudioDualMonoMode] | 是 | 声道模式:0 立体声混音,1 左声道混音,2 右声道混音 |
返回值
设置成功返回 YES,失败返回 NO。设置即时生效。
代码示例
#import <RongRTCLib/RongRTCLib.h>
RCRTCAudioDualMonoMode mode = RCRTCAudioDualMonoLeft; // RCRTCAudioDualMonoRight
[[RCRTCAudioMixer sharedInstance] setAudioDualMonoMode:mode];
控制混音状态(结束、暂停、恢复)
-
结束混音时需要调用以下方法。
Objective C[[RCRTCAudioMixer sharedInstance] stop]; -
暂停混音
Objective C[[RCRTCAudioMixer sharedInstance] pause]; -
恢复混音
Objective C[[RCRTCAudioMixer sharedInstance] resume]; -
获取当前混音状态
Objective Cif ([RCRTCAudioMixer sharedInstance].status == RTCMixEngineStatusPlaying) {
// 处理正在播放混音的逻辑
}
设置混音播放位置
从 5.2.5.1 开始,SDK 支持通过 setPlayProgress: 先设置播放位置,再调用 startMixingWithURL:playback:mixerMode:loopCount: 开始混音。
您可以在混音开始前后设置播放位置。如果希望从混音文件指定位置开始混音,建议先设置播放位置,再调用开始混音。
接口原型
- (void)setPlayProgress:(float)progress;
参数说明
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
progress | float | 是 | 设置播放进度,取值范围 [0,1] |
代码示例
#import <RongRTCLib/RongRTCLib.h>
// 设置播放位置为 50%
[[RCRTCAudioMixer sharedInstance] setPlayProgress:0.5];
音量控制
SDK 支持控制混音音源输入的音量和混音在本地播放的音量。
调节混音输入音量
设置音频文件混音时的输入音量,取值范围 [0,100],默认值 100。
接口原型
@property (nonatomic, assign) NSUInteger mixingVolume;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
mixingVolume | NSUInteger | 混音输入音量,取值范围 [0,100] |
代码示例
#import <RongRTCLib/RongRTCLib.h>
// 设置音频文件混音输入音量为 50
[RCRTCAudioMixer sharedInstance].mixingVolume = 50;
调节混音本地播放音量
如果设置混音时选择了本地播放,您可以调节音频文件本地播放音量,取值范围 [0,100],默认值 100。
接口原型
@property (nonatomic, assign) NSUInteger playingVolume;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
playingVolume | NSUInteger | 本地播放音量,取值范围 [0,100] |
代码示例
#import <RongRTCLib/RongRTCLib.h>
// 设置音频文件本地播放音量为 50
[RCRTCAudioMixer sharedInstance].playingVolume = 50;
获取音频文件时长
SDK 支持获取本地音频文件时长。网络资源 URL 在播放后才能拿到音频时长。
接口原型
+ (Float64)durationOfAudioFile:(NSURL *)url;
参数说明
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
url | NSURL | 是 | 文件 URL(网络资源 URL 在播放后才能拿到音频时长) |
返回值
返回音频文件时长,单位为秒。
代码示例
#import <RongRTCLib/RongRTCLib.h>
NSString *audioFilePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"mp3"];
NSURL *fileUrl = [NSURL fileURLWithPath:audioFilePath];
Float64 duration = [RCRTCAudioMixer durationOfAudioFile:fileUrl];