Files
LocalAI/backend/go/moss-tts-cpp/cpp/mossttscpp.h
LocalAI [bot] 3bb0d1cb49 feat(backend): add moss-tts-cpp text-to-speech backend (#10860)
* feat(backend): add moss-tts-cpp text-to-speech backend

Add a Go + purego backend wrapping the moss-tts.cpp ggml port of the OpenMOSS
MOSS-TTS-Local v1.5 text-to-speech model (GPT-J local transformer decoded through
MOSS-Audio-Tokenizer-v2), producing 48 kHz stereo audio with optional
reference-audio voice cloning. Mirrors the qwen3-tts-cpp backend: dlopen the
static-ggml shared library, bind the moss-tts.cpp C-API via purego, and serve
the gRPC TTS method. A thin C shim holds the pipeline handle and copies engine
PCM into a Go-freeable buffer.

Wires the CI registration: backend-matrix.yml (CPU, CUDA 12/13, Intel SYCL
f16/f32, Vulkan, ROCm, NVIDIA L4T, plus Darwin metal), backend/index.yaml metas
and image entries pointing at mudler/MOSS-TTS-Local-Transformer-v1.5-GGUF, the
root Makefile build targets, and the changed-backends.js path mapping.

Assisted-by: Claude:claude-opus-4-8 [Claude Code]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* docs: list the moss-tts-cpp backend among the LocalAI-maintained engines

Add moss-tts.cpp to the README "Backends built by us" table, the
Text-to-Speech compatibility table, and the reference-audio voice-cloning
backend list, so the new backend is documented alongside its peers.

Assisted-by: Claude:claude-opus-4-8 [Claude Code]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* backend(moss-tts-cpp): pin moss-tts.cpp to the squashed single-commit release

moss-tts.cpp history was collapsed to a single commit; repoint MOSSTTS_CPP_VERSION
to ee722b8e9205ee9b1b1c398a4e87e4e393e9be41.

Assisted-by: Claude:claude-opus-4-8 [Claude Code]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* backend(moss-tts-cpp): add the moss-tts-cpp-development gallery meta

The gallery had the -development image entries but no matching -development
meta anchor (as locate-anything-cpp and depth-anything-cpp have), so the master
build was not installable as a gallery backend. Add moss-tts-cpp-development
mirroring the production meta with the -development capability image names.

Assisted-by: Claude:claude-opus-4-8 [Claude Code]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
2026-07-17 09:26:12 +02:00

37 lines
1.5 KiB
C

#pragma once
// Thin C shim over moss-tts.cpp's flat C-API (include/moss_tts_capi.h) for the
// MOSS-TTS-Local (v1.5) pipeline. It holds the loaded pipeline as a single
// global handle so the purego bindings on the Go side stay handle-free (mirrors
// the qwen3-tts-cpp qt3_* shim). Only the Local variant is wired here; the
// Delay / Realtime / Nano variants of the upstream API are intentionally
// unused.
extern "C" {
// Load the Local (MossTTSLocal v1.5) pipeline from its three GGUFs: the local
// transformer, the MOSS-Audio-Tokenizer codec, and the text tokenizer. Sets up
// ggml logging + backend registration first. Returns 0 on success, non-zero on
// failure.
int mtl_load(const char *local_path, const char *codec_path,
const char *tokenizer_path);
// Synthesize `text` to a malloc'd interleaved f32 PCM buffer (caller frees via
// mtl_pcm_free). v1.5 output is 48 kHz stereo: *out_n is the total number of
// float samples across both channels (frames * 2) and *out_sr is the sample
// rate. `reference_wav` is an optional path to a clone-reference WAV (may be
// NULL/empty for no cloning); the engine decodes it itself. `seed` < 0 means
// random. Returns NULL on failure (out_n / out_sr set to 0).
float *mtl_tts(const char *text, const char *reference_wav, int seed,
int *out_n, int *out_sr);
// Free a buffer returned by mtl_tts.
void mtl_pcm_free(float *p);
// Release the loaded pipeline.
void mtl_unload(void);
// Upstream engine version string (moss_tts_version()).
const char *mtl_version(void);
}