我在尝试初始化和AudioRecord对象时遇到此错误,试图使用Eclipse使用模拟器录制声音。
我尝试过各种比特采样率,8000是唯一有效的,但错误仍然存在。我试过各种版本的sdk,1.5,1.6,2,2.2和2.3.1。 (以及与AVD的组合)。
以下是代码:
Log.v(TAG, "About to initialize recording");
//int[] samplingRates = {44100, 22050, 16000, 11025, 8000};
int[] samplingRates = {8000};
for (int i = 0; i < samplingRates.length; ++i)
{
try
{
Log.d(TAG,"Trying sampling rate: " + samplingRates[i]);
int min = AudioRecord.getMinBufferSize(samplingRates[i],
AudioFormat.CHANNEL_CONFIGURATION_MONO,
//AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT);
Log.d(TAG,"MinBufferSize: " + min);
AudioRecord record = new AudioRecord(MediaRecorder.AudioSource.MIC, samplingRates[i],
AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, min);
if (record.getState() == AudioRecord.STATE_INITIALIZED)
{
Log.d("Recorder", "Audio recorder initialised at " + record.getSampleRate());
return record;
}
record.release();
record = null;
}
catch (IllegalArgumentException e)
{
// Try the next one.
Log.d(TAG,"Initialization failed");
}
}
// None worked.
return null;
实例化时发生错误,AudioRecord record = new等。
有没有人看到同样的问题,它似乎是一个直接的请求,所以我很惊讶,如果这是一个错误,特别是因为我不能使用不同的版本。
我创建了具有音频记录功能的AVD。还有什么我需要配置的吗?
我在同一个问题上看过其他一些帖子,但没有回复。
提前致谢
克里斯
答案 0 :(得分:2)
你这里的问题可能实际上是双重的。首先,你必须得到适合AudioRecord的所有参数,即,我可以看到你尝试了所有不同的采样率和通道配置,但你尝试了不同的位深度吗?如果你没有把它完全正确,它就行不通。此外,似乎有些Android设备似乎报告了错误的minBufferSize。
但是,我认为您遇到的实际问题是AVD无法录制音频/视频(即使您配置它们也不会抱怨): http://developer.android.com/guide/topics/media/index.html
从第3段开始:
请注意,仿真器没有用于捕获音频或视频的硬件,但实际的移动设备可能提供这些功能,可通过MediaRecorder类访问。
答案 1 :(得分:0)
对于三星设备上的我来说,它只需要改变即可
AudioFormat.CHANNEL_IN_MONO
或
AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
RECORDER_SAMPLERATE, RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING, bufferSize);