Contact
← Back to Topics

AudioKit

Open-source framework for audio synthesis, processing, and analysis in iOS apps.

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()
    }
}