All posts
v0.4.0
v0.4.0
Added
- Record destructuring: statement-level (
{a, b} = rec) and function-parameter destructuring with defaults - Record-valued state cells, plus
cell.fieldread/write sugar over them - Extended pattern event fields exposed via the
%.fieldaccessor - Builtin record-parameter option schemas, with editor autocomplete driven from them
- Argument spread:
..exprin call arguments and array literals, for both user functions and builtins - Microtonal tuning:
d/\accidental aliases, plus just-intonation and Bohlen-Pierce tuning systems nkido-cli servemode — SDL window with live waveform, level meter, interactive controls, and scroll/scope views;.akkextension recognitionnkido-cliauto-loads the default 808 sample kit, honors patch BPM, and supports named banksbeat(n)clock helper andspb(seconds-per-beat) read-only builtin in the stdlib- Full builtin signatures emitted as JSON for editor integrations
ParamsPanelin/embedmode, with an autoplay flag on patch switchdnb-amendemo patch- Unified URI resolver (
cedar::UriResolver/ TSuriResolver) for all asset loading. Handlers coverfile://,http://,https://,github:,bundled://, plusblob:nkido:andidb:on the web side. Disk cache under the platform's user cache directory (Linux$XDG_CACHE_HOME/nkido/, macOS~/Library/Caches/nkido/, Windows%LOCALAPPDATA%/nkido/cache/), 500 MB cap with mtime-based LRU eviction. samples("uri")top-level akkado directive that records sample-bank URIs intoCompileResult.required_uris. The host fetches and registers each before bytecode swap. Mirrorswt_loadend-to-end (NOP opcode + special-cased codegen handler).nkido-cli --bank/--soundfont/--sampleURI flags. Each accepts any registered scheme; bare paths are treated asfile://. Banks accumulate as default banks searched in order;--sampleadmits aname=urishorthand.akkado-cli --urislists URI declarations from the program (text + JSON output).docs/uri-schemes.mddocuments the scheme list,samples()syntax, CLI flags, and caching layout. Indexed in F1 help.web/tests/bank-registry.test.tsregression test pinning the single-fetch invariant forbankRegistry.loadBank('github:...').
Changed
- All DSP opcodes are now stereo-native — filters, distortion, delays, comb, tap_delay, dynamics, env_follower, modulation FX, sampler, Freeverb, FDN, and Dattorro process stereo directly instead of relying on automatic mono lifting
ExtendedParams<N>: unified mechanism for builtins needing more than 5 runtime-tunable params, replacing the oldinst.ratebit-packing hackssample()/sample_loop()accept a sample-name string as the third argument- WASM bridge: standardized all four asset loaders (
cedar_load_sample,cedar_load_audio_data,cedar_load_soundfont,cedar_load_wavetable_wav) onint32_treturn with-1on failure.cedar_load_soundfontparameter order is now(name, data, size)matching the others. BankRegistry.loadBankflowsgithub:URIs through the resolver; the dedicatedloadFromGitHubpath is gone, eliminating the prior double-fetch on cold loads.audio.svelte.tsexposes oneloadAsset(uri, kind, name)method covering samples, SoundFonts, wavetables, and sample banks. Discriminated return per kind.SampleBank::load_audio_data,SoundFontRegistry::load_from_memory,WavetableBankRegistry::load_from_memoryall takeMemoryViewuniformly.
Removed
- Automatic mono→stereo lifting (auto-lift) — opcodes are stereo-native now
- Unused
post()statement syntax BankRegistry.loadFromGitHub(web) andaudioEngine.loadBankFromGitHubwrapper.audioEngine.loadSampleFromUrl/loadSoundFontFromUrl/loadWavetableFromUrl(web). Replaced byloadAsset.cedar_load_sample_wavWASM export (already dead) and the_cedar_load_sample_waventry in the export list.SampleBank::load_wav_file/load_wav_memorycallers; the orphanSamplePack::load_samplesreference was ported to the resolver path.- TS
FileSourcediscriminated union in favor of URI-string-onlyloadFile(uri, options).
Fixed
polypreserves stereo through voice mixing — voice callbacks that pan no longer collapse to mono- Hot-swap preserves pattern playback across recompile; chord RMS normalization
- Chord quality table unified, voicings expanded, close/open voicings decoupled
- Chord patterns pipe natively into SoundFont playback
- Pattern transforms on identifier-bound patterns
- Duplicate diagnostics from pattern-transform handlers
button()not firing as a trigger- Per-voice velocity in sample-pattern polyrhythms; sample-velocity attenuation in
s"..."patterns - Mini-notation record suffix in
s"..."sample mode and chord atoms samples()bank registration ordering during compilenkido-cliserve/play/ui silence for sample and poly patches; serve audio dropout after stop- SoundFont URL-fallback silent-audio bug
/embedpatch loading errors, and the/embed404 on productionn"..."bare-MIDI note lexing