FS.GG.Audio.Core
0.3.0
Prefix Reserved
See the version list below for details.
dotnet add package FS.GG.Audio.Core --version 0.3.0
NuGet\Install-Package FS.GG.Audio.Core -Version 0.3.0
<PackageReference Include="FS.GG.Audio.Core" Version="0.3.0" />
<PackageVersion Include="FS.GG.Audio.Core" Version="0.3.0" />
<PackageReference Include="FS.GG.Audio.Core" />
paket add FS.GG.Audio.Core --version 0.3.0
#r "nuget: FS.GG.Audio.Core, 0.3.0"
#:package FS.GG.Audio.Core@0.3.0
#addin nuget:?package=FS.GG.Audio.Core&version=0.3.0
#tool nuget:?package=FS.GG.Audio.Core&version=0.3.0
FS.GG.Audio.Core
The pure request vocabulary at the bottom of the FS.GG.Audio
component. A product's update emits AudioEffect values — data only, no device handles, no
effectful closures — and a record-only interpreter folds a batch into AudioEvidence. BCL-only:
FSharp.Core is the single dependency.
Playing those values through a real device is the job of
FS.GG.Audio.Host; mixing them is
FS.GG.Audio.Engine.
Install
dotnet add package FS.GG.Audio.Core
Quick start
open FS.GG.Audio.Core
// A pure update emits requests; it never plays sound.
let update model =
model, [ Audio.playMusic (TrackId "bgm") true
Audio.playSfx (SoundId "jump") 0.8
Audio.setBusVolume Sfx 0.5 ]
// The record-only interpreter turns a batch into evidence.
let evidence = Audio.interpret (snd (update ()))
// evidence.Requested : AudioEffect list, in dispatch order
Surface
SoundId/TrackId— opaque, product-owned asset ids. The library never owns the id→asset map.Bus—Master | Music | Sfx | Ui | Ambient.Masterscales every other bus.AudioEffect—PlaySfx,PlayMusic,StopMusic,SetMasterVolume,PlaySfx3D,SetBusVolume,Duck.Audio.playSfx/playMusic/stopMusic/setMasterVolume/playSfx3D/setBusVolume/duck— smart constructors that clamp carried gains into[0.0, 1.0]at the boundary.Audio.record/Audio.interpret— the pure interpreter producingAudioEvidence.
Every function is total: volumes clamp rather than throw (nan clamps to minVolume), and no
call opens a device or blocks.
Determinism
The recorded evidence is the proof. Because nothing here touches hardware, audio behaviour is
asserted headless — identical inputs produce identical AudioEvidence.
License
MIT — see LICENSE.
| 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
- FSharp.Core (>= 10.1.301)
NuGet packages (7)
Showing the top 5 NuGet packages that depend on FS.GG.Audio.Core:
| Package | Downloads |
|---|---|
|
FS.GG.UI.SkiaViewer
Skia viewer host workflow contracts for FS.GG.UI V3 products. |
|
|
FS.GG.Audio.Host
Host-side playback for FS.GG.Audio.Core — a pluggable IAudioBackend with a deterministic Null/record backend and a real OpenAL (Silk.NET) device backend that degrades to Null when no device is present. Redistributes the OpenAL Soft native library (LGPL-2.0-or-later) as a separate, dynamically-linked, replaceable shared library — see THIRD-PARTY-NOTICES.md in this package. |
|
|
FS.GG.UI.Controls.Elmish
Elmish command, subscription, and program adapters for Controls and KeyboardInput runtime effects. |
|
|
FS.GG.UI.Elmish
Elmish adapter contracts for FS.GG.UI V3 products. |
|
|
FS.GG.UI.Symbology.Render
Thin headless Scene to PNG bridge for the symbology design loop. Wraps the public SkiaViewer ReferenceRendering path via a SceneCodec round-trip and fails loud on any non-passing verdict. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.4.0 | 0 | 7/21/2026 |
| 0.3.0 | 946 | 7/16/2026 |
| 0.2.0 | 2,121 | 7/11/2026 |
| 0.1.0 | 4,218 | 7/9/2026 |
| 0.1.0-preview.1 | 87 | 7/7/2026 |