要避免在AudioRecord对象未初始化时调用startRecording()方法,需要确保在调用startRecording()之前,已经成功初始化了AudioRecord对象。以下是一个可能的解决方法,其中audioSource和sampleRateInHz需要进行正确设置。
private AudioRecord audioRecord;
private int bufferSizeInBytes;
private void initAudioRecord() {
int audioSource = MediaRecorder.AudioSource.MIC;
int channelConfig = AudioFormat.CHANNEL_IN_MONO;
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
int sampleRateInHz = 44100;
bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz,
channelConfig, audioFormat);
audioRecord = new AudioRecord(audioSource, sampleRateInHz, channelConfig, audioFormat,
bufferSizeInBytes);
}
private void startRecording() {
if(audioRecord == null) {
initAudioRecord();
}
if(audioRecord.getState() == AudioRecord.STATE_INITIALIZED) {
audioRecord.startRecording();
}
else {
Log.e(TAG, "AudioRecord is not initialized");
}
}