AKSampler更新后AKAppleSampler调用loadMelodicSoundFont报未识别选择器求助
解决AKAppleSampler调用loadMelodicSoundFont时报错“unrecognized selector”的问题
这个问题我之前帮不少开发者排查过,本质是AudioKit版本迭代中的API命名变更踩坑了——你用的loadMelodicSoundFont(_:preset:)是旧AKSampler专属的方法,新的AKAppleSampler已经把这个方法重命名或合并了,所以系统会抛出“未识别选择器”的错误。
下面是具体的解决步骤:
1. 替换为AKAppleSampler的正确API
在新版AudioKit中,AKAppleSampler加载SoundFont的标准方法是loadSoundFont(_:preset:)(加载本地资源)或者loadSoundFont(url:preset:)(通过URL加载),去掉了旧方法里的Melodic前缀。
2. 修改你的代码片段
把原来的代码:
let midiSampler = AKAppleSampler() do { try midiSampler.loadMelodicSoundFont("GeneralMidi", preset: i) // 其他逻辑 } catch { print(error) }
替换成:
let midiSampler = AKAppleSampler() do { // 加载项目中已添加的SoundFont文件(注意要带正确的文件名,比如GeneralMidi.sf2) try midiSampler.loadSoundFont("GeneralMidi", preset: i) // 如果你需要通过URL加载(比如从沙盒获取),可以用这个版本: // guard let sfUrl = Bundle.main.url(forResource: "GeneralMidi", withExtension: "sf2") else { // fatalError("SoundFont文件未找到,请检查项目配置") // } // try midiSampler.loadSoundFont(url: sfUrl, preset: i) // 别忘了启动采样器 try midiSampler.start() } catch { print("加载SoundFont失败:\(error.localizedDescription)") }
3. 额外注意事项
- 务必确认你的SoundFont文件(比如
GeneralMidi.sf2)已经正确添加到Xcode项目中,并且在Target Membership面板里勾选了对应的应用目标,否则会出现文件找不到的错误。 - 如果需要区分旋律采样和打击乐采样,AKAppleSampler提供了
isDrumKit属性,加载预设后设置midiSampler.isDrumKit = true,就能把采样器切换为鼓组模式,对应原AKSampler中打击乐相关的功能。 - 建议直接通过Xcode的“跳转到定义”功能查看当前版本AKAppleSampler的方法列表,比旧文档更准确——毕竟AudioKit的API在迭代中偶尔会有细节调整。
内容的提问来源于stack exchange,提问作者caxix
相关产品推荐
相关产品推荐

