AudioRecorder.getMinBufferSize() 返回 -2

Posted

技术标签:

【中文标题】AudioRecorder.getMinBufferSize() 返回 -2【英文标题】:AudioRecorder.getMinBufferSize() returns -2 【发布时间】:2011-10-19 23:22:26 【问题描述】:

当我在 AudioRecorder 类中运行 getMinBufferSize() 方法时,该方法总是返回 -2。即使我更改了采样率、编码方法和通道号。我已经尝试了所有可能的组合,但它仍然返回-2。我知道 RecordAudio 的权限。如果我注释掉 getMinBufferSize 的行,并使 minBuffer 为 4096,录音机将初始化并记录。这仅在我将采样率设置为 8000 并且录音听起来像垃圾时才有效。如果我改变采样率,程序将强制关闭。

编辑:

bufferSize = AudioRecord.getMinBufferSize(8000,AudioFormat.CHANNEL_CONFIGURATION_DEFAULT,ENCODING_PCM_16BIT);

我在模拟器、Droid Eris、Droid 1 和 Droid 2 Global 上运行它

【问题讨论】:

你能贴出你正在使用的代码吗?另外,你正在开发什么手机? 【参考方案1】:

查看AudioRecord.java的代码,这里真的只有3种可能:

您的频道配置无效。 您没有使用 AudioFormat.ENCODING_PCM_16BIT。 (目前不支持 8 位。) 硬件不支持您要求它记录的内容。

来源:http://google.com/codesearch/p?hl=en#uX1GffpyOZk/media/java/android/media/AudioRecord.java

另见:Why does AudioRecord.getMinBufferSize return ERROR_BAD_VALUE (-2)?

【讨论】:

我使用的是 16 位 pcm,通道配置设置为默认值。如果我不使用 getMinBufferSize 并将其设置为 4096,音频仍将使用我使用的其他设置进行录制,因此硬件支持该代码。【参考方案2】:

尝试使用这些参数,因为这些参数是唯一可以保证在所有 Android 设备上工作的参数:

AudioRecord.getMinBufferSize(
 44100,
 AudioFormat.CHANNEL_IN_MONO,
 AudioFormat.ENCODING_PCM_16BIT)

如果 44.1KHz 对您来说太大,我在使用 16000 的采样率时从来没有遇到过问题。另外,请记住,这是最小记录大小。根据您的应用程序,在使用此值初始化录音机之前,最好将其乘以 2 或 3。

如果您仍然遇到问题,请确保您初始化 AudioRecord 对象的音频源是 MediaRecorder.Audiosource.MIC

【讨论】:

以上是关于AudioRecorder.getMinBufferSize() 返回 -2的主要内容,如果未能解决你的问题,请参考以下文章