Plugin.Maui.Spine.Voice
0.1.33
dotnet add package Plugin.Maui.Spine.Voice --version 0.1.33
NuGet\Install-Package Plugin.Maui.Spine.Voice -Version 0.1.33
<PackageReference Include="Plugin.Maui.Spine.Voice" Version="0.1.33" />
<PackageVersion Include="Plugin.Maui.Spine.Voice" Version="0.1.33" />
<PackageReference Include="Plugin.Maui.Spine.Voice" />
paket add Plugin.Maui.Spine.Voice --version 0.1.33
#r "nuget: Plugin.Maui.Spine.Voice, 0.1.33"
#:package Plugin.Maui.Spine.Voice@0.1.33
#addin nuget:?package=Plugin.Maui.Spine.Voice&version=0.1.33
#tool nuget:?package=Plugin.Maui.Spine.Voice&version=0.1.33
Plugin.Maui.Spine.Voice
Voice for Spine apps. IVoiceSession holds a spoken conversation with a realtime model on the app's server (OpenAI's Realtime models or GPT-Live, OpenAI or Azure OpenAI): a short-lived token or the server's relay instead of a key in the app, a time limit per session, the answer cut off when the user talks over it, a transcript for ChatView, and tools the app answers itself. Under it, the audio engine runs the microphone and the speaker at once, with the platform's echo cancellation, so a realtime voice model does not hear itself. It takes and gives PCM16 at the provider's rate, keeps a playback queue that is cut off at once when the user talks over the answer, and meters both directions into levels and 24 bands for visuals.
iOS and Mac Catalyst now; Android and Windows come next.
dotnet add package Plugin.Maui.Spine.Voice
builder.UseSpineVoice(o => o.SessionEndpoint = new Uri("https://api.example.com/ai"));
await voice.ConnectAsync("Voice"); // IVoiceSession, one per conversation
chat.Messages = voice.Transcript;
voice.Interrupt(); // a Stop button; talking over the answer does the same
await voice.EndAsync();
Text read aloud by a speech feature on the server (Kind: Speech), played without the microphone; Azure Speech's mouth shapes reach an avatar's Speech driver as TimedVisemes:
var speech = services.GetRequiredService<ServerSpeech>(); // an ISpineSpeech
speech.Feature = "Read";
await speech.Speak("Välkommen tillbaka.").Completed;
The engine on its own, for a provider of your own:
var audio = services.GetRequiredService<IVoiceAudio>(); // one per conversation
await audio.StartAsync(new VoiceAudioOptions { InputRate = 24_000, OutputRate = 24_000 });
audio.InputAvailable += pcm16 => socket.Send(pcm16); // the microphone, after echo cancellation
audio.Enqueue(itemId, answerPcm16); // the model's answer
var position = audio.Flush(); // barge-in: cut off, and how far it got
var frame = audio.UpdateFrame(); // on the UI's tick: levels and bands
The app writes NSMicrophoneUsageDescription in Info.plist.
Documentation: Voice.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-android36.0 is compatible. net10.0-browser was computed. net10.0-ios was computed. net10.0-ios26.0 is compatible. net10.0-maccatalyst was computed. net10.0-maccatalyst26.0 is compatible. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. net10.0-windows10.0.19041 is compatible. |
-
net10.0
- Microsoft.Extensions.AI.Abstractions (>= 10.10.1)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.0)
- Plugin.Maui.Spine.AI.Functions (>= 0.1.33)
- Plugin.Maui.Spine.Common (>= 0.1.33)
- Plugin.Maui.Spine.Speech (>= 0.1.33)
-
net10.0-android36.0
- Microsoft.Extensions.AI.Abstractions (>= 10.10.1)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.0)
- Microsoft.Maui.Controls (>= 10.0.50)
- Plugin.Maui.Spine.AI.Functions (>= 0.1.33)
- Plugin.Maui.Spine.Common (>= 0.1.33)
- Plugin.Maui.Spine.Speech (>= 0.1.33)
-
net10.0-ios26.0
- Microsoft.Extensions.AI.Abstractions (>= 10.10.1)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.0)
- Microsoft.Maui.Controls (>= 10.0.50)
- Plugin.Maui.Spine.AI.Functions (>= 0.1.33)
- Plugin.Maui.Spine.Common (>= 0.1.33)
- Plugin.Maui.Spine.Speech (>= 0.1.33)
-
net10.0-maccatalyst26.0
- Microsoft.Extensions.AI.Abstractions (>= 10.10.1)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.0)
- Microsoft.Maui.Controls (>= 10.0.50)
- Plugin.Maui.Spine.AI.Functions (>= 0.1.33)
- Plugin.Maui.Spine.Common (>= 0.1.33)
- Plugin.Maui.Spine.Speech (>= 0.1.33)
-
net10.0-windows10.0.19041
- Microsoft.Extensions.AI.Abstractions (>= 10.10.1)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.0)
- Microsoft.Maui.Controls (>= 10.0.50)
- Plugin.Maui.Spine.AI.Functions (>= 0.1.33)
- Plugin.Maui.Spine.Common (>= 0.1.33)
- Plugin.Maui.Spine.Speech (>= 0.1.33)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Plugin.Maui.Spine.Voice:
| Package | Downloads |
|---|---|
|
Plugin.Maui.Spine.Controls.Avatar
AvatarView for Spine: animated characters and ambient visuals from .spineavatar files, drawn with SkiaSharp (vector scenes and SkSL shaders) and SceneKit (glTF on iOS and Mac Catalyst), driven by the app's state, by text, by speech or by a realtime voice conversation, with Reduce Motion, the app's theme and one screen-reader element. Built-in bars and ring show a voice's sound in and out. |
|
|
Plugin.Maui.Spine.Controls.Voice
VoiceView for Spine.Voice: a voice conversation drawn as it happens, with SkiaSharp. Built-in Orb, duplex Bars, Ring and a simple Avatar that follow the levels, the 24 bands and visemes; a plug-in contract for visuals of your own, drawn on the canvas or hosted in a view of their own. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.33 | 0 | 10/27/2026 |
| 0.1.32 | 0 | 10/27/2026 |
| 0.1.31 | 0 | 10/27/2026 |
| 0.1.30 | 0 | 10/27/2026 |
| 0.1.29 | 31 | 10/26/2026 |
| 0.1.28 | 34 | 10/26/2026 |
| 0.1.27 | 39 | 10/26/2026 |
| 0.1.26 | 92 | 10/24/2026 |
| 0.1.25 | 59 | 10/24/2026 |
| 0.1.24 | 64 | 10/23/2026 |
| 0.1.23 | 58 | 10/23/2026 |
| 0.1.22 | 73 | 10/23/2026 |
| 0.1.21 | 66 | 10/23/2026 |
| 0.1.20 | 64 | 10/23/2026 |
| 0.1.19 | 71 | 10/22/2026 |
| 0.1.18 | 80 | 10/21/2026 |
| 0.1.17 | 97 | 10/20/2026 |
| 0.1.16 | 87 | 10/20/2026 |
| 0.1.15 | 122 | 10/16/2026 |