You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Spleeter-Android-iOS进行人声分离时process返回1的问题求助

Spleeter-Android-iOS人声分离process返回1失败问题排查

使用Spleeter-Android-iOS库做人声分离时,调用spleeterSDK.process(wavPath!, outPath: path)返回值为1而非预期的0,无法执行后续流程。

相关处理代码

let ret = spleeterSDK.process(wavPath!, outPath: path) // 预期ret为0
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创建代码(返回值为2)

spleeterSDK = SpleeterSDK();
let ret = spleeterSDK.createSDK()
spleeterSDK.release()
print("create SDK: ", ret) // 打印结果为2

输入WAV路径获取

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

输出路径获取

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

let path = url.path

问题分析与修复建议

  1. SDK初始化后立即释放是核心错误
    你在调用createSDK()后马上执行了spleeterSDK.release(),这会直接销毁SDK实例,导致后续调用process时SDK已经处于不可用状态,必然返回错误码1。必须在整个SDK使用周期结束后(比如App退出、页面销毁且不再需要人声分离功能时)再调用release。

  2. 排查createSDK返回码2的原因
    返回码2通常表示SDK初始化失败,常见原因包括:

    • 模型文件未正确打包到App Bundle中,或模型路径配置错误
    • 设备不支持SDK依赖的硬件加速(如Metal/NNAPI)
    • 初始化时内存不足,无法加载模型资源
  3. 验证输入WAV文件有效性
    确保_input.wav符合Spleeter要求的格式:16位深度、采样率44100Hz(或匹配模型指定的采样率)、单/双声道均可,文件本身未损坏。

  4. 输出路径权限确认
    虽然使用了documentDirectory(App默认有权限),但可以手动打印路径后,检查该目录是否存在、是否可写入,排除路径异常问题。

修正后的SDK初始化示例

// 定义为类成员变量,避免提前释放
var spleeterSDK: SpleeterSDK!

// 在合适的时机(如viewDidLoad)初始化SDK
override func viewDidLoad() {
    super.viewDidLoad()
    spleeterSDK = SpleeterSDK()
    let ret = spleeterSDK.createSDK()
    print("create SDK: ", ret) // 正常应返回0
    // 不要在这里调用release
}

// 在页面销毁或不再使用时释放SDK
deinit {
    spleeterSDK?.release()
}

内容的提问来源于stack exchange,提问作者Aarfeen Ahmad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 07:24:22