簡體   English   中英

如何在 SwiftUI 中使用 AudioKit? 在視圖中更改狀態變量

[英]How to use AudioKit in SwiftUI? Change state var in view

我添加了一個監聽器:

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添加了這個類,但沒有視圖......

在我的 ContentView 中添加 @ObservedObject var Conductor = MIDIMonitorConductor() 后,這些顯示在我的控制台中。

2020-10-28 00:47:19.646934-0500 AudioKitTrySPM[2998:82471] [midi] MIDI.swift:init():52:初始化 MIDI (MIDI.swift:init():52) 2020-10-28 000 :47:19.698885-0500 AudioKitTrySPM [2998:82471] [插件] AddInstanceForFactory:否工廠ID注冊<CFUUID 0x600000211300> F8BB1C28-BAE8-11D6-9C31-00039315CD46 2020年10月28日00:47:19.728062-0500 AudioKitTrySPM [2998 :82471] HALC_ShellDriverPlugIn::Open: 無法獲得指向 Open 例程的指針

我應該更改項目中的其他內容嗎?

(2) 我的內容視圖中有一個 State 數組

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

如何觸發一個函數來映射 MIDI 信號以更新數組?

謝謝

您可以讓您的接收器 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 函數

AudioKit Cookbook包含一個簡單的 MIDI 監視器並使用 SwftUI。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM