You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,8 +6,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
7
7
## [Unreleased]
8
8
9
+
## [0.3.0]
10
+
9
11
### Added
10
12
13
+
-**Web Audio runtime buffer loading** -- The `webaudio` backend can now fill gen~ buffers with sample data at runtime. New Emscripten exports (`wa_load_buffer`, `wa_get_num_buffers`, `wa_get_buffer_name`) are backed by a genlib-side `wrapper_load_buffer()` that copies interleaved float samples into the `WebaudioBuffer` instances. The AudioWorklet (`processor.js`) handles a `load-buffer` message (queued until the WASM module is ready, then applied between render quanta), and the generated `index.html` adds a file input per buffer that decodes an audio file via `decodeAudioData()` and posts the samples to the worklet. Previously buffers were allocated but unfillable, so buffer-backed patches (sample players, wavetables) ran silent; effects and parameter-driven generators were unaffected. Covered by a Node.js round-trip integration test (`test_buffer_loading_rampleplayer`).
14
+
11
15
-**GDSP DSL `split()` / `merge()` composition** -- The fan-out/fan-in combinators are now callable from `.gdsp` source (previously available only via the Python `gen_dsp.graph.algebra` API). They accept two graph operands (graph references, partially-applied graph calls, or nested compositions), compose with `>>` and `//`, and lower to a `Subgraph` wrapping the composed graph. `split(a, b)` distributes `a`'s outputs cyclically across `b`'s inputs (requires `len(b.inputs) % len(a.outputs) == 0`); `merge(a, b)` sums groups of `a`'s outputs into `b`'s inputs (requires `len(a.outputs) % len(b.inputs) == 0`).
12
16
13
17
-**GDSP DSL external file imports** -- `name = import "file.gdsp":graph(input=..., param=...)` references a graph defined in another `.gdsp` file and instantiates it as a `Subgraph`, with the same keyword-only argument rules as an in-source subgraph call. The graph name may be omitted when the target file defines exactly one graph. Relative paths resolve against the importing file's directory (the current working directory for string sources); each file is parsed and compiled at most once per top-level compilation (shared module cache, so diamond imports reuse the result); and import cycles -- direct (`a -> a`) or transitive (`a -> b -> a`) -- raise a `GDSPCompileError` reporting the chain instead of recursing without bound. This supersedes the deliberate "external imports are not supported" error added in 0.2.0.
0 commit comments