音效

本章节介绍音效相关的功能,通过阅读本章节你可以快速了解音效功能的调用方法和流程。音效是指在音视频通话和互动直播过程中,将本地的音效文件(例如: 鼓掌、笑声...)与本端采集的声音数据混音后发送出去,同时在本端播放出来的功能。 音效功能可以处理系统原生支持语音播放的音频文件类型,如 aacmp3mp4wav 等。单个文件时长不能超过10 s , 最多同时播放5个音效文件。 该功能支持预加载设置文件播放次数发送音量播放音量,支持通话中预加载开始停止

预加载音效

在播放音效之前,一定要预加载音效。加载时指定一个音效id 及文件路径 。音效加载完成之后有回调,参考 下文的 事件回调注意:路径填null 表示卸载音效或者取消加载任务

     /**
     * 预加载或卸载 音效文件(播放音效前的必要操作)
     *
     * @param effectId      音效id ,用户自定义 , 重复加载同一个id ,会先停止播放并卸载。
     * @param audioFilePath 音效文件路径,如果传 null ,表示卸载相应的音效或者取消加载任务 。
     * 在播放过程中卸载会停止播放并触发播放结束的回调。
     * 预加载的结果在{@link AVChatStateObserver#onAudioEffectPreload(int, int) }中回调。
     * 如果需要,用户可以自己记录id 与 file 之间的对应关系。
     */
    public abstract void preloadAudioEffect(int effectId, String audioFilePath);
参数 说明
effectId 音效id , 音效的唯一一标识
audioFilePath 音效文件路径。
AVChatManager.getInstance().preloadAudioEffect(id, file);

播放音效

音效加载成功之后可以播放音效。播放完成后有回调,参考 下文的事件回调

    /**
     * 播放音效
     * @param effectId 音效id , 同预加载时的id
     * @param loopback 音效循环次数 , -1 表示无限循环
     * @param send     是否发送
     * @param volume   播放及发送音量 [0.0f - 1.0f]
     * @return {@code true} : 播放成功,{@code false}: 方法调用失败
     */
    public abstract boolean playAudioEffect(int effectId, int loopback, boolean send, float volume);
参数 说明
effectId 音效id , 音效的唯一标识
loopback 音效的循环次数, -1 无限循环
send 是否发送
volume 播放和发送的音量 [0.0f - 1.0f]

停止播放音效

停止正在播放的音效

     /**
     * 停止播放音效
     *
     * @param effectId 音效id
     * @return {@code true} 方法调用成功,其他失败
     */
    public abstract boolean stopPlayAudioEffect(int effectId);
AVChatManager.getInstance().stopPlayAudioEffect(effectId);

事件回调

预加载音效完成及播放完成都有相应的事件回调,相应的回调在AVChatStateObserver接口中。

   /**
     * 音效预加载结果回调
     *
     * @param effectId 音效id
     * @param result   预加载结果 :
     * @see AVChatAudioEffectEvent#AUDIO_EFFECT_PRELOAD_SUCCESS 加载成功
     * @see AVChatAudioEffectEvent#AUDIO_EFFECT_PRELOAD_COUNT_LIMIT 音效个数超过了最大数量
     * @see AVChatAudioEffectEvent#AUDIO_EFFECT_PRELOAD_TOO_LONG 单个文件时长太长
     * @see AVChatAudioEffectEvent#AUDIO_EFFECT_PRELOAD_FAILED 加载失败(其他原因)
     */
    void onAudioEffectPreload(int effectId, int result);
  /**
     * 音效播放事件回调
     *
     * @param effectId 音效id
     * @param event    事件类型:
     * @see AVChatAudioEffectEvent#AUDIO_EFFECT_PLAY_COMPLETE 播放结束
     */
    void onAudioEffectPlayEvent(int effectId, int event);