【问题标题】:AudioRecord doesn't work for Motorola MilestoneAudioRecord 不适用于摩托罗拉里程碑
【发布时间】:2010-05-04 12:26:09
【问题描述】:

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

// 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/m-p/3889 http://www.fring.com/forums/showthread.php?t=16194 http://groups.google.com/group/android-developers/browse_thread/thread/63be273ba59c635e/1c4a010fd470d328

【问题讨论】:

    标签: android android-audiorecord


    【解决方案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 位编码进行录制。这也给了我一个错误 - “无效的音频格式”。

    【讨论】:

      【解决方案2】:

      首先,正如调试消息所说,尝试在 stop 上放置一个 try catch 块,录音正在进入 IllegalState。

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

      【讨论】:

      • 我做了,但无法获得比报告的 java.lang.IllegalStateException 更多的信息,其中包含消息:android startRecording 调用了未初始化的 AudioRecord
      • 您可以使用 getState 函数检查状态,这样您至少可以避免崩溃。此崩溃是因为由于某种原因您的录音未初始化。最好在开始后立即完成,然后抛出适当的错误消息。
      • 感谢您的回答。我知道我必须添加一些尝试捕获,但我想知道是否有人知道哪些设备工作的值?我相信这些是特定于供应商的?
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-17
          • 2013-04-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多