如何解决AudioKit:如何添加V5 Midi侦听器
看来V5与V4不同。我想插入外部Midi键盘并将事件映射到视觉合成器。以下V4示例产生错误
class MuMidiListener: AKMIDIListener {
// ... protocol funcs here
}
class MuMidi {
public static let shared = MuAudio()
let engine = AKEngine()
var midi = AKMIDI()
var listener = MuMidiListener()
init () {
midi.openInput()
midi.addListener(listener)
}
public func test() {
try? engine.start()
}
}
解决方法
AKEngine(现在为AudioEngine)与Midi输入无关。自2020年9月7日起,最近对V5进行了一些名称更改后,监控Midi输入变得非常简单:
class MuLog {
static func print(_ icon: String,_ msg: String) {
Swift.print(icon + ":" + msg,terminator: " ")
}
}
class MuMidiListener: MIDIListener {
func note(_ note: MIDINoteNumber,_ velocity: MIDIVelocity) -> String {
let names = ["C","D♭","D","E♭","E","F","G♭","G","A♭","A","B♭","B"]
let octave = Int(note / 12)
let note = Int(note % 12)
let name = names[note]
return "\(name)\(octave):\(velocity)"
}
func receivedMIDINoteOn(noteNumber: MIDINoteNumber,velocity: MIDIVelocity,channel: MIDIChannel,portID: MIDIUniqueID?,offset: MIDITimeStamp) {
MuLog.print("♪",note(noteNumber,velocity))
}
func receivedMIDINoteOff(noteNumber: MIDINoteNumber,offset: MIDITimeStamp) {
MuLog.print("∅",velocity))
}
func receivedMIDIController(_ controller: MIDIByte,value: MIDIByte,offset: MIDITimeStamp) {
MuLog.print("?","\(controller):\(value)")
}
func receivedMIDIAftertouch(noteNumber: MIDINoteNumber,pressure: MIDIByte,pressure))
}
func receivedMIDIAftertouch(_ pressure: MIDIByte,offset: MIDITimeStamp) {
MuLog.print("?","\(channel):\(pressure)")
}
func receivedMIDIPitchWheel(_ pitchWheelValue: MIDIWord,offset: MIDITimeStamp) {
MuLog.print("◯","\(channel):\(pitchWheelValue)")
}
func receivedMIDIProgramChange(_ program: MIDIByte,offset: MIDITimeStamp) {
MuLog.print("⚙️","\(channel):\(program)")
}
func receivedMIDISystemCommand(_ data: [MIDIByte],offset: MIDITimeStamp) {
MuLog.print("SysX","\(data)")
}
func receivedMIDISetupChange() {
}
func receivedMIDIPropertyChange(propertyChangeInfo: MIDIObjectPropertyChangeNotification) {
}
func receivedMIDINotification(notification: MIDINotification) {
}
}
class MuMidi {
public static let shared = MuMidi()
public func test() {
let midi = MIDI.sharedInstance
let listener = MuMidiListener()
midi.openInput()
midi.addListener(listener)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。