P2b: offline WAV render of the arrangement
This commit is contained in:
+8
-2
@@ -18,9 +18,15 @@ Verification:
|
||||
|
||||
Limits: exactly four sections of two bars; no insert/reorder/length; select is not undoable; no per-section mute.
|
||||
|
||||
## P2b · render (next)
|
||||
## P2b · render
|
||||
|
||||
Offline render of the 8-bar arrangement to a WAV inside the project, with a command and a surface control.
|
||||
`zhila_engine::render_arrangement(RenderRequest)` drives the same `AudioState` offline: no cpal device, the same voices, sample faces, gains, master and the 8-bar sections, plus a 1.5 s tail. `Command::render` is intercepted by the host, rendered in `spawn_blocking`, written with `hound` as 48 kHz stereo 32-bit float to `<project>/renders/<project>-<ms>.wav`, and announced with `Event::rendered { path, duration_sec }`; the command result is the unchanged state. Render is not a project edit and does not push history.
|
||||
|
||||
Surface: `render` in the top rail; the wire logs the send and the `rendered` path; the button's title keeps the last path.
|
||||
|
||||
Verification: `cargo test -p zhila-engine` (non-silent 16.5 s buffer, correct frame count); `node scripts/render-smoke.mjs` (status 16.5 s, peak 0.442, 6.3 MB, float 48 kHz stereo, event duration matches); `npm --prefix ui run render-ui-smoke` (button → wire path, screenshot `preview-p2-render.png`).
|
||||
|
||||
Limits: WAV only, stereo float, fixed 48 kHz and 1.5 s tail; no stems, normalisation or section ranges.
|
||||
|
||||
## P2c · agent (next)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user