ElBruno.Speech.Abstractions 0.5.4

dotnet add package ElBruno.Speech.Abstractions --version 0.5.4
                    
NuGet\Install-Package ElBruno.Speech.Abstractions -Version 0.5.4
                    
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="ElBruno.Speech.Abstractions" Version="0.5.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ElBruno.Speech.Abstractions" Version="0.5.4" />
                    
Directory.Packages.props
<PackageReference Include="ElBruno.Speech.Abstractions" />
                    
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 ElBruno.Speech.Abstractions --version 0.5.4
                    
#r "nuget: ElBruno.Speech.Abstractions, 0.5.4"
                    
#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 ElBruno.Speech.Abstractions@0.5.4
                    
#: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=ElBruno.Speech.Abstractions&version=0.5.4
                    
Install as a Cake Addin
#tool nuget:?package=ElBruno.Speech.Abstractions&version=0.5.4
                    
Install as a Cake Tool

ElBruno.Speech

ElBruno.Speech Banner

NuGet NuGet Downloads Build Status License: MIT .NET GitHub stars Twitter Follow

Local-first speech runtime for .NET — VAD → STT → LLM → TTS 🎙️

A reusable, local-first speech runtime for .NET 8 and .NET 10. Built on Microsoft.Extensions.AI provider boundaries — works with local models (Whisper, VibeVoice, Qwen-TTS, Ollama) and cloud providers (Azure OpenAI, OpenAI) without changing orchestration code.

Audio input
    ↓
Audio normalization · resampling · framing · buffering
    ↓
Voice Activity Detection (Silero VAD)
    ↓
Turn detection · utterance assembly
    ↓
ISpeechToTextClient
    ↓
IChatClient
    ↓
Streaming text segmentation
    ↓
ITextToSpeechClient
    ↓
Audio output

Packages

Package NuGet Downloads Description
ElBruno.Speech.Abstractions NuGet Downloads Audio types, VAD contracts, session interfaces, error types
ElBruno.Speech.Audio NuGet Downloads WAV I/O, PCM conversion, resampling, framing, ring buffers
ElBruno.Speech.Vad.Silero NuGet Downloads Silero VAD via ONNX Runtime — streaming voice activity detection
ElBruno.Speech.Pipeline NuGet Downloads VAD → STT → LLM → TTS orchestration, bounded channels, barge-in
ElBruno.Speech.AspNetCore NuGet Downloads WebSocket endpoint, session registry, health checks
ElBruno.Speech.NAudio NuGet Downloads Windows microphone and speaker via NAudio
ElBruno.Speech.OpenTelemetry NuGet Downloads Activities, metrics, Aspire-compatible instrumentation
ElBruno.Speech.Cli NuGet Downloads elbrunospeech dotnet tool

Installation

dotnet add package ElBruno.Speech.Pipeline
dotnet add package ElBruno.Speech.Vad.Silero

Install the CLI tool globally:

dotnet tool install -g ElBruno.Speech.Cli
elbrunospeech --help

Quick Start

// Register providers
services.AddWhisper(o => o.Model = KnownWhisperModels.WhisperBaseEn);
services.AddLocalLLMs(o => o.Model = KnownModels.Phi35MiniInstruct);
services.AddVibeVoiceTTS(o => o.SampleRate = 24_000);
services.AddSileroVad(o => o.MinimumSilenceDuration = TimeSpan.FromMilliseconds(500));

// Build the pipeline
services.AddSpeechPipeline(builder =>
{
    builder
        .UseVoiceActivityDetector<SileroVoiceActivityDetector>()
        .UseSpeechToText(sp => sp.GetRequiredService<ISpeechToTextClient>())
        .UseChatClient(sp => sp.GetRequiredService<IChatClient>())
        .UseTextToSpeech(sp => sp.GetRequiredService<ITextToSpeechClient>())
        .UseSentenceChunking(o =>
        {
            o.MinimumCharacters = 24;
            o.MaximumCharacters = 220;
            o.FlushTimeout = TimeSpan.FromMilliseconds(350);
        })
        .UseBargeIn(o => o.CancelOnSpeechStart = true);
});

// Use it
var pipeline = sp.GetRequiredService<ISpeechPipeline>();
await using var session = await pipeline.CreateSessionAsync();

await session.WriteAudioAsync(frame);
await foreach (var update in session.GetUpdatesAsync())
{
    // SpeechStartedUpdate, FinalTranscriptUpdate, AssistantAudioChunkUpdate, ...
}

CLI Tool

elbrunospeech devices                        # list audio input/output devices
elbrunospeech transcribe recording.wav       # transcribe a WAV file
elbrunospeech vad recording.wav             # run voice activity detection
elbrunospeech talk "Hello world" out.wav    # synthesize text to WAV

Observability

builder.Services.AddOpenTelemetry()
    .AddSpeechPipelineTelemetry();           // meter: ElBruno.Speech, source: ElBruno.Speech
// Aspire automatically configures OTLP export via OTEL_EXPORTER_OTLP_ENDPOINT

Samples

Sample Description
FileToSpeech WAV file → transcript → answer → WAV output
LocalVoiceAgent Microphone → VAD → Whisper → LLM → VibeVoice → speaker (barge-in)
WebSocketVoiceAgent ASP.NET Core WebSocket endpoint + browser client
AspireVoiceAgent Full Aspire AppHost with tracing, metrics, and dashboard


Requirements

  • .NET 8.0 or .NET 10.0
  • Windows, Linux, or macOS
  • NAudio package requires Windows (microphone/speaker I/O)

Building from Source

git clone https://github.com/elbruno/ElBruno.Speech.git
cd ElBruno.Speech
dotnet restore
dotnet build
dotnet test --filter "Category!=Integration"

📄 License

MIT — see LICENSE.


👋 About the Author

Hi! I'm ElBruno 🧡, a passionate developer and content creator exploring AI, .NET, and modern development practices.

Made with ❤️ by ElBruno

If you like this project, consider following my work across platforms:

  • 📻 Podcast: No Tienen Nombre — Spanish-language episodes on AI, development, and tech culture
  • 💻 Blog: ElBruno.com — Deep dives on embeddings, RAG, .NET, and local AI
  • 📺 YouTube: youtube.com/elbruno — Demos, tutorials, and live coding
  • 🔗 LinkedIn: @elbruno — Professional updates and insights
  • 𝕏 Twitter: @elbruno — Quick tips, releases, and tech news

🙏 Acknowledgments

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  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 (6)

Showing the top 5 NuGet packages that depend on ElBruno.Speech.Abstractions:

Package Downloads
ElBruno.Speech.Audio

Audio primitives for ElBruno.Speech — WAV I/O, PCM conversion, resampling, framing, and ring buffers.

ElBruno.Speech.Pipeline

Speech pipeline orchestration for ElBruno.Speech — VAD → STT → LLM → TTS with bounded channels, barge-in, and session management.

ElBruno.Speech.AspNetCore

ASP.NET Core integration for ElBruno.Speech — WebSocket endpoint, session registry, health checks, and protocol handling.

ElBruno.Speech.NAudio

Windows audio I/O for ElBruno.Speech via NAudio — microphone input, speaker output, and device enumeration.

ElBruno.Speech.Vad.Silero

Silero VAD provider for ElBruno.Speech — ONNX Runtime inference, stateful streaming voice activity detection.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.5.4 151 7/21/2026
0.5.3 212 7/5/2026
0.5.2 213 7/3/2026
0.5.1 214 7/3/2026
0.5.0 213 7/3/2026