1

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

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

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

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 音频公式计算偏移量和长度。然后使用它来指定起点和长度(以字节为单位)。我不确定这是正确的方法,因为解码器将返回“未知文件格式”。

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

4

1 回答 1

1

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

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

您提到您可以将音频提取到 PCM(并保存到 WAV)。然后您就可以得到答案:只需将提取的不同部分提交给 SuperpoweredOfflineAnalyzer 的不同实例。

于 2017-03-03T02:14:35.240 回答