我尝试使用下面的audiorecorder方法录制声音,它在HTC nexus一个android 2.3中很好但是当我在LG和Sony上尝试使用andoid 4.0和4.1时它会工作一次并且对于下一次尝试它会在startRecording {抛出异常} {1}}出了什么问题?
java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord.
答案 0 :(得分:0)
不同的设备仅支持AudioRecord
的某些设置。有一个功能可以让您检测特定设备支持的设置。
private static int[] mSampleRates = new int[]{44100, 22050, 11025, 8000};
public AudioRecord findAudioRecord() {
for (int rate : mSampleRates) {
for (short audioFormat : new short[]{AudioFormat.ENCODING_PCM_8BIT, AudioFormat.ENCODING_PCM_16BIT}) {
for (short channelConfig : new short[]{AudioFormat.CHANNEL_IN_MONO, AudioFormat.CHANNEL_IN_STEREO}) {
try {
Log.d(TAG, "Attempting rate " + rate + "Hz, bits: " + audioFormat + ", channel: " + channelConfig);
int bufferSize = AudioRecord.getMinBufferSize(rate, channelConfig, audioFormat);
if (bufferSize != AudioRecord.ERROR_BAD_VALUE) {
// check if we can instantiate and have a success
AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, rate, channelConfig, audioFormat, bufferSize);
if (recorder.getState() == AudioRecord.STATE_INITIALIZED) {
return recorder;
}
}
} catch (Exception e) {
Log.e(TAG, rate + "Exception, keep trying.", e);
}
}
}
}
return null;
}
它会运行可用音频格式设置的所有组合,并返回首先匹配您的设备容量 您可以稍微修改它,甚至可以获得设备支持的所有格式。
答案 1 :(得分:0)
问题是因为没有使用release(),在停止录音机之后它应该被释放,以便你可以使用录音机几次。