
# 播放音效文件
#### 功能描述
用户可以同时播放多个音效文件，给自己和其他与会者听，用于烘托气氛。
支持本地或在线文件路径，文件格式支持播放wav、pcm和单声道mp3音频格式。
 #### 接口调用流程
![](https://support.huaweicloud.com/bestpractice-rtc/zh-cn_image_0000001182459412.png)
#### 实现播放音效文件
1. **加入房间**
   参考[接口调用流程]中加入房间的时序图步骤加入房间。
   
2. **播放音效文件**
   调用playAudioClip播放音效文件并启动混音。
   可以同时播放多个音效文件，不同音效文件用不同的soundId参数进行区别。
   ```
   public void playClip() {
       int soundId = 0; // 音效文件Id
       mHwRtcEngine.playAudioClip(soundId, filePath, loop, 0, 0, 100, publish, 0);
   }
   ```
   
3. **设置音效文件音量**
   调用setVolumeOfAudioClip设置音效播放的音量。
   其中，progress取值范围为0 \~ 100。
   ```
   public void setClipVolume() {
       mHwRtcEngine.setVolumeOfAudioClip(soundId, progress);
   }
   ```
   
4. **获取音效文件总时长**
   播放过程中，调用getAudioClipDuration获取音效文件总时长，可用于刷新界面上的进度条。
   ```
   public void refreshSeekBar() {
       int duration = mHwRtcEngine.getAudioClipDuration(filePath);
       // 刷新进度条
   }
   ```
   
5. **获取音效文件播放位置**
   播放过程中，调用getAudioClipCurrentPosition获取音效文件当前播放位置，可用于刷新界面上的进度条。
   ```
   public void refreshSeekBar() {
       int pos = mHwRtcEngine.getAudioClipCurrentPosition(soundId);
       // 刷新进度条
   }
   ```
   
6. **设置音效文件播放位置**
   播放过程中，调用setAudioClipPosition设置音效文件播放位置，可用于跳转至对应播放位置。
   ```
   public void seekTo() {
       mHwRtcEngine.setAudioClipPosition(soundId, effectPosition);
   }
   ```
   
7. **暂停播放音效文件**
   播放过程中，调用pauseAudioClip暂停播放指定的音效文件，调用pauseAllAudioClips暂停所有的音效文件。
   ```
   public void pauseClip() {
       mHwRtcEngine.pauseAudioClip(soundId);
   }
   public void pauseAllClip() {
       mHwRtcEngine.pauseAllAudioClips();
   }
   ```
   
8. **恢复播放暂停的音效文件**
   暂停时，调用resumeAudioClip恢复播放指定的音效文件，调用resumeAllAudioClips恢复所有的音效文件。
   ```
   public void resumeClip() {
       mHwRtcEngine.resumeAudioClip(soundId);
   }
   public void resumeAllClip() {
       mHwRtcEngine.resumeAllAudioClips();
   }
   ```
   
9. **停止播放音效文件**
   播放过程中，调用stopAudioClip停止播放指定的音效文件，调用stopAllAudioClips停止所有的音效文件。
   ```
   public void stopClip() {
       mHwRtcEngine.stopAudioClip(soundId);
   }
   public void stopAllClip() {
       mHwRtcEngine.stopAllAudioClips();
   }
   ```
   
10. **音效文件播放结束回调**
    在音效播放结束后，会收到onAudioClipFinished回调
    ```
    @Override
    public void onAudioClipFinished(int soundId) {
        // 音效播放结束
    }
    ```
    
 
#### API参考
[playAudioClip](https://support.huaweicloud.com/csdk-rtc/rtc_05_0019.html#section15)
[stopAudioClip](https://support.huaweicloud.com/csdk-rtc/rtc_05_0019.html#section16)
[pauseAudioClip](https://support.huaweicloud.com/csdk-rtc/rtc_05_0019.html#section17)
[resumeAudioClip](https://support.huaweicloud.com/csdk-rtc/rtc_05_0019.html#section18)
[stopAllAudioClips](https://support.huaweicloud.com/csdk-rtc/rtc_05_0019.html#section19)
[pauseAllAudioClips](https://support.huaweicloud.com/csdk-rtc/rtc_05_0019.html#section20)
[resumeAllAudioClips](https://support.huaweicloud.com/csdk-rtc/rtc_05_0019.html#section21)
[setVolumeOfAudioClip](https://support.huaweicloud.com/csdk-rtc/rtc_05_0019.html#section24)
[setAudioClipPosition](https://support.huaweicloud.com/csdk-rtc/rtc_05_0019.html#section26)
[getAudioClipCurrentPosition](https://support.huaweicloud.com/csdk-rtc/rtc_05_0019.html#section27)
[getAudioClipDuration](https://support.huaweicloud.com/csdk-rtc/rtc_05_0019.html#section28)
