Shiny.Audio 3.0.0-beta-0030

Prefix Reserved
This is a prerelease version of Shiny.Audio.
dotnet add package Shiny.Audio --version 3.0.0-beta-0030
                    
NuGet\Install-Package Shiny.Audio -Version 3.0.0-beta-0030
                    
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="Shiny.Audio" Version="3.0.0-beta-0030" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Shiny.Audio" Version="3.0.0-beta-0030" />
                    
Directory.Packages.props
<PackageReference Include="Shiny.Audio" />
                    
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 Shiny.Audio --version 3.0.0-beta-0030
                    
#r "nuget: Shiny.Audio, 3.0.0-beta-0030"
                    
#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 Shiny.Audio@3.0.0-beta-0030
                    
#: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=Shiny.Audio&version=3.0.0-beta-0030&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Shiny.Audio&version=3.0.0-beta-0030&prerelease
                    
Install as a Cake Tool

Shiny.Audio

Cross-platform audio capture and playback for .NET MAUI, iOS, Mac Catalyst, macOS, Android, Windows, Browser (WebAssembly), and Linux (via the companion Shiny.Audio.Linux package).

Shiny.Audio provides the low-level audio primitives that back Shiny.Speech, but is usable on its own:

  • IAudioSource — microphone capture that streams raw PCM audio (16kHz, 16-bit, mono) via a thread-safe PipeStream, with runtime permission handling (RequestAccess / AccessState) and a normalized InputLevelChanged VU signal on every platform.
  • IAudioPlayer — stream / file / URL playback (e.g. MP3) with optional normalized AudioLevelChanged metering for VU-style UI. Clips play concurrently: StartAsync returns an IAudioPlayback you can stop on its own, PlayAsync waits for one clip without interrupting the rest, and StopAsync stops the lot.
  • IAudioRecorder — record the microphone straight to a WAV file, optionally through a live effect chain, capturing the processed take, the raw one, or both.
  • AudioEffectChain — real-time DSP on capture (pitch shift, echo, reverb, filters, distortion, ring modulation, chorus, gain, noise gate) that you toggle and re-tune while recording.
  • AudioLevel — the shared dBFS mapping behind every meter (FromRms / FromPcm16 / FromSamples), so input and output bars read on the same scale — including PCM you meter yourself.
  • WavWriter / WavReader — streaming RIFF/WAVE PCM I/O, plus AudioEffectProcessor for applying an effect chain to a file that already exists.

Getting Started

using Shiny;

builder.Services.AddAudioServices(); // registers IAudioSource, IAudioPlayer, IAudioRecorder, ...
using Shiny.Audio;

public class Recorder(IAudioSource audioSource)
{
    public async Task RecordAsync(CancellationToken ct)
    {
        if (await audioSource.RequestAccess() != AccessState.Available)
            return;

        var pcmStream = await audioSource.StartCaptureAsync(cancellationToken: ct);
        // consume pcmStream ...
        await audioSource.StopCaptureAsync();
    }
}

Effects & recording

Effects are caller-owned objects. Build a chain, hand it to a capture or recording session, and keep the reference — toggling an effect or moving a parameter applies on the next audio buffer, with no restart and no clicks.

using Shiny.Audio;

var chain = new AudioEffectChain();
var pitch = chain.Add(new PitchShiftEffect { Semitones = 0 });
var echo  = chain.Add(new EchoEffect { Enabled = false });

await recorder.StartAsync(new AudioRecordingOptions
{
    Mode = AudioRecordMode.Both,   // writes the processed and the raw take
    Effects = chain
});

pitch.Semitones = 5;      // heard immediately
echo.Enabled = true;
chain.Enabled = false;    // master bypass

var recording = await recorder.StopAsync();

Available effects: GainEffect, NoiseGateEffect, BiquadFilterEffect, DistortionEffect, RingModEffect, EchoEffect, ChorusEffect, ReverbEffect, PitchShiftEffect — plus AudioEffectPresets.Create(...) for ready-made combinations (Robot, Chipmunk, DeepVoice, Cathedral, Telephone, Megaphone, Ensemble).

Do not put effects on audio bound for speech recognition — they destroy recognition and wake-word accuracy.

Platform Audio Capture Audio Playback
iOS 15+ AVAudioEngine AVAudioPlayer
Android 26+ AudioRecord MediaPlayer
Windows 10 19041+ AudioGraph MediaPlayer
Browser (WASM) Web Audio API (getUserMedia + ScriptProcessorNode) HTML5 Audio
Linux PulseAudio / PipeWire (pa_simple), ALSA fallback PulseAudio / PipeWire (pa_simple), ALSA fallback

Linux

Linux ships as a separate Shiny.Audio.Linux package (it carries a managed MP3 decoder, since Linux has no system decoder to call). Add it and register before anything else:

builder.Services.AddLinuxAudio();   // no-op when not running on Linux

It supplies all four services — IAudioSource, IAudioPlayer, IAudioDevices and IAudioMonitor — over PulseAudio/PipeWire, falling back to ALSA on headless systems and containers.

See https://shinylib.net/speech for full documentation.

Product 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-macos26.0 is compatible.  net10.0-tvos was computed.  net10.0-windows was computed.  net10.0-windows10.0.19041 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on Shiny.Audio:

Package Downloads
Shiny.Speech

Shiny Speech - Cross-platform speech-to-text and text-to-speech for .NET MAUI

Shiny.Audio.Linux

Shiny Audio for Linux - microphone capture, playback, device enumeration and live mic monitoring over PulseAudio/PipeWire with an ALSA fallback

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
3.0.0-beta-0030 180 8/15/2026
3.0.0-beta-0029 167 8/8/2026
3.0.0-beta-0028 163 8/7/2026
3.0.0-beta-0027 164 8/5/2026
3.0.0-beta-0026 162 8/5/2026
3.0.0-beta-0024 164 8/5/2026
3.0.0-beta-0023 160 8/5/2026
3.0.0-beta-0022 181 8/2/2026
3.0.0-beta-0021 171 7/31/2026
3.0.0-beta-0020 155 7/30/2026
3.0.0-beta-0019 160 7/30/2026
3.0.0-beta-0018 182 7/27/2026
3.0.0-beta-0017 156 7/26/2026
3.0.0-beta-0016 154 7/24/2026
3.0.0-beta-0015 148 7/23/2026
3.0.0-beta-0014 187 7/11/2026
3.0.0-beta-0013 167 7/10/2026
3.0.0-beta-0012 159 7/9/2026
3.0.0-beta-0011 158 7/9/2026
3.0.0-beta-0009 165 7/8/2026
Loading failed