Android - 录音 - 采样率
Posted
技术标签:
【中文标题】Android - 录音 - 采样率【英文标题】:Android - Audio Record - Sample rates 【发布时间】:2014-02-20 15:48:19 【问题描述】:我为 android 开发了一个游戏,它使用 Audio Record 来获取麦克风输入。
你可以看一眼https://play.google.com/store/apps/details?id=fixappmedia.micro
问题是我正在使用以下函数来获取手机上可用的采样率:
public int getValidSampleRates()
int r=8000;
for (int rate : new int[] 8000,11025,16000,22050,44100) // add the rates you wish to check against
int bufferSize = AudioRecord.getMinBufferSize(rate, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
if (bufferSize > 0)
r= rate;
return r;
我最初在我的手机 (Samsung Galaxy Vibrant) 上对其进行了测试,效果很好……但今天我在三星 Galaxy Ace 上对其进行了测试,但采样率不起作用……
有什么想法吗?
【问题讨论】:
当我调用 recorder = new AudioRecord (MediaRecorder.Audiosource.MIC,rate,AudioFormat.CHANNEL_CONFIGURATION_MONO,AudioFormat.ENCODING_PCM_16BIT,bufferSize);使用前一个函数给出的速率,它会抛出一个错误......我这里没有确切的错误......但问题是它没有记录任何东西...... @progjose 您应该查看 Logcat 以获取有关您的错误的更多信息。重要的是要知道记录器实例是否为“null”(这意味着您正在使用不受支持的采样率或通道)或者记录器实例是否在内部未初始化(并且您的代码应该在调用 startRecording() 时抛出 IllegalStateException ..) .一旦你知道导致你的应用程序崩溃的异常,你就会有不同的解决方案。采用。 【参考方案1】:我是录音应用(Hi-Q MP3 Voice Recorder)的开发者,我发现所有手机都支持 44100 Hz、48000 Hz 或两者。
查看您的代码,您错过了 48000。
【讨论】:
谢谢,我会试试那个采样率。我希望它能解决它。干杯! 嗨@yuku。我试图让 AudioRecord 在 Nexus 5 上工作,但我遇到了一个问题:AudioRecord 被实例化,但它处于错误的内部状态,实际上当我在其上调用 startRecording() 时抛出了 IllegalStateException。有什么建议吗?【参考方案2】:来自文档http://developer.android.com/reference/android/media/AudioRecord.html
以赫兹表示的采样率。 44100Hz 是目前唯一保证适用于所有设备的频率,但其他频率(例如 22050、16000 和 11025)可能适用于某些设备。
还注意到您正在使用 AudioFormat.CHANNEL_CONFIGURATION_MONO 根据文档 http://developer.android.com/reference/android/media/AudioFormat.html 已弃用
此常量在 API 级别 5 中已弃用。请改用 CHANNEL_OUT_MONO 或 CHANNEL_IN_MONO
祝你好运
【讨论】:
以上是关于Android - 录音 - 采样率的主要内容,如果未能解决你的问题,请参考以下文章