检测声音文件中的重复

Posted

技术标签:

【中文标题】检测声音文件中的重复【英文标题】:Detect repetition in sound file 【发布时间】:2014-11-04 11:38:37 【问题描述】:

我真的不知道我的想法是否可行,但到底是什么。

我有一些 MP3 游戏音乐。这段游戏音乐是从 Tracker 格式渲染的,这意味着在某些时候轨道会循环回到更早的点,所以它是这样的:

Intro---|Main loop-------------------|Main loop-------------------|Main loop fade|

或以“正则表达式”形式:

/^\pIntro(\pMain_0\pMain_1\pMain_2)+\pMain_0\pMain_1_fading$/

我希望这能传达正在发生的事情!

基本上,我想知道是否可以根据波形的重复来检测主循环的开始和结束。想法是,由于它们是从跟踪器格式呈现的,因此循环之间的波形应该完全相同,即使在 MP3 格式“烘焙”之后也是如此。

如果可能的话,我该如何寻找这样一个重复循环?目标是以编程方式扩展这些循环轨道以重复更多次,因此我不必手动进行。

在这个阶段,我只是在寻找解决问题的通用算法。我可以计算出如何读取 MP3 文件的波形,处理它并毫无困难地保存一个新的,这里我需要帮助的是如何找到波形的重复部分。有没有人可以传授智慧?

【问题讨论】:

有趣的问题! this question 可能有用吗? @VincentvanderWeele 如果答案包括使用的算法而不是指向产生 403 的内容的链接,则可能是:D 哦,也许我也应该点击那个链接 ;) 无论如何,似乎即使在最高抽象级别上(你可以以某种方式将声音样本映射到固定大小的字母表,所以你的 wav 文件减少了到一个字符串),这是一个相当困难的问题。 【参考方案1】:

找到最大值。 autocorrelation-函数的峰值应该可以帮助您找到信号中的重复。

【讨论】:

【参考方案2】:

如果您首先对其执行 FFT 以将其转换为频域,它将对样本对齐和幅度变化不太敏感。

可选地应用一些过滤来获得重要的关键频率并过滤掉那些不重要的频率(例如,某人在重复中添加的额外噪音可能是您可以过滤掉的东西)。

最后应用 Frank 提到的自相关来查找重复。

【讨论】:

以上是关于检测声音文件中的重复的主要内容,如果未能解决你的问题,请参考以下文章

阻止音频文件重复 XNA

iOS 5 检测重复/连续摇晃

在 Swift 中重复播放声音文件?

向html中的按钮添加声音[重复]

Ubuntu终端中的声音通知[重复]

播放随机声音而不重复