Voxa.Speech.Sidecar 0.7.2-alpha

This is a prerelease version of Voxa.Speech.Sidecar.
dotnet add package Voxa.Speech.Sidecar --version 0.7.2-alpha
                    
NuGet\Install-Package Voxa.Speech.Sidecar -Version 0.7.2-alpha
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Voxa.Speech.Sidecar" Version="0.7.2-alpha" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Voxa.Speech.Sidecar" Version="0.7.2-alpha" />
                    
Directory.Packages.props
<PackageReference Include="Voxa.Speech.Sidecar" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Voxa.Speech.Sidecar --version 0.7.2-alpha
                    
#r "nuget: Voxa.Speech.Sidecar, 0.7.2-alpha"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Voxa.Speech.Sidecar@0.7.2-alpha
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Voxa.Speech.Sidecar&version=0.7.2-alpha&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Voxa.Speech.Sidecar&version=0.7.2-alpha&prerelease
                    
Install as a Cake Tool

Voxa.Speech.Sidecar (VVL-002)

Expressive, multilingual, voice-cloning local TTS for the Voxa pipeline — the models that don't have a clean .NET/ONNX path (XTTS-v2, OpenVoice, …) — run in a separate process and stream PCM back over a tiny stdio protocol. This is the same out-of-process isolation Voxa.Speech.Piper uses for espeak-ng, so the project stays predominantly .NET: the sidecar is an opt-in heavy tier, not a Python rewrite.

SidecarTtsEngine (.NET, ITextToSpeechEngine)
        │  request JSON line  → stdin
        ▼
   voxa_tts_sidecar  (frozen Python binary / dev script)
        │  {"sample_rate":N}\n  then  [uint32 LE len][PCM16]…  [len 0]  → stdout
        ▼
SidecarTtsEngine yields the PCM frames into the pipeline

Status (what's shipped here vs. deferred)

Shipped (this package): the .NET integration — SidecarTtsEngine (ITextToSpeechEngine), the SidecarProtocol wire format (unit-tested over an in-memory stream), the Sidecar provider descriptor, and the runnable Python sidecar source under sidecar/. The engine works today with a sidecar you point it at. Local voice cloning is wired (VVL-001's deferred slot): the SidecarVoiceCloneProvider (via ResolveCloner) persists a reference clip and returns its path as the voice, which the engine passes to the sidecar as the speaker reference (zero-shot, e.g. XTTS-v2/OpenVoice) — keyless, with the consent gate in the host (Studio).

Deferred (needs a Python build environment + an audio-quality spike — the VVL-002 gate):

  • The frozen, SHA-256-pinned per-platform binaries and their VoxaModelCache catalog + auto-download. No binary is fabricated or pinned here — there is nothing to hash yet. Build one (below) and set Voxa:Sidecar:ExecutablePath, or run the script in dev mode.
  • The model spike: XTTS-v2 vs OpenVoice (quality / latency / licence) to choose the default engine.

⚠️ Heavy tier: a real frozen binary bundles PyTorch and is multi-GB and accelerator-specific. On CPU these models miss the live first-audio budget — their natural home is a Studio generation/voiceover surface (VST), not the low-latency live pipeline, unless on GPU.

Use it

Opt in from your host (it is not registered by the Voxa meta-package):

services.AddVoxa(configuration, voxa => voxa.AddProvider(SidecarDescriptors.Tts));

Dev mode — run the bundled script with your Python (after pip install TTS):

{
  "Voxa": {
    "Tts": "Sidecar",
    "Sidecar": {
      "PythonScript": "sidecar/voxa_tts_sidecar.py",
      "PythonExe": "python",
      "Voice": "default",
      "Language": "en"
    }
  }
}

Production — point at a frozen binary:

{ "Voxa": { "Tts": "Sidecar", "Sidecar": { "ExecutablePath": "/opt/voxa/voxa-tts-sidecar" } } }

Voice may be a voice id or a path to a reference clip for zero-shot cloning (engine-dependent). With Coqui TTS missing, the sidecar falls back to a sine-tone so the protocol stays exercisable.

Build a frozen binary (PyInstaller)

pip install TTS pyinstaller            # XTTS-v2 via Coqui TTS
pyinstaller --onefile --name voxa-tts-sidecar sidecar/voxa_tts_sidecar.py
# → dist/voxa-tts-sidecar  →  set Voxa:Sidecar:ExecutablePath to it

To finish VVL-002, build this per platform/accelerator, host the artifacts, record each SHA-256, and add a pinned VoxaModelArtifact catalog so the cache can verify-and-download them like every other Voxa model.

Wire protocol

  • Request (one JSON line on the sidecar's stdin): {"text","voice","language","sample_rate","mode"}.
  • Response on stdout: one JSON header line {"sample_rate":N} (or {"error":"…"}), then length-prefixed PCM16 frames [uint32 little-endian length][bytes], ended by a zero-length frame.
  • stdout is the binary channel; the sidecar logs to stderr only (and forces binary stdout on Windows).
Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.7.2-alpha 87 7/10/2026
0.7.1-alpha 61 7/10/2026
0.7.0-alpha 70 7/10/2026
0.6.0-alpha 72 6/22/2026