class MyClass { func playSamples(samples: [Float]) { print("Play \(samples.count) samples") } } func run() { let model = "./kokoro-en-v0_19/model.onnx" let voices = "./kokoro-en-v0_19/voices.bin" let tokens = "./kokoro-en-v0_19/tokens.txt" let dataDir = "./kokoro-en-v0_19/espeak-ng-data" let kokoro = sherpaOnnxOfflineTtsKokoroModelConfig( model: model, voices: voices, tokens: tokens, dataDir: dataDir ) let modelConfig = sherpaOnnxOfflineTtsModelConfig(kokoro: kokoro, 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..