
# 播放音乐文件
#### 功能描述
混音是将音乐文件和麦克风音频混合，一般用于播放时长较长的背景音乐或者伴奏。同一时间只能播放一个音乐文件。可以在本地播放，也可以同时播放给其他与会者听。
可以播放本地或在线音乐文件，文件格式支持播放wav、pcm和单声道mp3音频格式。
 #### 接口调用流程
![](https://support.huaweicloud.com/bestpractice-rtc/zh-cn_image_0000001228295369.png)
#### 实现播放音乐文件
1. **加入房间**
   参考[接口调用流程]中加入房间的时序图步骤加入房间。
   
2. **播放音乐文件**
   调用startAudioFile播放音乐文件，目前仅支持本端播放。
   返回值为0，则说明调用成功，不为0则表示失败。
   ```
   public void startAudio() {
       int ret = mHwRtcEngine.startAudioFile(audioFilePaths[currentFilePos], publish, cycle, replace);
       if (ret == 0) {
           // 成功
       } else {
           // 失败
       }
   }
   ```
   
3. **设置音乐文件音量**
   调用adjustAudioFileVolume调整播放音量。
   其中，progress取值范围为0 \~ 100。
   ```
   public void setAudioVolume() {
       mHwRtcEngine.adjustAudioFileVolume(progress);
   }
   ```
   
4. **获取音乐文件总时长**
   播放过程中，调用getAudioFileDuration获取音乐文件总时长，可用于刷新界面上的进度条。
   ```
   public void refreshSeekBar() {
       int duration = mHwRtcEngine.getAudioFileDuration();
   // 刷新进度条
   }
   ```
   
5. **获取音乐文件播放位置**
   播放过程中，调用getAudioFilePosition获取音乐文件当前播放位置，可用于刷新界面上的进度条。
   ```
   public void refreshSeekBar() {
       int pos = mHwRtcEngine.getAudioFilePosition();
   // 刷新进度条
   }
   ```
   
6. **设置音乐文件播放位置**
   播放过程中，调用setAudioFilePosition设置音乐文件播放位置，可用于跳转至对应播放位置。
   ```
   public void seekTo() {
       mHwRtcEngine.setAudioFilePosition(pos);
   }
   ```
   
7. **暂停播放音乐文件**
   播放过程中，调用pauseAudioFile暂停播放当前音乐文件。
   ```
   public void pauseAudio() {
       mHwRtcEngine.pauseAudioFile();
   }
   ```
   
8. **恢复播放暂停的音乐文件**
   暂停时，调用resumeAudioFile恢复播放当前音乐文件。
   ```
   public void resumeAudio() {
       mHwRtcEngine.resumeAudioFile();
   }
   ```
   
9. **停止播放音乐文件**
   播放过程中，调用stopAudioFile停止播放当前音乐文件。
   ```
   public void stopAudio() {
       mHwRtcEngine.stopAudioFile();
   }
   ```
   
10. **音乐文件播放结束回调**
    播放结束后，SDK会触发onAudioMixStateChangedNotify回调来通知上层应用。
    ```
    @Override
    public void onAudioMixStateChangedNotify(HRTCEnums.HRTCAudioFileState state, HRTCEnums.HRTCAudioFileReason reason, long value) {
        // 判断state，如果是HRTC_AUDIO_FILE_STOPPED，则表示收到音乐文件播放结束通知，可以刷新界面，比如恢复播放前初始界面状态。
    }
    ```
    
 
#### API参考
[startAudioFile](https://support.huaweicloud.com/csdk-rtc/rtc_05_0019.html#section0)
[stopAudioFile](https://support.huaweicloud.com/csdk-rtc/rtc_05_0019.html#section1)
[pauseAudioFile](https://support.huaweicloud.com/csdk-rtc/rtc_05_0019.html#section2)
[resumeAudioFile](https://support.huaweicloud.com/csdk-rtc/rtc_05_0019.html#section3)
[adjustAudioFileVolume](https://support.huaweicloud.com/csdk-rtc/rtc_05_0019.html#section6)
[getAudioFileDuration](https://support.huaweicloud.com/csdk-rtc/rtc_05_0019.html#section12)
[getAudioFilePosition](https://support.huaweicloud.com/csdk-rtc/rtc_05_0019.html#section13)
[setAudioFilePosition](https://support.huaweicloud.com/csdk-rtc/rtc_05_0019.html#section14)
[onAudioMixStateChangedNotify](https://support.huaweicloud.com/csdk-rtc/rtc_05_0025.html#section42)
