Skip to main content
audio.cpp ist ein lokaler C++-Inferenzserver für Audio auf Basis von ggml: Text-to-Speech, Speech-to-Text, Alignment, Diarisierung, Separation und mehr, über 80+ Modellfamilien hinweg. GoModel hat dafür einen eigenen Provider-Typ audiocpp. Es handelt sich um einen reinen Audio-Provider. /v1/audio/speech und /v1/audio/transcriptions werden zu ihm geroutet; Chat, /responses und /v1/embeddings liefern invalid_request_error, weil audiocpp_server keine solchen Endpunkte hat. Starten Sie zuerst den Server mit einer Konfiguration, die die bereitgestellten Modelle benennt:

Konfiguration

Die Basis-URL ist erforderlich und registriert den Provider — der Standardport von audiocpp_server (8080) kollidiert mit dem von GoModel, daher gibt es keinen Standardwert:
AUDIOCPP_API_KEY ist optional und in der Regel nicht gesetzt: audio.cpp hat keine eigene Authentifizierung. Setzen Sie ihn nur, wenn ein Reverse Proxy vor dem Server ein Bearer-Token erwartet.
Diese Beispiele gehen davon aus, dass GoModel in Docker läuft und audio.cpp auf dem Host — daher host.docker.internal. Läuft GoModel direkt auf dem Host, verwenden Sie http://localhost:8099. Ein abschließendes /v1 wird akzeptiert und entfernt, sodass beide Schreibweisen denselben Server ansprechen. Sie betreiben mehrere Instanzen? Registrieren Sie jede unter einem Namen mit Suffix: AUDIOCPP_GPU_BASE_URL=... erzeugt den Provider audiocpp-gpu.

Überprüfen

Stimmen sind audio.cpp-Namen, keine OpenAI-Namen

voice benennt ein Stimm-Preset von audio.cpp, eine gecachte Voice-ID oder eine WAV-Datei in der konfigurierten Stimmbibliothek — audio.cpp hat keinen festen Stimmensatz, daher bedeuten OpenAIs alloy/nova/… für audio.cpp nichts. Welche Stimmen ein Modell anbietet, listen Sie mit GET /p/audiocpp/audio/voices?model=<id> auf. voice ist bei /v1/audio/speech erforderlich, wie in der OpenAI-API. Damit audio.cpp stattdessen das konfigurierte default_voice_preset eines Modells anwendet, rufen Sie die Route über Passthrough auf: POST /p/audiocpp/audio/speech. Parameter für das Klonen von Stimmen (voice_ref, reference_text, seed, max_tokens, options, …) werden unverändert weitergeleitet, sodass die eigenen Request-Felder von audio.cpp über den Standard-Endpunkt funktionieren — mit einer Ausnahme: eine voice_ref, die einen serverseitigen Pfad benennt (siehe unten):

Audioformate

Die Synthese liefert WAV zurück, unabhängig davon, welches response_format angefordert wurde, es sei denn, der Server wurde mit dem MP3-Frontend-Modul gebaut. Die Response wird mit dem Typ gekennzeichnet, den audio.cpp tatsächlich zurückgegeben hat (audio/wav), nicht mit dem angeforderten. Uploads für Transkriptionen müssen WAV sein; der Server lehnt andere Container ab, es sei denn, er wurde mit dem Frontend-Modul audio_decode gebaut, das MP3 und FLAC hinzufügt.

Transkribieren ohne Upload

audio.cpp kann Audio auch von dem Rechner lesen, auf dem es läuft, und seine Live-Route überträgt rohes PCM ganz ohne Datei. Keine dieser beiden Formen wird auf /v1/audio/transcriptions angeboten: Beide lassen den Aufrufer bestimmen, was der audio.cpp-Host liest bzw. wie lange er ein Modell belegt, und die Berechtigung für ein Modell ist keine Berechtigung für eines davon. Sie bleiben auf der unten beschriebenen nativen Oberfläche, die ein Betreiber bewusst aktiviert und nur vertrauenswürdigen Aufrufern zugänglich macht. Aus demselben Grund muss eine voice_ref auf /v1/audio/speech Inline-Audio als Base64 enthalten; {"type": "path"} und ein reiner Pfad-String werden abgelehnt und sind nur über Passthrough verfügbar.

Streaming

Für ein Modell, das mit "mode": "streaming" konfiguriert ist, liefert stream=true die OpenAI-artigen Transkript-Events von audio.cpp (transcript.text.delta, transcript.text.done, [DONE]). GoModel gibt den Event-Stream unverändert weiter, liest ihn aber zuvor vollständig ein; das verkürzt also durchgängig nichts — erst die unten beschriebene Live-Route gibt Text aus, während der Sprecher noch spricht.

Native Endpunkte

Die Routen von audio.cpp ohne OpenAI-Entsprechung sind über Passthrough unter /p/audiocpp/... erreichbar, sobald ein Betreiber dies explizit aktiviert:
Anders als bei den meisten Provider-Typen ist dies standardmäßig nicht aktiviert: Diese Oberfläche ist undurchsichtig, ein Request, der sie erreicht, wird also nicht gegen die Modell-Allowlist des Aufrufers geprüft, und audio.cpp stellt dort Modellverwaltung (/models/load, /tasks/unload_models) und serverlokale Dateipfade bereit. Aktivieren Sie sie nur für vertrauenswürdige Aufrufer. Das Präfix /v1 ist optional (/p/audiocpp/audio/voices und /p/audiocpp/v1/audio/voices sind dieselbe Route); /health wird vom Server-Root bereitgestellt. Die Live-Route transkribiert Sprache bereits während der Aufnahme — es gibt keine Datei, und das Audio muss nie auf der Festplatte existieren:
-T - sorgt dafür, dass es live bleibt: --data-binary @- liest stdin vollständig ein, bevor die Verbindung geöffnet wird, und macht die Aufnahme damit wieder zu einem Datei-Upload. Ob Teiltext während der Aufnahme erscheint, ist eine Eigenschaft des Modells, nicht der Route.

Modell-Metadaten

GET /v1/models meldet, was audio.cpp über jedes konfigurierte Modell angibt:
  • Family — die Modellfamilie von audio.cpp (pocket_tts, moonshine_asr, …).
  • Mode — audio_speech für ein tts-Modell und audio_transcription für ein asr-Modell. Modelle, die für andere Aufgaben registriert sind (align, Diarisierung, Separation, …), bleiben ohne Modus gelistet: GoModel hat keinen Endpunkt, zu dem es sie routen könnte; sie werden stattdessen über Passthrough erreicht.
  • Capabilities — streaming für ein Modell, das mit "mode": "streaming" konfiguriert ist.
Das sind Standardwerte, keine Festlegungen: Alles, was Sie in den Modell-Metadaten des Providers deklarieren, hat Vorrang — siehe Modell-Metadaten.
Zuletzt geändert am 24. Oktober 2026