#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, потому что он почти дает мне всю необходимую функциональность, если я смогу заставить это работать!
Спасибо!