我正在开发一款Android应用。在我的应用程序中,我需要使用AudioRecord类录制音频。现在我正在创建一个简单的应用程序来测试AudioRecord类,因为我之前从未使用过它。我的简单应用程序是用户点击"记录"按钮开始记录。单击"停止",停止录制。然后"玩"按钮播放录制的音频。但是当我点击"记录"我的应用程序给我错误按钮。
这是我的活动
$scope.print = printFn;
function printFn() { $window.print(); }
单击“录制”按钮时出现错误。
这是Logcat中的错误:
错误是什么?如何正确使用AudioRecord?
答案 0 :(得分:0)
最后我解决了这个问题。我只需要运行新线程进行录制。
private void startRecord(){
File file = new File(Environment.getExternalStorageDirectory(), "test.pcm");
try {
file.createNewFile();
OutputStream outputStream = new FileOutputStream(file);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
dataOutputStream = new DataOutputStream(bufferedOutputStream);
final int minBufferSize = AudioRecord.getMinBufferSize(11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
audioData = new short[minBufferSize];
final AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
minBufferSize);
audioRecord.startRecording();
Toast.makeText(getBaseContext(),"Recording",Toast.LENGTH_SHORT).show();
recordingThread = new Thread(new Runnable() {
public void run() {
while(recording){
int numberOfShort = audioRecord.read(audioData, 0, minBufferSize);
for(int i = 0; i < numberOfShort; i++){
try{
dataOutputStream.writeShort(audioData[i]);
}
catch (IOException e)
{
Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_SHORT).show();
}
}
}
}
}, "AudioRecorder Thread");
audioRecord.stop();
dataOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}