如何在 linux/android 平台上设置高于 44.1kHz 的音频采样率?

Posted

技术标签:

【中文标题】如何在 linux/android 平台上设置高于 44.1kHz 的音频采样率?【英文标题】:How to set Audio Sampling rate higher than 44.1kHz on linux/android platform? 【发布时间】:2011-10-24 19:51:35 【问题描述】:

我注意到android.media.AudioRecord 无法工作 使用错误时sampleRateInHz

重现

您还可以轻松重现该问题 在三星 Nexus S 上使用 pcmrecorder(由 Google 提供):

https://market.android.com/details?id=com.kohei.android.pcmrecorder

http://ko-yasui.com/home/pcmrecorder/

所以在硬件音频芯片最高支持 96KHz 的情况下,它无法以 48Khz 录制:

http://www.wolfsonmicro.com/products/audio_hubs/WM8994/

这是设备/固件错误还是已知限制?

注意android平台只保证44100Hz左右(甚至24KHz也不行)

http://developer.android.com/reference/android/media/AudioRecord.html

sampleRateInHz:以赫兹表示的采样率。 44100Hz是目前唯一的速率 保证适用于所有设备,但其他速率(例如 22050、16000 和 11025)可能适用于某些设备。

源代码

您可以在以下位置找到重现这些问题的示例代码:

https://github.com/rzr/rzr-android-test/blob/api-android-media/src/fr/online/rzr/test/

曲目

如何克服这个限制?

可以使用任何其他 API 吗?开放式,阿尔萨,开放式?以及如何?

可以从用户端重新配置 alsa 驱动程序 能够在 44100Hz 以上采样? (.asoundrc)

有没有可能做这样的事情 无需刷新/root/重启设备

否则如何解决这个问题? 使用本机代码有效地进行上采样(插值)?

更多

http://www.anddev.org/multimedia-problems-f28/how-to-set-audio-sampling-rate-higher-than-44-1hz-nexuss-t54722.html

http://en.androidwiki.com/wiki/Nexus_S

【问题讨论】:

【参考方案1】:

nexus 支持的最大采样率为 44.1 kHz,当 Android 平台请求将采样率设置为 48 或更高时,音频硬件会抛出错误。要回答您的问题,采样率的限制取决于您运行程序的特定硬件。我在我的 nexus 上尝试了您的代码并得到了与您相同的结果,但如果我在旧的 mytouch 3g 上尝试它,最大采样率可能是 22.05 kHz。基本上,您需要在初始化音频配置时检查支持的采样率范围。

【讨论】:

感谢您的评论,我感到很孤独……我想我必须深入研究操作系统的源代码并找到这个限制是硬编码的,因为硬件具有更高的功能……关于 mytouch 3 它没有确认规格,是否在某处报告了错误?

以上是关于如何在 linux/android 平台上设置高于 44.1kHz 的音频采样率?的主要内容,如果未能解决你的问题,请参考以下文章

如何使html文件中对格式的设置优先级高于调用的css?

如何在通用 Windows 平台地图控件上设置 LocationRectangle?

在 iphone 上测试 ios 版本高于 xcode sdk 的应用程序

我可以为普通优先级进程设置单个线程的优先级高于 15 吗?

如何在使用“融化”分组的seaborn计数图上获得高于柱的值

在 OSX 上设置 PHPUnit