swift - 如何在 SwiftUI 中使用 AudioKit?在 View 中更改状态变量

标签 swift audiokit

我添加了一个监听器:

class MIDIReceiver: MIDIListener {
...
}
我应该将以下代码放在 SwiftUI 的什么位置,以便我可以使用我的 MIDI 键盘来更改 @State var ?
let midi = MIDI()
midi.openInput()
let receiver = MIDIReceiver()
midi.addListener(receiver)
谢谢
-- 10 月 28 日添加 --
(1)
我在
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] [plugin] AddInstanceForFactory:没有为 ID 注册的工厂 F8BB1C28-BAE61904
2020-10-28 00:47:19.728062-0500 AudioKitTrySPM[2998:82471] HALC_ShellDriverPlugIn::Open:无法获得指向 Open 例程的指针
我应该更改项目中的其他内容吗?
(2)
我的内容 View 中有一个 State 数组
    @State private var touchKeys: Array<Bool> = [Bool](repeating: false, count: 24)
如何触发一个函数来映射 MIDI 信号以更新数组?
谢谢

最佳答案

您可以让您的接收器 ObservableObject 并使用已发布的属性作为您希望 SwiftUI View 依赖/刷新的值/状态。
就像下面的例子:

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 中的示例事件/状态

关于swift - 如何在 SwiftUI 中使用 AudioKit?在 View 中更改状态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64476100/

相关文章:

ios - tableView.reloadData() 表未更新

ios - AVAudioSession .defaultToSpeaker 更改麦克风输入

c++ - AudioKit 的 AKNodeOutputPlot 如何提取数据?

ios - 应用程序被 iOS 强制重启并使用新的隐私设置

swift - 日期之间的错误差异

ios - 如何修复 EzAudio swift iOS 13 中的 "Failed to fill complex buffer in float converter"

midi - 通过虚拟输出使用 AKSequencer 发送 midi

ios - 在连接到 Focusrite 2i2 的 AKFrequencyTracker 上获得奇怪的频率读数

ios - 在 Swift 3 中从本地文件加载数据对象

ios - Segue 已准备就绪,但性能无一异常(exception)地失败