Аудиокит Аудиобус MVC Нет звука
У меня работает прототип Audiokit, который использует Audiobus на iOS. Я загружаю задержку эффектов, вход, выход AudioKit, микшер и т. Д. В контроллер представления, и все работает как положено.
Я сейчас пытаюсь рефакторинг для использования шаблона MVC. Я создал класс Conductor и класс задержки. Я переместил запуск Audiokit, запуск Audiobus и т. Д. В проводник. Я не получаю ошибок при сборке или запуске. Я также не получаю звук, проходящий через этот момент.
Задержка - это всего лишь пример MultiDelay, и она устанавливает AKNode и AKInput.
Я пропускаю что-то простое в этом?
Пример MVC Audiokit
ViewController...
import AudioKit
import AudioKitUI
import UIKit
class ViewController: UIViewController {
// Create instance of Conductor
let conductor = Conductor.sharedInstance
/// Views
let stackView = UIStackView()
/// Views
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
}
func setupUI() {
stackView.axis = .vertical
stackView.distribution = .fillEqually
stackView.alignment = .fill
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.spacing = 10
/// Delay
// Simple Delay
// Range and Type = Delay time in seconds (Default: 1)
stackView.addArrangedSubview(AKRotaryKnob(
property: "Simple Delay Time",
value: conductor.delay.time,
format: "%0.2f s") { sliderValue in
self.conductor.delay.time = sliderValue
})
// Range and Type = Feedback (Normalized Value) ranges from 0 to 1 (Default: 0.5)
stackView.addArrangedSubview(AKRotaryKnob(
property: "Simple Delay Feedback",
value: conductor.delay.feedback,
range: 0.0 ... 0.99,
format: "%0.2f s") { sliderValue in
self.conductor.delay.feedback = sliderValue
})
// Range and Type = Dry/Wet Mix (Normalized Value) ranges from 0 to 1 (Default: 0.5)
stackView.addArrangedSubview(AKSlider(
property: "Simple Delay Dry/Wet Mix",
value: self.conductor.delayDrMixer.balance,
range: 0.0 ... 0.99,
format: "%0.2f") { sliderValue in
self.conductor.delayDrMixer.balance = sliderValue
})
stackView.addArrangedSubview(AKSlider(
property: "Output Volume",
value: conductor.booster.gain,
range: 0 ... 2,
format: "%0.2f") { sliderValue in
self.conductor.booster.gain = sliderValue
})
/// Output Volume Section
view.addSubview(stackView)
stackView.widthAnchor.constraint(equalTo: self.view.widthAnchor, multiplier: 0.9).isActive = true
stackView.heightAnchor.constraint(equalTo: self.view.heightAnchor, multiplier: 0.9).isActive = true
stackView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
stackView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true
}
}
Дирижер...
import Foundation
import AudioKit
class Conductor: AKMIDIListener {
// Globally accessible singleton
static let sharedInstance = Conductor()
let input = AKStereoInput()
// Simple Delay
// Example using AudioKit class but you could use your own
// custom class instead.
var delay: AKDelay!
var delayDrMixer: AKDryWetMixer!
var booster: AKBooster!
var mixer = AKMixer()
init() {
AKSettings.audioInputEnabled = true
// Simple Delay
delay = AKDelay(input) // Route audio input into delay node
delayDrMixer = AKDryWetMixer(input, delay) // route input and delay into dry wet mixer
// Master Mixer
mixer = AKMixer(delayDrMixer) // Route audio int final mix node
// Set Output & Start AudioKit
AudioKit.output = mixer // route mix to output
do {
try AudioKit.start()
} catch {
AKLog("Audiokit start failed")
}
Audiobus.start()
}
}