About AudioKit
AudioKit is an open-source audio framework that simplifies working with sound in iOS apps. It provides high-level abstractions over Core Audio for synthesizing, processing, and analyzing audio, making sophisticated audio applications more accessible to developers.
Key Features
- Audio synthesis
- Audio file playback
- Effects processing
- MIDI support
- Audio analysis
Code Example
// AudioKit example
import AudioKit
import AudioKitUI
class AudioViewController: UIViewController {
var engine: AudioEngine!
var oscillator: OscillatorNode!
var mixer: Mixer!
var reverb: Reverb!
override func viewDidLoad() {
super.viewDidLoad()
setupAudio()
setupUI()
}
func setupAudio() {
// Create engine
engine = AudioEngine()
// Create oscillator
oscillator = OscillatorNode()
oscillator.frequency = 440 // A4 note
oscillator.amplitude = 0.5
// Add reverb effect
reverb = Reverb(oscillator)
reverb.dryWetMix = 0.5
// Connect to engine output
engine.output = reverb
// Start the engine
do {
try engine.start()
} catch {
print("AudioKit error: \(error)")
}
}
func setupUI() {
// Create frequency slider
let frequencySlider = AKSlider(property: "Frequency",
value: oscillator.frequency,
range: 220...880,
format: "%0.1f Hz") { frequency in
self.oscillator.frequency = frequency
}
// Create reverb slider
let reverbSlider = AKSlider(property: "Reverb",
value: reverb.dryWetMix,
range: 0...1,
format: "%0.2f") { mix in
self.reverb.dryWetMix = mix
}
// Create play button
let playButton = UIButton(type: .system)
playButton.setTitle("Play/Stop", for: .normal)
playButton.addTarget(self, action: #selector(toggleSound), for: .touchUpInside)
// Add views to controller
let stackView = UIStackView(arrangedSubviews: [frequencySlider, reverbSlider, playButton])
stackView.axis = .vertical
stackView.spacing = 20
stackView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(stackView)
// Set constraints
NSLayoutConstraint.activate([
stackView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
stackView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
stackView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.8)
])
}
@objc func toggleSound() {
if oscillator.isStarted {
oscillator.stop()
} else {
oscillator.start()
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
engine.stop()
}
}