我正在使用这个 Spleeter 库进行语音分离,但它不起作用



我正在使用这个Spreeter库进行人声分离Spleeter Android iOS

但当我调用func时,它给了我1而不是0spleterSDK.process(wavPath!,outPath:path(。我不知道问题出在哪里。

如有任何帮助,将不胜感激

let ret = spleeterSDK.process(wavPath!, outPath: path) // here the ret should be zero
if(ret == 0) {
let queue = DispatchQueue(label: "process-queue")
queue.async {
while(true) {
let progress = self.spleeterSDK.progress()
DispatchQueue.main.async {
self.progress.text = String(progress) + "%"
}
usleep(1000 * 1000);

if(progress == 100) {
break
}
}

self.spleeterSDK.saveOne(url.path + "/record.wav", stemRatio: UnsafeMutablePointer<Float32>(mutating: self.stemRatio))

DispatchQueue.main.async {
self.btnProcess.isEnabled = true

do {
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
try AVAudioSession.sharedInstance().setActive(true)

self.player = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: path + "/record.wav"))
guard let player = self.player else {
return
}
player.play()
} catch let error {
print(error.localizedDescription)
}
}
}
}

更新:

我是如何创建SDK 的

spleeterSDK = SpleeterSDK();
let ret = spleeterSDK.createSDK()
spleeterSDK.release()
print("create SDK: ", ret) // Here it prints 2

这是我用来获取wav-wavPath 的方法

let wavPath = Bundle.main.path(forResource: "_input.wav", ofType: nil)

这是我用来获取wav outPath 的方法

let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
print(url.path)

let path = url.path

通常,如果一个函数工作,它对其输入有要求。我们需要看到你的输入,才能有机会知道为什么它不起作用

spleeterSDK.process(wavPath!, outPath: path)
  1. 什么是wavPath
  2. 你的设备上的应用程序可以看到的地方真的有文件吗
  3. 它是wav格式的文件吗
  4. 里面有什么
  5. 什么是路径
  6. 这是一条有效的路径吗
  7. 它引用的文件夹是否存在?你有权限写信给它吗
  8. spleterSDK是否要求在进程工作(初始化(之前调用任何其他函数
  9. 演示代码说你需要调用ret = spleeterSDK.createSDK()——你做到了吗?如果是,它返回了什么
  10. 你运行他们的演示应用程序了吗?它起作用了吗

您应该验证是否检查了所有这些内容。

最新更新