Skip to content

v3.x_Audio_Mixer

xiaoxiaochupei edited this page May 25, 2017 · 1 revision

混音

混音功能,主要是针对主播端插上耳机后,背景音乐等无法通过麦克风返采,进而播放端无法听到的问题。

SDK提供混音功能,当前提供以下几种声原混合:

  • Mic录制声音
  • 播放中的背景音乐
  • 画中画声音

开启和关闭混音功能:setEnableAudioMix(boolean)

背景音乐

v3.x 背景音乐设置说明

v3.x 中com.ksy.recordlib.service.util.audio.KSYBgmPlayer类实现了背景音乐的播放功能, 结合KSYStreamer可以实现背景音乐的播放控制:

  • 创建Bgm播放器:

    mKsyBgmPlayer = KSYBgmPlayer.getInstance();
  • 创建播放器回调,监听播放错误及播放完成事件

    private KSYBgmPlayer.OnBgmPlayerListener mBgmListener = new KSYBgmPlayer.OnBgmPlayerListener() {
        @Override
        public void onCompleted() {
            Log.d(TAG, "End of the currently playing music");
        }
    
        @Override
        public void onError(int err) {
            Log.e(TAG, "onMusicError: " + err);
        }
    };
    • onCompleted回调仅在开启bgm播放时loop参数设为false的情况下会被触发
    • onError回调中的错误号包含:
      • KSYBgmPlayer.BGM_ERROR_NONE
      • KSYBgmPlayer.BGM_ERROR_UNKNOWN
      • KSYBgmPlayer.BGM_ERROR_NOT_SUPPORTED
      • KSYBgmPlayer.BGM_ERROR_IO
      • KSYBgmPlayer.BGM_ERROR_MALFORMED
  • 播放控制

    /**
     * 设置播放音量,该音量同时影响推流端的播放音量以及混音音量
     * volume: 为0-1范围内的float值
     */
    public void setVolume(float volume);
    // 设置静音状态,为true时仅推流端播放静音,混音不受影响
    public void setMute(boolean mute);
    // 获取当前播放进度,单位为毫秒
    public long getPosition();
    // 获取当前歌曲的总时长,单位为毫秒
    public long getDuration();
    // 暂停播放
    public void pause();
    // 恢复播放
    public void resume();

结合KSYStreamer实现BGM的播放

  • 开启BGM播放及混音:

    // 设置BGM播放器
    mStreamer.setBgmPlayer(KSYBgmPlayer player);
    /**
     * 开始BGM的播放及混音
     * path: 本地音乐文件路径,支持mp3, aac等
     * loop: 是否单曲循环
     */
    mStreamer.startMixMusic(String path, boolean loop);
    // isPlugged为true时内部进行软件混音,为false不会对背景音乐进行混音
    mStreamer.setHeadsetPlugged(boolean isPlugged);
  • 停止BGM播放及混音

    mStreamer.stopMixMusic();

调用示例:

mKsyBgmPlayer = KSYBgmPlayer.getInstance();
mKsyBgmPlayer.setOnBgmPlayerListener(mBgmListener);
mKsyBgmPlayer.setVolume(bgmVolume);
mStreamer.setBgmPlayer(mKsyBgmPlayer);
mStreamer.startMixMusic("/sdcard/test.mp3", true);
mStreamer.setHeadsetPlugged(true);
Clone this wiki locally