Android音频记录器初始化失败
我试着用如下的录音方法录制声音,这在HTC nexus one android 2.3中很好,但当我在LG和索尼的andoid 4.0和4.1上尝试时,它工作了一次,下一次尝试时,它在startRecordingAndroid音频记录器初始化失败,android,Android,我试着用如下的录音方法录制声音,这在HTC nexus one android 2.3中很好,但当我在LG和索尼的andoid 4.0和4.1上尝试时,它工作了一次,下一次尝试时,它在startRecordingjava.lang.IllegalStateException:startRecording()中抛出异常调用未初始化的录音。怎么了 final int RECORDER_BPP = 16; int RECORDER_SAMPLERATE = 16000; int REC
java.lang.IllegalStateException:startRecording()中抛出异常调用未初始化的录音。
怎么了
final int RECORDER_BPP = 16;
int RECORDER_SAMPLERATE = 16000;
int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO;
int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT;
int bufferSizeInBytes = AudioRecord
.getMinBufferSize(RECORDER_SAMPLERATE, RECORDER_CHANNELS,
RECORDER_AUDIO_ENCODING);
// Initialize Audio Recorder.
AudioRecord audioRecorder = new AudioRecord(
MediaRecorder.AudioSource.MIC, RECORDER_SAMPLERATE,
RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING, bufferSizeInBytes);
audioRecorder.startRecording();
不同的设备只支持
录音的某些设置。有一个功能可以让您检测特定设备支持哪些设置
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;
}
它运行所有可用音频格式设置组合,并返回第一个与您的设备名称匹配的设置。
您可以稍微修改它,甚至可以获得设备支持的所有格式。问题是因为没有使用release(),停止记录器后,它应该释放,以便您可以使用记录器多次。添加一些错误检查getMinBufferSize()
可以返回ERROR
或ERROR\u BAD\u值
,并且AudioRecord()
可以引发异常。@ehsan mozafari原因可能在于如何释放录音机。或者使用相同的设置(只是猜测)初始化一个音频记录,或者类似的方式。在初始化本机音频记录对象时仍然存在相同的问题错误代码-20
怎么办?您发布的代码没有显示任何问题。所有其他问题都在代码的其他部分中。