Ios AVAudioUnitSampler错误加载SoundBankaturl->;找不到修补程序0银行0x0/0
加载soundfont失败,原因是“找不到修补程序0银行0x0/0” 查看完整的结果路径时,soundfont的URL显示正确Ios AVAudioUnitSampler错误加载SoundBankaturl->;找不到修补程序0银行0x0/0,ios,objective-c,avfoundation,swift,soundfont,Ios,Objective C,Avfoundation,Swift,Soundfont,加载soundfont失败,原因是“找不到修补程序0银行0x0/0” 查看完整的结果路径时,soundfont的URL显示正确 avaudionitsampler继承自avaudionitmidiinstrument AVAudioUnitSampler没有自己的初始值设定项。 AVAudioUnitMidiInstrument有一个采用AudioComponentDescription 使用这两种方法都会导致相同的错误 var error:NSError? let soundBankUrl:N
avaudionitsampler
继承自avaudionitmidiinstrument
AVAudioUnitSampler
没有自己的初始值设定项。
AVAudioUnitMidiInstrument
有一个采用AudioComponentDescription
使用这两种方法都会导致相同的错误
var error:NSError?
let soundBankUrl:NSURL = NSURL(fileURLWithPath:
NSBundle.mainBundle().pathForResource("FluidR3 GM2-2", ofType: "SF2"))
var audioEngine:AVAudioEngine = AVAudioEngine()
// sampler
var audioCompDesc = AudioComponentDescription(
componentType: OSType(kAudioUnitType_MusicDevice),
componentSubType: OSType(kAudioUnitSubType_Sampler),
componentManufacturer: OSType(kAudioUnitManufacturer_Apple),
componentFlags: 0, componentFlagsMask: 0)
var sampler:AVAudioUnitSampler = AVAudioUnitSampler(audioCompDesc)
// var sampler:AVAudioUnitSampler = AVAudioUnitSampler()
let loaded = sampler.loadSoundBankAtURL(soundBankUrl, error: &error)
结果:
Unable to find patch 0 bank 0x0/0
使用较低级别的API可以在音频单元上设置属性
AUSamplerBankPresetData bpdata;
bpdata.bankURL = (__bridge CFURLRef) presetURL;
bpdata.bankMSB = kAUSampler_DefaultMelodicBankMSB;
bpdata.bankLSB = kAUSampler_DefaultBankLSB;
bpdata.presetID = (UInt8) patch;
return [self loadSynthFromPresetURL:(NSURL*)presetURL
withPatch:(int) patch
audioUnit: (AudioUnit) audioUnit
samplerBankPesetData: (AUSamplerBankPresetData) bpdata];
result = AudioUnitSetProperty(audioUnit,
kAUSamplerProperty_LoadPresetFromBank, kAudioUnitScope_Global,
0, &samplerBankPresetData, sizeof(samplerBankPresetData));
A) Xcode 6 beta版的更高版本(第3版)添加了额外的方法,消除了桥接的需要。//
// ViewController.swift
// SwiftAudio
//
// Created by Robert Buskens on 2014-06-06.
// Copyright (c) 2014 Buskens & Associates Inc. All rights reserved.
//
import UIKit
import AVFoundation
import AudioUnit
class ViewController: UIViewController {
var engine: AVAudioEngine
var sampler:AVAudioUnitSampler
init(coder aDecoder: NSCoder!) {
var retVal:Bool = false
var error:NSErrorPointer = nil
engine = AVAudioEngine()
sampler = AVAudioUnitSampler()
engine.attachNode(sampler)
engine.connect(sampler, to: engine.outputNode, format: nil)
var url = NSBundle.mainBundle().URLForResource("Framus_western", withExtension: "sf2")
retVal = engine.startAndReturnError(error)
var r:Bool = sampler.loadSoundBankInstrumentAtURL(url, program: 0, bankMSB: 0x79, bankLSB: 0, error: error)
engine.startAndReturnError(error)
println("engine start returned: \(retVal)")
super.init(coder: aDecoder)
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func playNote(sender: UIButton) {
sampler.startNote(45, withVelocity: 80, onChannel: 1)
}
}
比没有AVAudioEngine要简单得多。谢谢你的回答。到目前为止,每次升级,我都会使用越来越多的C修复程序。这条路容易多了。