package com.laifeng.sopcastsdk.audio;
import android.media.AudioRecord;
import com.laifeng.sopcastsdk.configuration.AudioConfiguration;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.ShortBuffer;
import java.util.Arrays;
/**
* @Title: AudioProcessor
* @Package com.laifeng.sopcastsdk.audio
* @Description:
* @Author Jim
* @Date 16/9/19
* @Time 上午9:56
* @Version
*/
public class AudioProcessor extends Thread {
private volatile boolean mPauseFlag;
private volatile boolean mStopFlag;
private volatile boolean mMute;
private AudioRecord mAudioRecord;
private AudioEncoder mAudioEncoder;
private byte[] mRecordBuffer;
private int mRecordBufferSize;
public AudioProcessor(AudioRecord audioRecord, AudioConfiguration audioConfiguration) {
mRecordBufferSize = AudioUtils.getRecordBufferSize(audioConfiguration);
mRecordBuffer = new byte[mRecordBufferSize];
mAudioRecord = audioRecord;
mAudioEncoder = new AudioEncoder(audioConfiguration);
mAudioEncoder.prepareEncoder();
}
public void setAudioHEncodeListener(OnAudioEncodeListener listener) {
mAudioEncoder.setOnAudioEncodeListener(listener);
}
public void stopEncode() {
mStopFlag = true;
if(mAudioEncoder != null) {
mAudioEncoder.stop();
mAudioEncoder = null;
}
}
public void pauseEncode(boolean pause) {
mPauseFlag = pause;
}
public void setMute(boolean mute) {
mMute = mute;
}
public void run() {
while (!mStopFlag) {
while (mPauseFlag) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
int readLen = mAudioRecord.read(mRecordBuffer, 0, mRecordBufferSize);
if (readLen > 0) {
if (mMute) {
byte clearM = 0;
Arrays.fill(mRecordBuffer, clearM);
}
if(mAudioEncoder != null) {
mAudioEncoder.offerEncoder(mRecordBuffer);
}
}
}
}
}