【问题标题】:Cannot access AudioRecorder无法访问录音机
【发布时间】:2010-12-03 04:31:08
【问题描述】:

我正在尝试录制小型录音以从服务中查找声压级,但 Android 不允许我访问硬件。我在 Logcat 中收到以下错误:

错误来自以下代码:

AudioRecord recordInstance = null;

    // We're important...
    android.os.Process
            .setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);

    short bufferSize = 4096;// 2048;


    recordInstance = new AudioRecord(MediaRecorder.AudioSource.MIC, this //line 167
            .getFrequency(), this.getChannelConfiguration(), this
            .getAudioEncoding(), bufferSize); //object not created

    tempBuffer = new short[bufferSize];
    recordInstance.startRecording();

发生的情况是 recordInstance 从未正确创建,因此当它到达最后并调用 recordInstance.startRecording() 时,recordInstance 仍然为空。 Android 在定义处拒绝了我的程序请求。有谁知道那些errno的指示?我在网上找不到清单。

AudioRecord Docs

谢谢

【问题讨论】:

    标签: android audio audiorecord


    【解决方案1】:

    检查三件事:

    1. 您的权限(您需要授予 RECORD_AUDIO 权限)

    2. 您是否运行过一次而不调用recordInstance.release()?如果是这样,您可能已经占用了音频资源,并且在您重新启动手机之前它可能无法正常工作。无论如何,根据我的经验,我发现了这一点。

    3.缓冲区大小。有一个静态方法AudioRecord.getMinBufferSize()

    【讨论】:

    • 这是recordInstance.release()。谢谢
    • 困难的部分是在工作和测试时,有时程序会崩溃,那么如何调用recordInstance.release()呢?事实上,我现在要提出一个新问题。
    • 确保满足所有 3 个条件为我解决了这个问题。不错的一个(+1)。虽然很老套,但通用/未捕获的异常处理程序不能解决问题吗?
    猜你喜欢
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    相关资源
    最近更新 更多