Play a sine wave.
import AudioKit
let osc = AKOscillator()
osc.frequency = 440.0
osc.start()
AudioKit.output = osc
AudioKit.start()
Play a simple loop.
class GameScene: SKScene {
let sequencer = AKSequencer()
override func didMove(to view: SKView) {
let osc = AKOscillator()
osc.frequency = 440.0
osc.start()
AudioKit.output = osc
AudioKit.start()
let instrument = AKCallbackInstrument {event, note, _ in
if event == .noteOn {
osc.frequency = note.midiNoteToFrequency()
}
}
// Make sure you have background audio enabled.
let track = self.sequencer.newTrack()!
track.add(
noteNumber: MIDINoteNumber(60),
velocity: MIDIVelocity(100),
position: AKDuration(beats: 0),
duration: AKDuration(beats: 1)
)
track.add(
noteNumber: MIDINoteNumber(63),
velocity: MIDIVelocity(100),
position: AKDuration(beats: 1),
duration: AKDuration(beats: 1)
)
track.setMIDIOutput(instrument.midiIn)
self.sequencer.enableLooping()
self.sequencer.play()
}
}
Get a callback each time a loop repeats
func onEachLoop(sequencer: AKSequencer, callback: @escaping () -> Void) {
let track = sequencer.newTrack("silent callback track")!
let callbackInstrument = AKCallbackInstrument {event, note, _ in
if event == .noteOn {
callback()
}
}
track.add(
noteNumber: MIDINoteNumber(60),
velocity: MIDIVelocity(1),
position: AKDuration(beats:0),
duration: AKDuration(beats: 1)
)
track.setMIDIOutput(callbackInstrument.midiIn)
}
// Usage
onEachLoop(sequencer: self.sequencer) {
track.add(
noteNumber: MIDINoteNumber(Int.random(50...70)),
velocity: MIDIVelocity(0),
position: AKDuration(beats: Double.random(0, 4)),
duration: AKDuration(beats: 1)
)
}