如何播放 PCM-24 音频?

Posted

技术标签:

【中文标题】如何播放 PCM-24 音频?【英文标题】:How to play PCM-24 audio? 【发布时间】:2018-09-28 02:53:29 【问题描述】:

我正在撰写关于电子听诊器的工程论文。使用 I2S 麦克风 (Adafruit SPH0645) 获取音频,其输出由每个样本的 18 位有效数据组成。正因为如此,我决定使用 PCM-24 格式,并且能够通过使用 .NET 库NAudio 来播放和查看图形(心音图)。

该项目的范围必须主要考虑使用 android 的移动设备,这些设备必须通过硬件(服务器)创建的 TCP 套接字连接,通过该 TCP 套接字连续传输 PCM-24 格式的音频。下图将阐明暴露的功能:

我一直在研究 Android 提供 AudioTrack 作为播放 PCM 文件的本机库,但似乎只支持 PCM-8、PCM-16 和 PCM-float,据我了解需要更高的 API等级。

我找不到任何其他可以帮助我完成这项任务的库,但看起来很奇怪,因为 PCM-24 是另一种常用的标准。 有没有办法在 Android 中播放 PCM-24 音频

另一方面,如果没有办法做到这一点,尽管需要处理和填充值,但在减少到 PCM-16 或增加到 PCM-32-FP 时我应该考虑哪些问题?

【问题讨论】:

【参考方案1】:

我认为你的方向是正确的。正如你在这里看到的https://source.android.com/devices/audio/data_formatsAndroid 内部支持多种格式,但只公开了一个子集,可能是为了兼容性;看这里:https://developer.android.com/guide/topics/media/media-formats。

我会按照您的建议转换为 16 位 PCM。与传感器的频率响应和分辨率相比,心跳或脉搏是一个缓慢的过程,因此您将安全且不会丢失任何用于播放声音或显示超声心动图的信息。

在转换为 16 位时要小心,确保您的 PCM24 没有使用任何奇怪的单词定位,因为有时会出现这种情况。除此之外,右移样本就足够了。

要对数据进行任何进一步处理,例如检测心律失常或类似情况,请使用您的原始 24 位样本。祝你好运!

【讨论】:

非常感谢您的回答。是的,看来我需要将所有内容都翻译成 PCM-16,而你对心跳的行为是正确的。我去做!再次感谢!

以上是关于如何播放 PCM-24 音频?的主要内容,如果未能解决你的问题,请参考以下文章

从 url 下载时如何播放音频?

如何同时播放多个音频文件

unity中如何播放音频的指定区间?

从远程 url 播放音频文件时如何生成音频频谱?

在IOS核心音频中,如何找到文件播放器音频单元的真实当前播放头位置?

如果我们需要播放另一个音频,如何停止音频