按 BPM 将音轨分成多个片段,并使用 Superpowered iOS 分析每个片段
Split audio track into segments by BPM and analyse each segment using Superpowered iOS
我一直在使用 Superpowered iOS 库来分析音频并提取 BPM、响度、音调数据。我正在研究一个 iOS Swift 3.0 项目,并且已经能够使用 ObjC 的桥接 headers 使 C classes 与 Swift 一起工作。
我 运行 遇到的问题是,虽然我可以创建解码器 object,但从音乐库中提取音频并将其存储为 .WAV - 我无法创建解码器object 只获取提取音频的片段,并获取分析器 class 到 return 数据。
我的方法是创建解码器 object 如下:
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 音频公式计算偏移量和长度。然后使用它来指定起始点和长度(以字节为单位)。我不确定这是执行此操作的正确方法,因为解码器将 return 'Unknown file format'.
关于如何实现这个问题的标题有什么想法甚至替代建议吗?提前致谢!
SuperpoweredDecoder 的偏移量和长度参数存在是因为 Android APK 文件格式,其中捆绑的音频文件只是简单地连接到包中。
尽管 WAV 文件尽可能 "uncompressed",但开头有一个 header,因此偏移和长度不是实现此目的的好方法。特别是 header 仅出现在开头,没有 header 解码是不可能的。
您提到可以将音频提取为 PCM(并保存为 WAV)。然后你就有了答案:只需将不同的提取部分提交到 SuperpoweredOfflineAnalyzer 的不同实例即可。
我一直在使用 Superpowered iOS 库来分析音频并提取 BPM、响度、音调数据。我正在研究一个 iOS Swift 3.0 项目,并且已经能够使用 ObjC 的桥接 headers 使 C classes 与 Swift 一起工作。
我 运行 遇到的问题是,虽然我可以创建解码器 object,但从音乐库中提取音频并将其存储为 .WAV - 我无法创建解码器object 只获取提取音频的片段,并获取分析器 class 到 return 数据。
我的方法是创建解码器 object 如下:
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 音频公式计算偏移量和长度。然后使用它来指定起始点和长度(以字节为单位)。我不确定这是执行此操作的正确方法,因为解码器将 return 'Unknown file format'.
关于如何实现这个问题的标题有什么想法甚至替代建议吗?提前致谢!
SuperpoweredDecoder 的偏移量和长度参数存在是因为 Android APK 文件格式,其中捆绑的音频文件只是简单地连接到包中。
尽管 WAV 文件尽可能 "uncompressed",但开头有一个 header,因此偏移和长度不是实现此目的的好方法。特别是 header 仅出现在开头,没有 header 解码是不可能的。
您提到可以将音频提取为 PCM(并保存为 WAV)。然后你就有了答案:只需将不同的提取部分提交到 SuperpoweredOfflineAnalyzer 的不同实例即可。