
# 播放音效
#### 功能描述
用户可以同时播放多个音效文件，给自己和其他与会者听，用于烘托气氛。
支持本地或在线文件路径，文件格式支持播放wav、pcm和单声道mp3音频格式。
 #### 接口调用流程
![](https://support.huaweicloud.com/bestpractice-rtc/zh-cn_image_0000001227253821.png)
#### 实现过程
1. **加入房间**
   参考[接口调用流程]中加入房间的时序图步骤加入房间。
   
2. **播放音效文件**
   调用playAudioClip接口可以播放一个音效文件。可以同时播放多个音效文件，不同音效文件用不同的soundId参数进行区别。
   ```
   int soundId = 0; //音效文件ID
   [rtcEngine playAudioClip:soundId filePath: [[NSBundle mainBundle] pathForResource:@"test.mp3" ofType:@""]
    loop:1 pitch:0.00 pan:0.00 gain:100 publish:1 startPos:0];
   ```
   
3. **设置音效文件音量**
   音效文件播放过程中，可以调用setVolumeOfAudioClip设置音效文件播放音量。
   音量大小，范围为0-100。
   ```
   int soundId = 0; //音效文件ID
   [rtcEngine setVolumeOfAudioClip:soundId volume:50];
   ```
   
4. **获取音效文件总时长**
   播放过程中可以调用getAudioClipDuration获取音效文件总时长，可用于刷新界面的播放进度条。
   ```
   int soundId = 0; //音效文件ID
   int duration = [rtcEngine getAudioClipDuration: [[NSBundle mainBundle] pathForResource:@"test.mp3" ofType:@""]];
   //根据当前总时长刷新界面进度条
   ```
   
5. **获取音效文件播放位置**
   播放过程中可以调用getAudioClipCurrentPosition获取音效文件播放位置，可用于刷新界面的播放进度条。
   ```
   int soundId = 0; //音效文件ID
   int pos = [rtcEngine getAudioClipCurrentPosition:soundId];
   //根据当前播放位置刷新界面进度条
   ```
   
6. **设置音效文件播放位置**
   播放过程中可以调用setAudioClipPosition设置音效文件播放位置，可用于通过拖动进度条改变音效文件的播放位置。
   ```
   int soundId = 0; //音效文件ID
   [rtcEngine setAudioClipPosition:soundId pos:50];
   ```
   
7. **暂停播放音效文件**
   调用pauseAudioClip接口可以暂停播放一个音效文件。调用pauseAllAudioClips暂停播放所有正在播放的音效文件。
   ```
   int soundId = 0; //音效文件ID
   [rtcEngine pauseAudioClip:soundId];
   ```
   
8. **恢复播放暂停的音效文件**
   音频文件暂停播放后，可以调用resumeAudioClip接口可以恢复播放之前暂停的音效文件。或者调用resumeAllAudioClips恢复播放所有暂停的音效文件。
   ```
   int soundId = 0; //音效文件ID
   [rtcEngine resumeAudioClip:soundId];
   ```
   
9. **停止播放音效文件**
   调用stopAudioClip接口停止播放一个音效文件，或者调用stopAllAudioClips接口停止播放所有音效文件。
   ```
   int soundId = 0; //音效文件ID
   [rtcEngine stopAudioClip:soundId];
   ```
   
10. **音效文件播放结束回调**
    音效文件播放结束后，sdk会触发onAudioClipFinished回调通知上层应用。
    ```
    - (void)onAudioClipFinished:(NSInteger)soundId
    {
       //收到音效文件播放结束通知后，可以刷新界面，比如恢复播放前初始界面状态。
    }
    ```
    
 
#### API 参考
[playAudioClip](https://support.huaweicloud.com/csdk-rtc/rtc_05_0060.html#section15)
[setVolumeOfAudioClip](https://support.huaweicloud.com/csdk-rtc/rtc_05_0060.html#section14)
[getAudioClipDuration](https://support.huaweicloud.com/csdk-rtc/rtc_05_0060.html#section24)
[getAudioClipCurrentPosition](https://support.huaweicloud.com/csdk-rtc/rtc_05_0060.html#section22)
[setAudioClipPosition](https://support.huaweicloud.com/csdk-rtc/rtc_05_0060.html#section23)
[pauseAudioClip](https://support.huaweicloud.com/csdk-rtc/rtc_05_0060.html#section18)
[pauseAllAudioClips](https://support.huaweicloud.com/csdk-rtc/rtc_05_0060.html#section19)
[resumeAudioClip](https://support.huaweicloud.com/csdk-rtc/rtc_05_0060.html#section20)
[resumeAllAudioClips](https://support.huaweicloud.com/csdk-rtc/rtc_05_0060.html#section21)
[stopAudioClip](https://support.huaweicloud.com/csdk-rtc/rtc_05_0060.html#section16)
[stopAllAudioClips](https://support.huaweicloud.com/csdk-rtc/rtc_05_0060.html#section17)
[onAudioClipFinished](https://support.huaweicloud.com/csdk-rtc/rtc_05_0065.html#section50)
