Repository navigation
Zynthian spike: a chain's audio slots as a plugin-hostd strip, parallel slots through an explicit mix - #129
Conversation
…lel slot as fan-out and an explicit mix
…Path B, and chain_manager lines read at the pinned commit
…o slots on plugin-hostd in order, a parallel slot through an explicit mix element zynthian_plugind_strip.py holds the daemon client, the instance numbers and the strip: adjacent plugind stages are joined with mod-host connect in slot order, re-linked on add at a position, move and remove (stale links disconnected before the instance goes), and a parallel slot is a fan-out into its members and a mix element (a mixer instance declared by PLUGIND_MIX, unity gain per branch as Zynthian's implicit sum) whose output feeds what follows. Refusals by name: PARALLEL_SLOT_FOREIGN, MIX_ELEMENT_ABSENT, MIX_BRANCHES_EXCEEDED, MIX_ADD_REFUSED; a nudge that would form a slot the strip cannot realise answers False and leaves the chain as it was. An effect with no bypass port gets the host's :bypass, sent as mod-host bypass. realise_links is the marked seam for plugin-hostd#101's chain.
… fake host, every guard sabotaged once Seven scenarios on the real zynthian_chain read the daemon's graph and values back: series order and add at a position, removal healing (and no stale link replayed after a worker respawn), a move through Zynthian's parallel step with the mix element, the three refusals, host bypass and branch gain. Nine sabotages each turn one red. strip.sh applies the patch at the pinned commit and runs it; one run in evidence/strip. chain-profile.md: a reorder passes through a parallel slot, and what is not tested.
d08a8d2 to
556b02a
Compare
|
Fix-first done; head is now 556b02a (force-with-lease over d08a8d2). docs/zynthian/chain-profile.md:4 states the strip model in plain words, no repository path, URL or branch name; |
|
Ruling, operator 2026-10-24: folded into devel/zynthian as the record of the pre-chain shape. The Zynthian chain is the plugin-hostd |
The next step of the Zynthian spike (#124, merged as #125), on the strip model: plugin-hostd replaces the jalv and mod-ui engines as the way a Zynthian chain hosts its plugins.
docs/zynthian/chain-profile.md: a Zynthian chain written as a strip profile (source, control domain, audio chain, boundaries, limits, verbs), each fact cited to zynthian-ui f46b018. A parallel slot is a fan-out plus an explicit mix element: a third arrangement beside pool and chain. Open points are listed.docs/zynthian/engine-gaps.md: what jalv and mod-ui give a chain against Path B. Three gaps mattered for single-processor slots: chain order, removal healing, host bypass. This branch closes all three.zynthian_engine_plugind.patch: the newzynthian_plugind_strip.pyjoins adjacent plugind stages with mod-hostconnect, in slot order. It re-links on add at a position, on move and on remove (links are disconnected before the instance goes). A parallel slot gets a mixer instance declared byPLUGIND_MIX, at unity gain per branch, the same as Zynthian's implicit sum. Refusals have names:PARALLEL_SLOT_FOREIGN,MIX_ELEMENT_ABSENT,MIX_BRANCHES_EXCEEDED,MIX_ADD_REFUSED.realise_linksis the marked seam for Protocol: declare a chain of instances run in one worker, with crash quarantine (for omx-clap-core#104) #101'schain. No new protocol verb.tools/zynthian/test-strip.py/strip.sh: seven scenarios on the realzynthian_chainagainst plugin-hostd and the fake host. They read the graph and values back from the daemon. Nine sabotages each turn one scenario red.No N-input mixer exists on the test machine or in omx-plugins, so the mix element is realised only with the fake host's
fake:mix. Zynthian reorders by nudging through a parallel slot, so without a mixer a plugind chain cannot be reordered.Not tested: the engine under the strip with lilv and JACK, real ports, autoconnect's pass, timing, hardware. Commits are unsigned: there is no GPG key on this laptop.