diff --git a/sherpa-onnx/c-api/c-api.cc b/sherpa-onnx/c-api/c-api.cc index 407b359a..88ed22f4 100644 --- a/sherpa-onnx/c-api/c-api.cc +++ b/sherpa-onnx/c-api/c-api.cc @@ -636,6 +636,32 @@ const SherpaOnnxGeneratedAudio *SherpaOnnxOfflineTtsGenerateWithCallback( return ans; } +const SherpaOnnxGeneratedAudio *SherpaOnnxOfflineTtsGenerateWithCallbackWithArg( + const SherpaOnnxOfflineTts *tts, const char *text, int32_t sid, float speed, + SherpaOnnxGeneratedAudioCallbackWithArg callback, void *arg) { + auto wrapper = [callback, arg](const float *samples, int32_t n) { + callback(samples, n, arg); + }; + + sherpa_onnx::GeneratedAudio audio = + tts->impl->Generate(text, sid, speed, wrapper); + + if (audio.samples.empty()) { + return nullptr; + } + + SherpaOnnxGeneratedAudio *ans = new SherpaOnnxGeneratedAudio; + + float *samples = new float[audio.samples.size()]; + std::copy(audio.samples.begin(), audio.samples.end(), samples); + + ans->samples = samples; + ans->n = audio.samples.size(); + ans->sample_rate = audio.sample_rate; + + return ans; +} + void SherpaOnnxDestroyOfflineTtsGeneratedAudio( const SherpaOnnxGeneratedAudio *p) { if (p) { diff --git a/sherpa-onnx/c-api/c-api.h b/sherpa-onnx/c-api/c-api.h index 62b2f4dc..2163a414 100644 --- a/sherpa-onnx/c-api/c-api.h +++ b/sherpa-onnx/c-api/c-api.h @@ -644,6 +644,9 @@ SHERPA_ONNX_API typedef struct SherpaOnnxGeneratedAudio { typedef void (*SherpaOnnxGeneratedAudioCallback)(const float *samples, int32_t n); +typedef void (*SherpaOnnxGeneratedAudioCallbackWithArg)(const float *samples, + int32_t n, void *arg); + SHERPA_ONNX_API typedef struct SherpaOnnxOfflineTts SherpaOnnxOfflineTts; // Create an instance of offline TTS. The user has to use DestroyOfflineTts() @@ -678,6 +681,13 @@ SherpaOnnxOfflineTtsGenerateWithCallback( const SherpaOnnxOfflineTts *tts, const char *text, int32_t sid, float speed, SherpaOnnxGeneratedAudioCallback callback); +// Same as SherpaOnnxGeneratedAudioCallback but you can pass an additional +// `void* arg` to the callback. +SHERPA_ONNX_API const SherpaOnnxGeneratedAudio * +SherpaOnnxOfflineTtsGenerateWithCallbackWithArg( + const SherpaOnnxOfflineTts *tts, const char *text, int32_t sid, float speed, + SherpaOnnxGeneratedAudioCallbackWithArg callback, void *arg); + SHERPA_ONNX_API void SherpaOnnxDestroyOfflineTtsGeneratedAudio( const SherpaOnnxGeneratedAudio *p); diff --git a/sherpa-onnx/python/csrc/faked-alsa.cc b/sherpa-onnx/python/csrc/faked-alsa.cc index 7325ce17..26ce28ff 100644 --- a/sherpa-onnx/python/csrc/faked-alsa.cc +++ b/sherpa-onnx/python/csrc/faked-alsa.cc @@ -43,5 +43,3 @@ void PybindAlsa(py::module *m) { } } // namespace sherpa_onnx - -#endif // SHERPA_ONNX_PYTHON_CSRC_FAKED_ALSA_H_