【问题标题】:How to use AudioKit in SwiftUI? Change state var in view如何在 SwiftUI 中使用 AudioKit?在视图中更改状态变量
【发布时间】:2021-02-05 02:35:18
【问题描述】:

我添加了一个监听器:

class MIDIReceiver: MIDIListener {
...
}

我应该将以下代码放在 SwiftUI 中的什么位置,以便我可以使用我的 MIDI 键盘来更改 @State 变量?

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 varconductor = 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) 我的内容视图中有一个状态数组

    @State private var touchKeys: Array<Bool> = [Bool](repeating: false, count: 24)

如何触发函数映射midi信号来更新数组?

谢谢

【问题讨论】:

    标签: swift audiokit


    【解决方案1】:

    您可以让您的接收器 ObservableObject 并为您希望 SwiftUI 视图依赖/刷新的值/状态使用已发布的属性。

    如下例:

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

    【讨论】:

      【解决方案2】:

      AudioKit Cookbook 包含一个简单的 MIDI 监视器并使用 SwftUI。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-29
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多