80,493
社区成员
发帖
与我相关
我的任务
分享public class AndroidAudioRecordManager
{
public int frequency =8000;
public int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;
public int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
int recBufSize, playBufSize;
AudioRecord audioRecord;
boolean isRecording = false;
private long filterCtxPtr = 0;
Thread recordThread=null;
private native void putAudioData(long filterCtxPtr, byte[] buffer,
int dataLen);
public void startParametersFromFilter(long filterCtxPtr, int rate,
int channel, int bits)
{
this.filterCtxPtr = filterCtxPtr;
frequency = rate;
recBufSize = AudioRecord.getMinBufferSize(frequency,
channelConfiguration, audioEncoding);
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
frequency, channelConfiguration, audioEncoding,
recBufSize);
isRecording = true;
recordThread=new AudioRecordThread();
recordThread.start();
}
public void stopFromFilter()
{
isRecording = false;
try
{
recordThread.join();
} catch (InterruptedException e)
{
}
}
class AudioRecordThread extends Thread
{
public void run()
{
android.os.Process.setThreadPriority(-19);
try
{
byte[] buffer = new byte[recBufSize];
int rstat=audioRecord.getRecordingState();
int dstat=audioRecord.getState();
if(dstat!=AudioRecord.STATE_INITIALIZED)
{
return;
}
Thread.sleep(1000);
audioRecord.startRecording();
while(isRecording)
{
int bufferReadResult = audioRecord.read(buffer, 0, 320);
putAudioData(filterCtxPtr, buffer, bufferReadResult);
}
audioRecord.stop();
} catch (Throwable t)
{
}
finally
{
audioRecord.release();
audioRecord=null;
}
}
}
};