2017-02-28 56 views
1

我一直在使用Superpowered iOS库来分析音频并提取BPM,响度,音高数据。我正在开发一个iOS Swift 3.0项目,并且已经能够使用ObjC的桥接头来使C类与Swift一起工作。通过BPM将音轨分割为多个分段,并使用超能力iOS分析每个分段

我遇到的问题是,虽然我可以创建一个解码器对象,从音乐库中提取音频并将其存储为一个.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音频公式计算偏移量和长度。然后用它来指定一个起始点和长度(以字节为单位)。我不确定这是否正确,因为解码器将返回'未知文件格式'。

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

回答

1

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

尽管WAV文件可以像“未压缩”一样,但在开头处有一个标题,因此偏移和长度不是一个好的方法。特别是因为标题仅出现在开头,并且没有标题解码是不可能的。

你提到你可以提取音频到PCM(并保存到WAV)。然后你手中有答案:只要将不同的提取部分提交给SuperpoweredOfflineAnalyzer的不同实例即可。

+0

感谢加博尔 - 我最初有同样的想法,但当我看到'偏移量,长度'参数,并假设它是与WAV文件做的时候,我一直在想 - 我会尝试你的建议! –