播放音乐
功能描述
混音是将音乐文件和麦克风音频混合,一般用于播放时长较长的背景音乐或者伴奏。同一时间只能播放一个音乐文件。可以在本地播放,也可以同时播放给其他与会者听。
支持播放wav、pcm和单声道mp3音频文件。可以播放本地或在线音乐文件。
实现过程
- 加入房间
参考接口调用流程中加入房间的时序图步骤加入房间。
- 播放音乐文件
调用startAudioFile接口可以播放一个音乐文件。同一时刻只能播放一个音乐文件。
[rtcEngine startAudioFile:[[NSBundle mainBundle] pathForResource:@"test.mp3" ofType:@""] publish:1 cycle:1 replace:0];
- 设置音乐文件音量
音乐文件播放过程中,可以调用adjustAudioFileVolume设置音乐文件播放音量。
[rtcEngine adjustAudioFileVolume:50];
- 获取音乐文件总时长和播放位置
音乐文件打开成功后,sdk会触发一次onAudioMixStateChangedNotify回调,传入state参数为HWRtcAudioFileOpenCompleted,此时可以调用getAudioFileDuration获取音乐文件总时长,可用以刷新界面进度条的总时长。
音乐文件在播放过程中,sdk每秒会触发一次onAudioMixStateChangedNotify回调,其中的state参数为HWRtcAudioFilePositionUpdate,value参数就是当前的音乐文件播放进度,以毫秒为单位,可以在此回调中刷新界面的播放进度条。
播放过程中也可以调用getAudioFileCurrentPosition获取音乐文件当前播放位置,可用于刷新界面的播放进度条。
- (void)onAudioMixStateChangedNotify:(HWRtcAudioFileState)state reason:(HWRtcAudioFileReason)reason value:(NSUInteger)value{ switch (reason) { case HWRtcAudioFileReasonNone: { switch (state) { case HWRtcAudioFileOpenCompleted: { //获取总时长,并刷新进度条 int mixDuration = [self.rtcEngine getAudioFileDuration]; } break; case HWRtcAudioFilePositionUpdate: { //使用value参数值刷新界面的播放进度条 } break; case HWRtcAudioFilePlaying: { //刷新界面 } break; case HWRtcAudioFilePaused: { //刷新界面 } break; case HWRtcAudioFileStopped: { //刷新界面 } break; default: break; } } break; default: { //错误信息提示 } break; } }
- 设置音乐文件播放位置
播放过程中可以调用setAudioFilePosition设置音乐文件播放位置,可用于通过拖动进度条改变音乐文件的播放位置。
[rtcEngine setAudioFilePosition:50];
- 暂停播放音乐文件
调用pauseAudioFile接口可以暂停播放一个音乐文件。
[rtcEngine pauseAudioFile];
- 恢复播放暂停的音乐文件
音乐文件暂停播放后,可以调用resumeAudioFile接口恢复播放。
[rtcEngine resumeAudioFile];
- 停止播放音乐文件
调用stopAudioFile接口可以停止播放音乐文件。
[rtcEngine stopAudioFile];
- 音乐文件播放结束回调
音乐文件播放结束后,sdk会触发onAudioMixStateChangedNotify回调来通知上层应用。
- (void)onAudioMixStateChangedNotify:(HWRtcAudioFileState)state reason:(HWRtcAudioFileReason)reason value:(NSUInteger)value{ //收到音乐文件播放结束的通知,可以刷新界面,比如恢复到播放前初始界面状态 if(state == HWRtcAudioFilePlayCompleted){ } }