Add AquaSynth live instrument daemon sessions
This commit is contained in:
parent
0edd3ee21a
commit
50ed85ae41
9 changed files with 595 additions and 18 deletions
|
|
@ -12,9 +12,11 @@ architecture. It is a reference ledger for
|
|||
typed receipts. It now exposes `cultnet-host`, `cultnet-once`,
|
||||
`cultnet-stream`, and `cultnet-daemon` as local CultNet command surfaces.
|
||||
- `src/AquaSynth.Faust/AquaSynthDaemonService.cs`: the service owns
|
||||
`patch.compile`, `instrument.sample`, and bounded `instrument.stream`
|
||||
execution. It writes compile/session/render/stream/operator witnesses and
|
||||
emits CultMesh-compatible stream descriptors and packet receipts.
|
||||
`patch.compile`, `instrument.sample`, bounded `instrument.stream`,
|
||||
`instrument.open`, `instrument.control`, and `instrument.block` execution. It
|
||||
writes compile/session/render/stream/live/operator witnesses, keeps native
|
||||
streaming patch instances for live sessions, and emits CultMesh-compatible
|
||||
stream descriptors and packet receipts.
|
||||
- `src/AquaSynth.Faust/AquaSynthCultNetDaemon.cs`: local CultNet database host
|
||||
and command watcher. Typed command documents enter the database; typed
|
||||
receipts and provider state come back out.
|
||||
|
|
|
|||
|
|
@ -110,11 +110,13 @@ A good GameCult daemon publishes:
|
|||
|
||||
AquaSynth is the current synth example. AquaSynth owns patch parsing, Faust
|
||||
emission, native compilation, compiled instrument sessions, sample rendering,
|
||||
bounded stream receipts, and synth-control state. A client can send
|
||||
`instrument.sample` or `instrument.stream` as typed command state through the
|
||||
local CultNet database. AquaSynth compiles or opens the instrument, writes
|
||||
sample artifacts and receipts, and publishes the result. The client consumes
|
||||
the capability; it does not become the synth.
|
||||
bounded stream receipts, live streaming sessions, and synth-control state. A
|
||||
client can send `instrument.sample`, `instrument.stream`, `instrument.open`,
|
||||
`instrument.control`, or `instrument.block` as typed command state through the
|
||||
local CultNet database. AquaSynth compiles or opens the instrument, keeps the
|
||||
native streaming patch instance, applies controls, writes sample/block artifacts
|
||||
and receipts, and publishes the result. The client consumes the capability; it
|
||||
does not become the synth.
|
||||
|
||||
That lets one AquaSynth daemon sit on this machine or another machine in the
|
||||
Verse and serve multiple apps. The same engine can support Fensalir, Eve
|
||||
|
|
@ -287,12 +289,14 @@ The split is:
|
|||
- domain work inside the provider daemon.
|
||||
|
||||
For AquaSynth, that means patch requests, compile receipts, session state, and
|
||||
stream descriptors are typed documents. Audio blocks should eventually move
|
||||
through a low-latency local transport such as shared-memory rings, platform
|
||||
audio graph nodes, memory-mapped packet buffers, or another fixed-block lane
|
||||
that does not drag filesystem writes or chatty command protocols into the audio
|
||||
callback. The command surface still owns intent and receipts. The realtime lane
|
||||
just moves sound fast.
|
||||
stream descriptors are typed documents. Live sessions already let a daemon open
|
||||
one native streaming patch and apply controls across fixed blocks; audio blocks
|
||||
should eventually move through a low-latency local transport such as
|
||||
shared-memory rings, platform audio graph nodes, memory-mapped packet buffers,
|
||||
or another fixed-block lane that does not drag filesystem writes or chatty
|
||||
command protocols into the audio callback. The command surface still owns
|
||||
intent, patch lifetime, controls, and receipts. The realtime lane just moves
|
||||
sound fast.
|
||||
|
||||
That distinction matters. Transport is not authority. A ring buffer should not
|
||||
decide what instrument exists. A renderer should not decide which command
|
||||
|
|
|
|||
Loading…
Reference in a new issue