gpt4 book ai didi

mp3 - 使用 pymad、pcm、vad 等检测口语音频文件中的停顿

转载 作者:行者123 更新时间:2023-12-04 02:16:00 31 4
gpt4 key购买 nike

首先,我将大致说明我正在尝试做的事情并寻求建议。然后我会解释我目前的做法,并为我目前的问题寻求答案。


问题

我有一个人说话的 MP3 文件。我想把它分成大致对应于一个句子或短语的片段。 (我会手动完成,但我们正在谈论数小时的数据。)

如果您有关于如何以编程方式或对某些现有实用程序执行此操作的建议,我很乐意听取。 (我知道语音事件检测并且我已经对其进行了一些调查,但我没有看到任何免费提供的实用程序。)


当前方法

我认为最简单的方法是按特定时间间隔扫描 MP3 并找出平均音量低于某个阈值的位置。然后我会使用一些现有的实用程序在这些位置切割 mp3。

我一直在玩 pymad,我相信我已经成功地提取了 mp3 每一帧的 PCM(脉冲编码调制)数据。现在我被困住了,因为我似乎无法真正理解 PCM 数据如何转换为相对音量。我还知道其他复杂因素,例如多 channel 、大端与小端等。

关于如何将一组 pcm 样本映射到相对体积的建议将是关键。

谢谢!

最佳答案

PCM 是一种基于时间帧的声音编码。对于每个时间范围,您都会获得一个峰值水平。 (如果你想要一个物理引用:峰值水平对应于麦克风膜在给定时间从其静止位置移出的距离。)让我们忘记 PCM 可以对 8 位样本使用无符号值,并关注有符号的值。如果该值 > 0,则膜位于其静止位置的一侧,如果该值 < 0,则膜位于另一侧。与静止的错位越大(无论向哪一侧),声音越大。

大多数语音分类方法都从一个非常简单的步骤开始:将峰值电平与阈值电平进行比较。如果峰值水平低于阈值,则声音被认为是背景噪音。查看 Audacity 的 Silence Finder 中的参数,silence level 应该是该阈值。下一个参数 Minimum silence duration 显然是标记中断(或者在您的情况下是句子结束)所需的静默期的长度。

如果您想自己编写一个类似的工具,我推荐以下方法:

  1. 将您的声音样本分成特定持续时间的离散集合。我将从 1/10、1/20 或 1/100 秒开始。
  2. 对于这些集合中的每一个,计算最大峰值水平
  3. 将此最大峰值与阈值(Audacity 中的静音级别)进行比较。阈值是您必须根据声音样本的具体情况(响度、背景噪音等)自行确定的东西。如果最大峰值低于您的阈值,则此设置为静音。
  4. 现在分析分类集系列:计算录音中的静音长度。 (长度 = 静默集的数量 * 集的长度)。如果它超过您的 Minimum silence duration,则假设您在此处结束了一个句子。

自己编写代码而不是继续使用 Audacity 的要点是,您可以使用高级分析方法改进分类。您可以应用的一个非常简单的指标称为过零率,它只计算符号在您给定的一组峰值水平(即您的值越过 0 线)中切换的频率。还有更多,它们都更复杂,但可能值得付出努力。看看discrete cosine transformations例如……

关于mp3 - 使用 pymad、pcm、vad 等检测口语音频文件中的停顿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2626345/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com