class MyClass { func playSamples(samples: [Float]) { print("Play \(samples.count) samples") } } func run() { let acousticModel = "./matcha-icefall-en_US-ljspeech/model-steps-3.onnx" let vocoder = "./vocos-22khz-univ.onnx" let tokens = "./matcha-icefall-en_US-ljspeech/tokens.txt" let dataDir = "./matcha-icefall-en_US-ljspeech/espeak-ng-data" let matcha = sherpaOnnxOfflineTtsMatchaModelConfig( acousticModel: acousticModel, vocoder: vocoder, tokens: tokens, dataDir: dataDir ) let modelConfig = sherpaOnnxOfflineTtsModelConfig(matcha: matcha, debug: 0) var ttsConfig = sherpaOnnxOfflineTtsConfig(model: modelConfig) let myClass = MyClass() // We use Unretained here so myClass must be kept alive as the callback is invoked // // See also // https://medium.com/codex/swift-c-callback-interoperability-6d57da6c8ee6 let arg = Unmanaged.passUnretained(myClass).toOpaque() let callback: TtsCallbackWithArg = { samples, n, arg in let o = Unmanaged.fromOpaque(arg!).takeUnretainedValue() var savedSamples: [Float] = [] for index in 0..