您能否推荐一种用于长时间静音的声音的有效编码算法?

信息处理 信号分析 声音的 压缩 动态范围压缩
2022-02-03 01:48:34

作为一个个人项目,我正在编写一个 Android 应用程序,我打算用它来记录我们第一个婴儿的声音。我对 Android 开发和声音处理的世界有点陌生,所以如果这个问题很幼稚,请多多包涵:)

我正在尝试做的是不断地保存我们婴儿房中的声音,以 2 小时的间隔分割录音。我计划保留这些数据以供将来分析(例如,绘制哭泣时间,我会将其与其他事件相关联,并且可能会哭泣识别)。

到目前为止,该应用程序运行良好。但是,考虑到 90% 的时间会保持沉默,我想知道是否有可以使用的高效编解码器。我尝试在输入编解码器设置之前修改 PCM 原始数据,将低于特定阈值的任何值归零,但这并没有显着减小文件大小。这是一个疯狂的猜测,以防万一这会“帮助”编解码器(我试过 AAC/HE 和 MP3,还没有 AMR)。

你能指出我正确的方向吗?...

我不介意使用需要对文件进行后处理的解决方案。例如,我查看了http://sox.sourceforge.net,但它去除了减少记录长度的静音期(我想保持时间戳和长度不变)。

注意:使用 SoX 使用命名方案将文件拆分为多个部分,该命名方案允许我重新构建原始时间,这是一个选项......但我无法使用该脚本,但是)。

额外的问题:如果我想稍后运行一些处理,AMR-NB 是否足以编码婴儿哭声?(例如thisthis)或者...我应该坚持使用 AMR-WB 吗?

谢谢,

7月22日更新

感谢大家到目前为止的回复。仅使用 WAV 注入零,然后使用 bzip2 等来压缩重复数据的想法非常好(感谢@MBaz)。

@Fat32:我已经删除了文件,但我记得大小约为 20Mb/hr,在用零替换低 PCM 值(大约 50% 的流)后没有实质性变化。

另一个更新:AMR-WB 给我的结果比 AAC/HE 更好,~6 Mb/hr。所以我可能会坚持下去,但是我不确定如果稍后我决定稍后运行一些婴儿识别分析,低比特率 + 采样率会如何影响事情(即,如果信息丢失会删除对神经网络)。

4个回答

阈值应该将文件大小减小到正在使用的编码器的限制。AAC/H.264 正在使用最先进的通用音频压缩编解码器(只能被应用特定的优化编解码器击败,例如语音声码器等)。

可能是您的文件已经很少了吗?输入一些数值数据,例如采样率、每个样本的平均位数、记录持续时间和文件大小......

如果我愿意做你想做的事(我有 3 个孩子,最小的 25 岁,所以我不太愿意),我会在头几个月使用运动检测器触发记录。哭泣通常伴随着剧烈的手和手臂运动。

有许多带有集成运动检测器和麦克风的 wifi 摄像机,以及基于 Web 的 api。

一对年轻夫妇最典型的情况是头几个月极度缺乏睡眠。您可能希望采取最小努力的方法。

您可以尝试使用某种活动检测器算法,并且在未检测到活动时不向编解码器提供任何数据(甚至零)。对于时间戳,您可以在录制的活动之前添加 FSK 时间标记和/或语音合成时间通知,并将其提供给捕获的音频样本前面的编解码器。

使用 a) 硬噪声门(以便在静音时材料完美压缩)b) 可变比特率记录:MP3 以及 OGG/Vorbis 编码器可以轻松提供这些,您应该会获得相当好的结果。

当您计划最终分析呼吸模式时,噪声门当然要么无效,要么破坏您的数据。

但是选项 b) 在单独使用时也应该有所帮助。