It just playing a simple sound (A note).
var currentPhase = Float(), engine = AVAudioEngine()
func startStop()
{
engine.isRunning ? engine.stop() : try? engine.start()
}
override func viewDidLoad()
{
let twoPi = 2 * Float.pi, frequency = Float(432.0), amplitude = Float(0.5)
let output = engine.outputNode, outputFormat = output.inputFormat(forBus: 0)
let sampleRate = Float(outputFormat.sampleRate)
let inputFormat = AVAudioFormat(commonFormat: outputFormat.commonFormat, sampleRate: outputFormat.sampleRate, channels: 1, interleaved: outputFormat.isInterleaved)
let srcNode = AVAudioSourceNode(renderBlock: { silence, timestamp, frameCount, audioBufferList -> OSStatus in
for frame in 0..<Int(frameCount)
{
audioBufferList.pointee.mBuffers.mData!.storeBytes(of: sin(self.currentPhase) * amplitude, toByteOffset: frame * MemoryLayout<Float>.size, as: Float.self)
self.currentPhase += twoPi / sampleRate * frequency
self.currentPhase += self.currentPhase >= twoPi ? -twoPi : twoPi
}
return noErr
})
engine.attach(srcNode)
engine.connect(srcNode, to: output, format: inputFormat)
engine.prepare()
}
Here is the message on Xcode :
com.apple.audio.IOThread.client (15): EXC_BREAKPOINT (code=1, subcode=0x104e249ec)