Shiny.Audio.Linux
3.0.0-beta-0030
Prefix Reserved
dotnet add package Shiny.Audio.Linux --version 3.0.0-beta-0030
NuGet\Install-Package Shiny.Audio.Linux -Version 3.0.0-beta-0030
<PackageReference Include="Shiny.Audio.Linux" Version="3.0.0-beta-0030" />
<PackageVersion Include="Shiny.Audio.Linux" Version="3.0.0-beta-0030" />
<PackageReference Include="Shiny.Audio.Linux" />
paket add Shiny.Audio.Linux --version 3.0.0-beta-0030
#r "nuget: Shiny.Audio.Linux, 3.0.0-beta-0030"
#:package Shiny.Audio.Linux@3.0.0-beta-0030
#addin nuget:?package=Shiny.Audio.Linux&version=3.0.0-beta-0030&prerelease
#tool nuget:?package=Shiny.Audio.Linux&version=3.0.0-beta-0030&prerelease
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-safePipeStream, with runtime permission handling (RequestAccess/AccessState) and a normalizedInputLevelChangedVU signal on every platform.IAudioPlayer— stream / file / URL playback (e.g. MP3) with optional normalizedAudioLevelChangedmetering for VU-style UI. Clips play concurrently:StartAsyncreturns anIAudioPlaybackyou can stop on its own,PlayAsyncwaits for one clip without interrupting the rest, andStopAsyncstops 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, plusAudioEffectProcessorfor 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 | Versions 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. |
-
net10.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.5)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.5)
- NLayer (>= 2.0.1)
- Shiny.Audio (>= 3.0.0-beta-0030)
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 |
|---|---|---|
| 3.0.0-beta-0030 | 67 | 8/15/2026 |
| 3.0.0-beta-0029 | 63 | 8/8/2026 |
| 3.0.0-beta-0028 | 63 | 8/7/2026 |
| 3.0.0-beta-0027 | 56 | 8/5/2026 |
| 3.0.0-beta-0026 | 62 | 8/5/2026 |
| 3.0.0-beta-0024 | 64 | 8/5/2026 |
| 3.0.0-beta-0023 | 61 | 8/5/2026 |
| 3.0.0-beta-0022 | 70 | 8/2/2026 |
| 3.0.0-beta-0021 | 62 | 7/31/2026 |
| 3.0.0-beta-0020 | 67 | 7/30/2026 |
| 3.0.0-beta-0019 | 62 | 7/30/2026 |