我希望重复录制 - - - 等等。当录音的能量达到某个阈值时,录制(以秒为单位)将停止并开始播放。播放后,会开始新的录制。因此,我需要使用缓冲区监视能量,并在计算播放时间后开始新的录制。我的伪代码(最简化形式)如下:
...
public class MainActivity extends Activity {
private Handler myHandler = new Handler();
....
private Runnable timedTask = new Runnable() {
public void run() {
audiorecorder = new AudioRecord(... initializes
audiorecorder.startRecording();
isRecording = true;
ElapsedTime = 0.0;
while(true) {
ReadByte = audiorecorder.read(buffer, 0, buffersize);
// Write ReadByte onto file (temp.pcm)
EnergyBuffer = <some averaged energy over a period (1 sec or so)>
if(EnergyBuffer > Threshold)
break;
ElapsedTime = ...
}
// audiorecorder.release, stop, and null
// play temp.pcm using AudioTrack
myHandler.postDelayed(timedTask, Elapsedtime);
};
}
这是通过以下的开始和停止按钮触发的:
StartButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
myHandler.post(timedTask);
}
});
StopButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
myHandler.removeCallbacks(timedTask);
}
});
问题是在录制或播放音频时,没有任何按钮可以使用,我必须等到录制完成才能操作。我该如何避免录制冻结?这是否只是由于while循环引起的?请帮忙解决..!
如果我按以下方式运行,则不会出现错误。
Thread t = new Thread(timedTask);
t.start();
这只有一次是可以的,但在处理程序延迟时间后,它也会冻结用户界面。