混音

本章节介绍混音相关的功能,通过阅读本章节你可以快速了解混音功能的调用方法和流程。混音是指在音视频通话和互动直播过程中,将本地的音频文件与本端采集的声音数据混音后发送出去,同时在本端播放出来的功能。 混音功能可以处理系统原生支持语音播放的音频文件类型,如 aacmp3mp4wav 等。 该功能支持设置文件播放次数发送音量和播放音量,支持通话中开始暂停恢复更新停止文件混音

混音流程

graph TB K(开始)--> A A[初始化混音 initWithFileURL] --> B[开始混音 startAudioMix] B --> C[更新混音任务 updateAudioMix] C --> D{中途结束混音吗} D{中途结束混音吗} -->|YES| F[结束混音 stopAudioMix] D{中途结束混音吗} -->|NO| E[混音完成回调 onAudioMixTaskCompleted] F[结束混音 stopAudioMix]--> G(结束) E[混音完成回调 onAudioMixTaskCompleted]--> G(结束)

实例化混音任务

混音任务的具体设置通过 NIMNetCallAudioFileMixTask 指定。

通过 numberOfLoops 指定该文件循环播放次数,负数表示无限循环,非负数表示总共播放 numberOfLoops + 1 次,可以实时更新,更新后重新计数。

通过 sendVolume 指定混音时的发送语音音量, 接受输入值为 0.0 到 1.0,可以实时更新。

通过 playbackVolume 指定混音时的播放语音音量, 接受输入值为 0.0 到 1.0,可以实时更新。

@interface NIMNetCallAudioFileMixTask : NSObject
/**
 初始化任务

 @param url 语音文件 URL。只能播放系统原生支持语音播放的音频文件类型,如 aac、mp3、mp4 和 wav 等
 @return 任务实例
 */
- (instancetype)initWithFileURL:(NSURL *)url;
@end
参数 类型 说明
url NSURL 语音文件 URL。只能播放系统原生支持语音播放的音频文件类型,如 aac、mp3、mp4 和 wav 等
实例化混音任务
NIMNetCallAudioFileMixTask *task = [[NIMNetCallAudioFileMixTask alloc] initWithFileURL:url];
task.sendVolume = sendVolume;
task.playbackVolume = playbackVolume;

开始文件混音任务

开始文件混音任务

@protocol NIMNetCallManager <NSObject>
/**
 开始混音任务

 @param task 文件混音任务

 @return 结果, 如果成功开始了, 返回 nil

 @discussion 开始新的任务会结束正在进行中的任务
 */
- (nullable NSError *)startAudioMix:(NIMNetCallAudioFileMixTask *)task;
@end
参数 类型 说明
task NIMNetCallAudioFileMixTask 文件混音任务
//创建任务
NIMNetCallAudioFileMixTask *task = [[NIMNetCallAudioFileMixTask alloc] initWithFileURL:url];
task.sendVolume = sendVolume;
task.playbackVolume = playbackVolume;
//开始混音任务
[[NIMAVChatSDK sharedSDK].netCallManager startAudioMix:task];

获取当前进行中的混音任务

获取当前进行中的混音任务

@protocol NIMNetCallManager <NSObject>
/**
 获取当前进行中的混音任务

 @return 混音任务. 如果没有当前任务则返回 nil
 */
- (nullable NIMNetCallAudioFileMixTask *)currentAudioMixTask;
@end
//获取当前进行中的混音任务
NIMNetCallAudioFileMixTask *task = [NIMAVChatSDK sharedSDK].netCallManager.currentAudioMixTask;

更新文件混音任务

更新文件混音任务

@protocol NIMNetCallManager <NSObject>
/**
 更新混音任务

 @param task 文件混音任务

 @return 结果, 如果成功开始了, 返回 nil

 @discussion 可以更新循环播放次数和音量等
 */
- (nullable NSError *)updateAudioMix:(NIMNetCallAudioFileMixTask *)task;
@end
参数 类型 说明
task NIMNetCallAudioFileMixTask 文件混音任务
//获取当前任务
NIMNetCallAudioFileMixTask *task = [NIMAVChatSDK sharedSDK].netCallManager.currentAudioMixTask;
task.sendVolume = sendVolume;
task.playbackVolume = playbackVolume;
//更新混音任务
[[NIMAVChatSDK sharedSDK].netCallManager updateAudioMix:task];

暂停文件混音任务

暂停文件混音任务

@protocol NIMNetCallManager <NSObject>
/**
 暂停混音

 @return 是否成功
 */
- (BOOL)pauseAudioMix;
@end
//暂停混音任务
[[NIMAVChatSDK sharedSDK].netCallManager pauseAudioMix];

恢复文件混音任务

恢复文件混音任务

@protocol NIMNetCallManager <NSObject>
/**
 恢复混音

 @return 是否成功
 */
- (BOOL)resumeAudioMix;
@end
//恢复混音 
[[NIMAVChatSDK sharedSDK].netCallManager resumeAudioMix];

停止文件混音任务

停止文件混音任务

@protocol NIMNetCallManager <NSObject>
/**
 结束混音

 @return 是否成功
 */
- (BOOL)stopAudioMix;
@end
//停止文件混音任务
[[NIMAVChatSDK sharedSDK].netCallManager stopAudioMix];

任务完成通知

任务完成通知

@protocol NIMNetCallManagerDelegate <NSObject>
/**
 当前语音文件混音任务完成回调
 */
- (void)onAudioMixTaskCompleted;
@end
- (void)onAudioMixTaskCompleted
{
    //刷新UI
}