文档反馈
文档反馈

混音

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

混音流程

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 NIMNetCallManager <NSObject>
/**
 混音文件总时长

 @return 总时长 单位ms
 */
- (SInt64)fileTotalTime;
@end
//混音文件总时长
[[NIMAVChatSDK sharedSDK].netCallManager fileTotalTime];

混音文件当前播放时间

混音文件当前播放时间

@protocol NIMNetCallManager <NSObject>
/**
 混音文件当前播放时间

 @return 当前播放时间  单位ms
 */
- (SInt64)currentPlayTime;
@end
//混音文件当前播放时间
[[NIMAVChatSDK sharedSDK].netCallManager currentPlayTime];

混音文件seek到传入时间

混音文件seek到传入时间

@protocol NIMNetCallManager <NSObject>
/**
 混音文件seek到传入时间

 @param time 传入时间 单位ms
 */
- (void)seekToTime:(SInt64)time;
@end
参数 类型 说明
time SInt64 传入时间 单位ms
//混音文件seek到传入时间
[[NIMAVChatSDK sharedSDK].netCallManager seekToTime:time];

任务完成通知

任务完成通知

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

开始文件音效任务

开始文件音效任务

@protocol NIMNetCallManager <NSObject>
/**
 播放音效,用于在混音时播放短暂的音效

 @param task 音效任务。

 @return 结果, 如果成功开始了, 返回 nil
 */
- (nullable NSError *)playSoundEffect:(NIMNetCallAudioFileMixTask *)task;
@end
参数 类型 说明
task NIMNetCallAudioFileMixTask 文件音效任务
//创建任务
NIMNetCallAudioFileMixTask *task = [[NIMNetCallAudioFileMixTask alloc] initWithFileURL:url];
task.sendVolume = sendVolume;
task.playbackVolume = playbackVolume;
task.needSend = YES;
//开始混音任务
[[NIMAVChatSDK sharedSDK].netCallManager playSoundEffect:task];

更新文件音效任务

更新文件音效任务

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

 @param task 文件音效任务

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

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

暂停文件音效任务

暂停文件音效任务

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

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

恢复文件音效任务

恢复文件音效任务

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

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

停止文件音效任务

停止文件音效任务

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

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

反馈成功

非常感谢您的反馈,我们会继续努力做得更好。