VeloxVox 1.0.1
dotnet add package VeloxVox --version 1.0.1
NuGet\Install-Package VeloxVox -Version 1.0.1
<PackageReference Include="VeloxVox" Version="1.0.1" />
<PackageVersion Include="VeloxVox" Version="1.0.1" />
<PackageReference Include="VeloxVox" />
paket add VeloxVox --version 1.0.1
#r "nuget: VeloxVox, 1.0.1"
#:package VeloxVox@1.0.1
#addin nuget:?package=VeloxVox&version=1.0.1
#tool nuget:?package=VeloxVox&version=1.0.1
VeloxVox
VeloxVox is a high-performance, modern audio playback and Text-To-Speech (TTS) engine for .NET on Windows. Built on the robust foundations of LibVLCSharp and System.Speech, it's designed for speed, responsiveness, and a simple, intuitive API. Whether you're adding voice notifications to a desktop app or building a complex audio queuing system, VeloxVox provides a solid and extensible solution.
Features
- 🚀 High Performance: Asynchronous-first design with a background processing queue ensures your application's UI remains responsive, even during audio synthesis or playback.
- 🗣️ High-Quality TTS: Integrated Text-To-Speech powered by the native
System.Speechsynthesizer, with easy options to control voice, rate, and volume. - 🎶 Versatile Playback: Leverages the power of LibVLC to play a vast range of audio formats from local files, network streams, and URLs. All in a headless mode with no visible UI.
- 🔌 Pluggable Architecture: Easily replace the default audio player or TTS engine with your own implementation by conforming to simple interfaces (
IAudioPlayer,ITtsEngine). - ✨ Fluent Configuration: A clean, fluent builder API (
VeloxVoxBuilder) for setting up your audio engine exactly how you need it. - 🔔 Rich Events: Subscribe to events for key playback states like
QueueItemStarted,QueueItemCompleted, andQueueItemFailedto build interactive experiences.
Installation
Install the package from NuGet Package Manager or via the .NET CLI:
dotnet add package VeloxVox
Note: VeloxVox targets Windows and relies on
System.Speechand native VLC libraries.
Quick Start
The easiest way to start is by using the VeloxVoxBuilder. This example creates an engine and says "Hello, World!".
using VeloxVox;
// In your async Main method or an event handler
public static async Task Main(string[] args)
{
Console.WriteLine("Initializing VeloxVox...");
// 1. Build the engine. `await using` ensures it's properly disposed.
await using var engine = await new VeloxVoxBuilder().BuildAsync();
// 2. Enqueue text to be spoken.
await engine.EnqueueTtsAsync("Hello, VeloxVox! Playback is starting now.");
Console.WriteLine("TTS enqueued. Press any key to exit.");
Console.ReadKey(); // Keep the app alive to hear the sound.
}
Enqueuing Different Audio Sources
VeloxVox manages a queue, allowing you to add audio from multiple sources sequentially.
await using var engine = await new VeloxVoxBuilder().BuildAsync();
// 1. Enqueue Text-To-Speech with custom options
await engine.EnqueueTtsAsync(
"First, we play this message with a faster voice.",
new() { Rate = 3 } // Rate can be from -10 to 10
);
// 2. Enqueue an audio file from the internet
engine.EnqueueUrl("https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3");
// 3. Enqueue a local file
string localFilePath = @"C:\path\to\your\audio.wav";
if (File.Exists(localFilePath))
{
engine.EnqueueFile(localFilePath);
}
Console.WriteLine("Audio queue is populated. Playback will proceed in order.");
Console.ReadKey();
Using with Dependency Injection
VeloxVox is fully compatible with DI containers. This is the recommended approach for larger applications.
1. Register VeloxVox Services
In your Program.cs or Startup.cs:
using Microsoft.Extensions.DependencyInjection;
using VeloxVox;
using VeloxVox.Abstractions; // For ILogger if you use it
// ...
var services = new ServiceCollection();
// 1. Build the engine once and register it as a singleton.
// This is important as it manages a single audio output.
var veloxVoxEngine = await new VeloxVoxBuilder().BuildAsync();
services.AddSingleton(veloxVoxEngine);
// 2. Register your services that will use the engine
services.AddTransient<MyAudioNotificationService>();
var serviceProvider = services.BuildServiceProvider();
// Remember to dispose the engine when the application shuts down
// If using a host builder, this can be handled in application stopping events.
// await serviceProvider.GetRequiredService<VeloxVoxEngine>().DisposeAsync();
2. Inject VeloxVoxEngine into Your Services
public class MyAudioNotificationService
{
private readonly VeloxVoxEngine _audioEngine;
public MyAudioNotificationService(VeloxVoxEngine audioEngine)
{
_audioEngine = audioEngine;
}
public async Task NotifyUser(string message)
{
_audioEngine.ClearQueue(); // Clear any previous notifications
await _audioEngine.EnqueueTtsAsync($"Attention! {message}");
}
}
Configuration In-Depth
The VeloxVoxBuilder gives you full control over the engine's components.
// Example of swapping out backends
var myCustomPlayer = new MyCustomAudioPlayer();
var myCustomTts = new MyCloudBasedTtsEngine();
await using var engine = await new VeloxVoxBuilder()
.WithAudioPlayer(myCustomPlayer) // Provide your own IAudioPlayer backend
.WithTtsEngine(myCustomTts) // Provide your own ITtsEngine backend
.BuildAsync();
Handling Events
You can build a rich, interactive UI by subscribing to the engine's events.
engine.QueueItemStarted += (sender, args) =>
{
Console.WriteLine($"[EVENT] Now Playing: {args.Item.SourcePath}");
};
engine.QueueItemCompleted += (sender, args) =>
{
Console.WriteLine($"[EVENT] Finished: {args.Item.SourcePath} (Reason: {args.Reason})");
};
engine.QueueEmpty += (sender, args) =>
{
Console.WriteLine($"[EVENT] The playback queue is now empty.");
};
Contributing
Contributions are welcome! If you find a bug, have a feature request, or want to improve the code, please feel free to open an issue or submit a pull request.
License
This project is licensed under the MIT License. See the LICENSE file for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0-windows7.0 is compatible. net9.0-windows was computed. net9.0-windows7.0 is compatible. net10.0-windows was computed. |
-
net8.0-windows7.0
- LibVLCSharp (>= 3.9.4)
- System.Speech (>= 9.0.8)
- VideoLAN.LibVLC.Windows (>= 3.0.21)
-
net9.0-windows7.0
- LibVLCSharp (>= 3.9.4)
- System.Speech (>= 9.0.8)
- VideoLAN.LibVLC.Windows (>= 3.0.21)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
1.0.1 Documentation fixes