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