Android中PCM音频样本的上采样

Posted

技术标签:

【中文标题】Android中PCM音频样本的上采样【英文标题】:Upsampling of PCM audio samples in Android 【发布时间】:2012-10-05 06:56:49 【问题描述】:

我正在我的 android 应用程序中从蓝牙耳机读取音频样本。蓝牙 SCO 以 8KHz 的音频输入采样频率工作。但我需要来自蓝牙耳机的 16KHz 音频样本,所以我需要使用上采样。

我在此处和其他网站上搜索了有关 Android 上采样的信息,但没有用。如果有人知道用于上采样的预定义 Java 库,请回答我的问题。

【问题讨论】:

相关:***.com/questions/3260424/… IDK 如果你可以在 android 中使用这个 API,但是 javasound 可以让你这样做,这里有一些很好的示例:jsresources.org/examples/AudioConverter.html 【参考方案1】:

如果您请求 16 kHz,则上采样应该会自动发生,除非您正在测试的设备对音频 HAL/audioflinger 有一些奇怪的实现。

如果您请求输入设备不支持的采样率,将会(应该)发生的情况是,音频 HAL 将向 audioflinger 返回错误代码并建议使用的采样率。反过来,audioflinger 将尝试以支持的采样率打开输入流并在内部进行重新采样,以便应用程序以它请求的速率获取音频数据。

只要请求的采样率不大于支持的采样率的两倍,这应该可以工作,因此 8 -> 16 kHz 上采样应该可以工作。这种上采样的质量是否足够好,您必须自己判断。

【讨论】:

即使我在 AudioRecord 实例创建中使用 16K 或更高的采样频率,我也以 8KHz 的速率获取样本。【参考方案2】:

最简单的方法是复制每个值并将频率加倍。这不会改善音质,但也不会使其变得更糟。这类似于如何将图像放大到更高分辨率。如果不进行过滤,它不会看起来更糟,但也不会更好,只要您使用非小数进行升级。

你能说出这张图片的区别吗?

还有这个?

第二张图片实际上是分辨率的两倍,但看起来一样。

只要您使用非小数缩放声音(或图像),就不会引入缩放伪影。

但是,如果您想平滑上采样的声音,有各种提示:

https://ccrma.stanford.edu/~jos/resample/

http://paulbourke.net/miscellaneous/interpolation/

http://leute.server.de/wilde/resample.html#Upsampling

【讨论】:

我需要最好的上采样,因为我正在使用这些数据进行语音识别。如果我按照你说的那样做,那么认可度会很差。 @YugandharBabu,它会和原来的 8kHz 声音一样好或坏。 paulbourke.net/miscellaneous/interpolation 它绝对不会“像原版一样好或坏”。复制样本将引入混叠伪影。但是,上采样不会添加任何新信息,对于 VR 而言,最好使用原始数据。 样本加倍不会引入任何工件@BjornRoche。这完全类似于将图像从 320x240 放大到 640x480 不会使图像看起来更好或更差。它看起来完全一样。

以上是关于Android中PCM音频样本的上采样的主要内容,如果未能解决你的问题,请参考以下文章

如何降低PCM数据的播放速度?

Asterisk播放mp4(1)——音频和PCM编码

将 pcm/wav 音频从 22khz 下采样到 8khz

视音频数据处理入门:PCM音频采样数据处理

混合 PCM 音频样本

如何从 iOS 中的音频剪辑中检索 PCM 样本数据?