2

我只在摩托罗拉里程碑上遇到这个问题。代码:

// init recorder
recordInstance = new AudioRecord(MediaRecorder.AudioSource.MIC,
    8000, AudioFormat.CHANNEL_CONFIGURATION_MONO,
    AudioFormat.ENCODING_PCM_16BIT, 8000);

recordInstance.startRecording();

//more code here

recordInstance.stop();

我拥有的错误信息(暂时找不到更多信息,因为我自己没有用于调试的里程碑):

Uncaught handler: thread main exiting due to uncaught exception
java.lang.IllegalStateException: stop() called on an uninitialized AudioRecord.
at android.media.AudioRecord.stop(AudioRecord.java:51 6)

显然我不是唯一一个遇到这个问题的人。我发现了一些非常相似的线程(没有解决方案):

http://groups.google.com/group/android-developers/browse_thread/thread/6dd24aeb484b2e40 http://web.archive.org/web/20100824043744/http://androidcommunity.com:80/forums/f2/problem -using-audiorecord-in-motorola-milestone-30935/ http://community.developer.motorola.com/t5/Android-App-Development-for/Problem-using-AudioRecord-on-Milestone-device/mp/3889 http://www.fring.com/forums/showthread.php?t=16194 http://groups.google.com/group/android-developers/browse_thread/thread/63be273ba59c635e/1c4a010fd470d328

4

4 回答 4

1

这应该有效:

recordInstance = new AudioRecord(MediaRecorder.AudioSource.MIC,
16000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, 16000);

只需坚持标准采样率http://en.wikipedia.org/wiki/Sampling_rate#Audio。我想知道为什么 Milestone 不支持使用 8 位编码进行录制。这也给了我一个错误 - “无效的音频格式”。

于 2011-01-04T19:02:55.320 回答
0

首先,正如它所说,尝试在停止处放置一个 try catch 块,正如调试消息所说,录音正在进入非法状态。

可能如果你能捕捉到异常,你就能找出问题所在。

于 2010-05-04T13:53:51.003 回答
0

问题不是参数,问题是摩托罗拉修补Android的错误,如果模式是IN_CALL,AudioRecord将无法正确创建自己,如果它的MODE_NORMAL应该没问题。

这是因为 Motorolas 代码中的某些内容在其 IN_CALL 模式时会占用输入。

于 2011-03-29T12:09:59.130 回答
0

从理论上讲,hcpl 的代码应该可以工作,因为语音采样是 8kHz,但一些 android 设备不接受它。

完成疯狂的答案,来自 Android 开发者网站:

sampleRateInHz int:以赫兹表示的采样率。44100Hz 是目前唯一保证适用于所有设备的速率,但其他速率(例如 22050、16000 和 11025)可能适用于某些设备。AudioFormat.SAMPLE_RATE_UNSPECIFIED 表示使用与路由相关的值,该值通常是源的采样率。getSampleRate() 可用于检索选择的实际采样率。

于 2018-10-11T12:32:24.550 回答