AudioKit AKMetronome silence текущий ритм внутри обратного вызова?

#ios #swift #audio #audiokit

#iOS #swift #Аудио #audiokit

Вопрос:

Я пишу музыкальное приложение с метрономом и хотел обновить его функциональность. Моя цель — отключить любой заданный ритм в AKMetronome AudioKit внутри функции обратного вызова. Я пытаюсь сделать это с помощью AKMixer и передаю метроном микшеру и устанавливаю громкость на 0 для любого заданного такта. Я пытался использовать следующий код, но не преуспел в том, что работает правильно.

 import Foundation
import AudioKit
import MediaPlayer

@objc(Metronome)
class Metronome: NSObject {
  var metronome = AKMetronome()
  var mixer: AKMixer!
  var mutedBeats = [1, 2];
  
  
  override init() {
    super.init();
    self.mixer = AKMixer(self.metronome);
    
    self.mixer.volume = 1;
    self.metronome.callback = {

      if (self.metronome.currentBeat == 1){
        print("MIXER 1");
        self.mixer.volume = 1;
      } else if (self.metronome.currentBeat == 2) {
        print("MIXER 2");
        self.mixer.volume = 1;
      } else if (self.metronome.currentBeat == 3){
        print("MIXER 3");
        self.mixer.volume = 1;
      } else if (self.metronome.currentBeat == 4){
        print("MIXER 4");
        self.mixer.volume = 1;
      } else {
        self.mixer.volume = 0;
      }
     
    }

  }

  
  @objc
  func playMetronome(_ bpm: Int, sub subdivision: Int) {
    print("In play metronome");
    
    self.metronome.tempo = Double(100);
    self.metronome.subdivision = subdivision;
    
    AKManager.output = mixer;
    do {
      AKSettings.playbackWhileMuted = true;
      try AKManager.start()

    }
    catch{
      print("ERROR")
    }
    
    self.metronome.start();
    
  }
  
  @objc
  func stopMetronome() {
    print("In play metronome");
    
    self.metronome.stop()
    do {
      try AKManager.stop()
    } catch {
      print("ERROR stopping");
    }
    
    
  }
  
  @objc
  static func requiresMainQueueSetup() -> Bool {
    return true
  }
  
}
  

Есть ли какой-либо способ добиться этого с помощью обратного вызова AudioKit AKMetronome? Или я должен просто начать выяснять, как создать его с нуля. Моей целью было использовать AKMetronome, потому что он почти дает мне всю необходимую функциональность, если я смогу заставить это работать!

Спасибо!