func audioStream() async throws -> AsyncStream<AVAudioPCMBuffer> {
   var outputContinuation: AsyncStream<AVAudioPCMBuffer>.Continuation? = nil
   audioEngine.inputNode.removeTap(onBus: 0)
   audioEngine.inputNode.installTap(onBus: 0, bufferSize: 4096, format: audioEngine.inputNode.outputFormat(forBus: 0)) { (buffer, time) in
      outputContinuation?.yield(buffer)
   }
   audioEngine.prepare()
   try audioEngine.start()

   return AsyncStream(AVAudioPCMBuffer.self, bufferingPolicy: .unbounded) { continuation in
      outputContinuation = continuation
   }
}