通过 BPM 将音轨分割成片段,并使用 Superpowered iOS 分析每个片段

Posted

技术标签:

【中文标题】通过 BPM 将音轨分割成片段,并使用 Superpowered iOS 分析每个片段【英文标题】:Split audio track into segments by BPM and analyse each segment using Superpowered iOS 【发布时间】:2017-02-28 14:55:04 【问题描述】:

我一直在使用 Superpowered ios 库来分析音频并提取 BPM、响度、音高数据。我正在开发一个 iOS Swift 3.0 项目,并且已经能够使用 ObjC 的 Bridging headers 让 C 类与 Swift 一起工作。

我遇到的问题是,虽然我可以创建解码器对象,但从音乐库中提取音频并将其存储为 .WAV - 我无法仅为提取的音频的 sn-ps 创建解码器对象并让分析器类返回数据。

我的方法是创建一个解码器对象,如下所示:

var decodeAttempt = decoder!.open(self.originalFilePath, metaOnly: false, offset: offsetBytes, length: lengthBytes, stemsIndex: 0)

'offsetBytes' 和 'LengthBytes' 我认为是音频文件中的位置。由于我已经解压缩了音频,将其存储为 WAV,然后将其提供给解码器,因此我正在使用 44100 x 2 x 16 / 8 = 176400 字节每秒的 PCM Wave 音频公式计算偏移量和长度。然后使用它来指定起点和长度(以字节为单位)。我不确定这是否是正确的方法,因为解码器将返回“未知文件格式”。

关于如何实现这个问题的标题的任何想法甚至替代建议?提前致谢!

【问题讨论】:

【参考方案1】:

SuperpoweredDecoder 的偏移量和长度参数是由于 android APK 文件格式而存在的,其中捆绑的音频文件只是简单地连接到包中。

尽管 WAV 文件尽可能“未压缩”,但开头有一个标头,因此偏移量和长度不是用于此目的的好方法。尤其是标头仅出现在开头,没有标头解码是不可能的。

您提到您可以将音频提取到 PCM(并保存到 WAV)。那么您就掌握了答案:只需将提取的不同部分提交给 SuperpoweredOfflineAnalyzer 的不同实例即可。

【讨论】:

谢谢 Gabor - 我最初也有同样的想法,但当我看到 'offset,length' 参数并认为它与 WAV 文件有关时被转移了 - 我会试试你的建议!跨度>

以上是关于通过 BPM 将音轨分割成片段,并使用 Superpowered iOS 分析每个片段的主要内容,如果未能解决你的问题,请参考以下文章

从 mp4 中提取音轨并将其保存到可播放的音频文件中

如何在Python中将图像分割成多个片段

返回要使用 AudioTrack 播放的曲目的长度(以秒为单位)

如何标记从卷积神经网络的分割算法生成的图像片段?

webpack

使用节点同时从 soundcloud 源流式传输音频