package com.laifeng.sopcastsdk.controller.audio;
import android.annotation.TargetApi;
import android.media.AudioRecord;
import com.laifeng.sopcastsdk.audio.OnAudioEncodeListener;
import com.laifeng.sopcastsdk.configuration.AudioConfiguration;
import com.laifeng.sopcastsdk.constant.SopCastConstant;
import com.laifeng.sopcastsdk.audio.AudioProcessor;
import com.laifeng.sopcastsdk.audio.AudioUtils;
import com.laifeng.sopcastsdk.controller.audio.IAudioController;
import com.laifeng.sopcastsdk.utils.SopCastLog;
/**
* @Title: NormalAudioController
* @Package com.laifeng.sopcastsdk.controller.audio
* @Description:
* @Author Jim
* @Date 16/9/14
* @Time 下午12:53
* @Version
*/
public class NormalAudioController implements IAudioController {
private OnAudioEncodeListener mListener;
private AudioRecord mAudioRecord;
private AudioProcessor mAudioProcessor;
private boolean mMute;
private AudioConfiguration mAudioConfiguration;
public NormalAudioController() {
mAudioConfiguration = AudioConfiguration.createDefault();
}
public void setAudioConfiguration(AudioConfiguration audioConfiguration) {
mAudioConfiguration = audioConfiguration;
}
public void setAudioEncodeListener(OnAudioEncodeListener listener) {
mListener = listener;
}
public void start() {
SopCastLog.d(SopCastConstant.TAG, "Audio Recording start");
mAudioRecord = AudioUtils.getAudioRecord(mAudioConfiguration);
try {
mAudioRecord.startRecording();
} catch (Exception e) {
e.printStackTrace();
}
mAudioProcessor = new AudioProcessor(mAudioRecord, mAudioConfiguration);
mAudioProcessor.setAudioHEncodeListener(mListener);
mAudioProcessor.start();
mAudioProcessor.setMute(mMute);
}
public void stop() {
SopCastLog.d(SopCastConstant.TAG, "Audio Recording stop");
if(mAudioProcessor != null) {
mAudioProcessor.stopEncode();
}
if(mAudioRecord != null) {
try {
mAudioRecord.stop();
mAudioRecord.release();
mAudioRecord = null;
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void pause() {
SopCastLog.d(SopCastConstant.TAG, "Audio Recording pause");
if(mAudioRecord != null) {
mAudioRecord.stop();
}
if (mAudioProcessor != null) {
mAudioProcessor.pauseEncode(true);
}
}
public void resume() {
SopCastLog.d(SopCastConstant.TAG, "Audio Recording resume");
if(mAudioRecord != null) {
mAudioRecord.startRecording();
}
if (mAudioProcessor != null) {
mAudioProcessor.pauseEncode(false);
}
}
public void mute(boolean mute) {
SopCastLog.d(SopCastConstant.TAG, "Audio Recording mute: " + mute);
mMute = mute;
if(mAudioProcessor != null) {
mAudioProcessor.setMute(mMute);
}
}
@Override
@TargetApi(16)
public int getSessionId() {
if(mAudioRecord != null) {
return mAudioRecord.getAudioSessionId();
} else {
return -1;
}
}
}