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的主要内容,如果未能解决你的问题,请参考以下文章