如何在 SwiftUI 中使用 AudioKit?在视图中更改状态变量
How to use AudioKit in SwiftUI? Change state var in view
我添加了监听器:
class MIDIReceiver: MIDIListener {
...
}
我应该将以下代码放在 SwiftUI 的什么位置,以便我可以使用我的 midi 键盘更改 @State 变量?
let midi = MIDI()
midi.openInput()
let receiver = MIDIReceiver()
midi.addListener(receiver)
谢谢
-- 添加于 10 月 28 日 --
(1)
我在中添加了 class
https://github.com/AudioKit/Cookbook/blob/main/Cookbook/Cookbook/Recipes/MIDIMonitor.swift
但没有风景...
添加@ObservedObject 后 var conductor = MIDIMonitorConductor()
在我的 ContentView 中,这些显示在我的控制台中。
2020-10-28 00:47:19.646934-0500 AudioKitTrySPM[2998:82471] [midi] MIDI.swift:init():52:初始化 MIDI (MIDI.swift:init ():52)
2020-10-28 00:47:19.698885-0500 AudioKitTrySPM[2998:82471] [插件] AddInstanceForFactory:没有为 id F8BB1C28-BAE8-11D6-9C31-00039315CD46 注册工厂
2020-10-28 00:47:19.728062-0500 AudioKitTrySPM[2998:82471] HALC_ShellDriverPlugIn::Open:无法获取指向 Open 例程的指针
我应该更改项目中的任何其他内容吗?
(2)
我的 contentview
中有一个 State 数组
@State private var touchKeys: Array<Bool> = [Bool](repeating: false, count: 24)
如何触发映射 MIDI 信号的函数来更新数组?
谢谢
您可以创建接收器 ObservableObject 并使用已发布的属性 values/states 您希望 SwiftUI 视图 depend/refresh 打开。
如下例所示:
import Combine
class MIDIReceiver: MIDIListener: ObservableObject {
@Published var midiSignalReceived = false
private let midi: MIDI!
func setup() {
midi = MIDI()
midi.openInput()
midi.addListener(self)
}
// ... other code / midi callbacks here
}
// ...
struct ContentView: View {
@StateObject var midiListener = MIDIListener()
var body: some View {
Text("Root View")
.onReceive(midiListener.$midiSignalReceived) { activated in
// do something here
}
.onAppear {
self.midiListener.setup()
}
}
}
参见 AudioKit iOS - receivedMIDINoteOn function
中的示例 events/states
AudioKit Cookbook 包含一个简单的 MIDI 监视器并使用 SwftUI。
我添加了监听器:
class MIDIReceiver: MIDIListener {
...
}
我应该将以下代码放在 SwiftUI 的什么位置,以便我可以使用我的 midi 键盘更改 @State 变量?
let midi = MIDI()
midi.openInput()
let receiver = MIDIReceiver()
midi.addListener(receiver)
谢谢
-- 添加于 10 月 28 日 --
(1) 我在中添加了 class https://github.com/AudioKit/Cookbook/blob/main/Cookbook/Cookbook/Recipes/MIDIMonitor.swift 但没有风景...
添加@ObservedObject 后 var conductor = MIDIMonitorConductor() 在我的 ContentView 中,这些显示在我的控制台中。
2020-10-28 00:47:19.646934-0500 AudioKitTrySPM[2998:82471] [midi] MIDI.swift:init():52:初始化 MIDI (MIDI.swift:init ():52)
2020-10-28 00:47:19.698885-0500 AudioKitTrySPM[2998:82471] [插件] AddInstanceForFactory:没有为 id
我应该更改项目中的任何其他内容吗?
(2) 我的 contentview
中有一个 State 数组 @State private var touchKeys: Array<Bool> = [Bool](repeating: false, count: 24)
如何触发映射 MIDI 信号的函数来更新数组?
谢谢
您可以创建接收器 ObservableObject 并使用已发布的属性 values/states 您希望 SwiftUI 视图 depend/refresh 打开。
如下例所示:
import Combine
class MIDIReceiver: MIDIListener: ObservableObject {
@Published var midiSignalReceived = false
private let midi: MIDI!
func setup() {
midi = MIDI()
midi.openInput()
midi.addListener(self)
}
// ... other code / midi callbacks here
}
// ...
struct ContentView: View {
@StateObject var midiListener = MIDIListener()
var body: some View {
Text("Root View")
.onReceive(midiListener.$midiSignalReceived) { activated in
// do something here
}
.onAppear {
self.midiListener.setup()
}
}
}
参见 AudioKit iOS - receivedMIDINoteOn function
中的示例 events/statesAudioKit Cookbook 包含一个简单的 MIDI 监视器并使用 SwftUI。