BasicPitch 是 Spotify 的一个音频转 MIDI 的项目。
它本身由 Python 开发,本项目为其 Swift 移植版本。
以 MacOS 为例,最低支持系统版本为 13.5
import BasicPitch
private func processAudio(_ audioFile: URL) async -> NoteCreation {
// 在一个后台线程中进行预测,并获取操作的进度
return await Task.detached {
return try! await BasicPitch.predict(audioFile) { name, value in
// NOTE: 注意,这里非主线程
print(name, value)
}
}.value
}
// 保存 MIDI 文件
Task {
let noteCreation = await processAudio(audioFileForReading)
// genMidiFileData 有很多可配置的参数,这里是默认操作
if let data = try? noteCreation?.genMidiFileData() {
try? data.write(to: midiFileForWriting)
}
}
BasicPitch 本身由 3 个步骤来完成工作
本项目也是遵循这个原理
其中,第 1 步中输入到 nmp 模型的音频数据会和 Python 版本有一些不同
本项目注释较少,基本上是对 Python 版本的一比一移植。
有任何看起来迷惑的地方可以按照函数名去看 Python 版本的注释。