3DS Store › Apps › descry

descry changelog

v1.0.7 · Aug 19, 2026

descry v1.0.7 — precise cuts, dry stems

this one came from actually using the sampler instead of inventing another synth engine for the feature list. long breaks can now be cropped and sliced precisely, and finished arrangements can leave the 3DS as clean, synchronized tracks for a DAW.

dry stem export

hold ZL+SELECT in the PROJECT view to export one synchronized set:

NAME_mix.wav
NAME_t1.wav
NAME_t2.wav
...
NAME_t8.wav

only tracks used by the arrangement are written. the files are captured in one playback pass, so note timing, chance events, noise and sidechain movement stay aligned.

track stems keep the instrument, note FX, filter, bitcrush/downsample, channel fader, pan and sidechain duck. global delay, reverb and master processing are deliberately left out — the point is to get clean material into a DAW and choose those effects there. the reference mix still includes the full descry mix and roughly three seconds of global FX tail.

all files begin together and have the same length. a stem set reserves one shared take suffix, writes through temporary files and removes partial output if the SD write fails. normal SELECT mix export remains available.

sampler precision

  • fixed CROP on long samples: its 32-bit position multiply overflowed after a few seconds and could keep one unrelated hit instead of the selected region
  • crop now works in frame coordinates with correct mono/stereo boundaries
  • both WAVE and SLICE have a real editor viewport: Circle Pad up/down zooms up to 256×, left/right pans
  • touch marker selection and dragging use the zoomed frame range; zooming never changes playback START/LENGTH
  • changing the instrument TYPE still works with WAVE/SLICE/LOAD open instead of firing the panel action under the same button
  • WAV browser preview now decodes two seconds instead of five, cutting the wait and temporary memory for long files while full import keeps its 15-second capacity

crop overflow and precision zoom were reported by @HexManic in issue #7. thanks for the clear report — it pointed straight at a real long-sample bug and made the sampler editor better in the same pass.

export and UI cleanup

  • offline export now advances at tick boundaries instead of quantizing events to 1024-frame blocks
  • export renders from a private project snapshot, so tempo commands cannot mutate the live project
  • the in-app guide opens only from the visible ? button — the whole hint strip is no longer an invisible hit target
  • mixer faders have restrained theme-derived depth and highlights instead of flat single-colour fills
  • help and the full guide document sampler zoom, fast preview and dry stems

verification

the full host regression suite passes, including long mono/stereo crop and dry stem tap coverage. the release build was compiled with devkitARM and tested on a New 3DS.

file

| file | use |
| --- | --- |
| descry.cia | Home Menu install with FBI |
| descry.3dsx | Homebrew Launcher — copy to /3ds/descry/descry.3dsx |
| descry.3ds | compatible flashcart / emulator |

New 3DS / New 2DS only.

v1.0.6 · Aug 15, 2026

descry v1.0.6 — one clock, honest renders, sharper tools

this release attacks the parts of a tracker that absolutely cannot lie: time, playback position, undo and export. it also ships the first proper flagship demo — a copyright-clean jungle track built to show what the sampler and sequencer actually do.

one Song clock

Song rows used to advance independently on every track. put a one-phrase drum chain next to a four-phrase bass chain and the drums reached the next arrangement row three phrases early; an EMPTY cell raced ahead even faster. the arrangement could look aligned and still dissolve during playback.

v1.0.6 gives every Song row one shared boundary, derived from the longest chain in that row. shorter chains loop inside it, EMPTY cells wait silently, and all eight tracks enter the next row together. the same boundary now drives end-of-song detection and offline export, so an unused track can no longer truncate a render.

exports you can trust

WAV export now uses the same mixer state as live playback:

  • channel faders, master volume and persisted mutes
  • delay time / feedback / wet, reverb wet / size / damping
  • sends and sidechain ducking
  • long rests and sparse sections without false early-stop
  • the complete Song pass plus roughly three seconds of FX tail

renders stream straight to the SD card instead of accumulating the whole WAV in RAM, with a ten-minute safety cap. at the shared wrap boundary the sequencer releases the current voices without triggering row 0 again, so the tail belongs to the song you rendered — not the next loop.

IRONLUNG

IRONLUNG is a 174 BPM jungle demo built entirely from descry's own engines and procedural drum generator:

  • copyright-clean two-bar break, sliced into 32 chromatic sixteenth-note chops
  • step-programmed rearrangements, retrigger rolls and reverse fills
  • reese bass, sine sub, pads, stabs and sidechain ducking

install all three demo files together in /3ds/descry/:

project_00.tr3d
sample_63.s16
sample_63.name

.tr3d files do not embed sample audio. slot 63 is reserved for IRONLUNG; the optional BMT add-on now occupies slots 32–62 only.

Phrase Tools, inspector and editing

Phrase view now keeps a permanent inspector beside the grid. it resolves the
sticky/inherited instrument, shows its source and live envelope, exposes ALWAYS
defaults and the mod table that can otherwise make a patch sound mysteriously
processed, and decodes all three FX slots. press SELECT on the instrument
column to jump straight into that instrument's editor.

Phrase Tools adds deterministic generators alongside rotate, reverse, transpose,
octave and velocity transforms:

  • Euclidean rhythms and density gating
  • humanize and ratchets
  • random notes and scale-aware mutation
  • trigger-chance spread and EVN cycle conditions

random operations use an explicit seed, stay inside the selected rows, respect the active key/scale and leave unrelated FX alone. every operation is one undo step.

analog controls are editing tools now: the circle pad accelerates Song navigation
and scrubs/zooms the sampler window; the C-stick is a relative fine/coarse value
encoder. this replaces the old left-stick-as-KAOSS and right-stick sends/crush
mappings, and the KAOSS STK toggle is gone. START in Song view plays from the
cursor row; hold L+START to start from the top.

undo, playheads and visible state

  • preset loads, instrument type changes and instrument clones are undoable as whole snapshots
  • replacing or loading a project clears old history, preventing undo from splicing data from the previous project
  • phrase and chain playheads report the position that actually sounded, including phrase boundaries and tracks other than track 0
  • Song and Chain edits finally mark the project dirty
  • mute/solo state, Song end, active playhead owner and the unsaved marker are visible in the views where they matter
  • track mutes persist across save/load; PLAY and leaving solo no longer wipe them

UI fixes and maintenance

  • theme switching now reaches touch keys, pads, filter tints and confirmation states instead of leaving cretaceous-coloured strays
  • overlays animate closed while remaining input-opaque, so the dismiss button cannot hit the screen underneath
  • leaving KAOSS mode during a held gesture performs the normal release ramp instead of freezing performance parameters
  • grid lines no longer shout louder than dim data in every theme
  • DTIM is shown in milliseconds
  • removed the nonexistent GRAN instrument label and cleaned the full-build warnings
  • split the UI monolith into per-screen translation units
  • CI now runs all 15 host regressions, builds IRONLUNG and performs a clean devkitARM build on every push and pull request

files

| file | use |
| --- | --- |
| descry.cia | install to the Home Menu with FBI |
| descry.3dsx | Homebrew Launcher — copy to /3ds/descry/descry.3dsx |
| descry.3ds | flashcart / Citra / Azahar |
| descry-v1.0.6-IRONLUNG.zip | complete demo bundle for project slot 00 and sample slot 63 |

New 3DS / New 2DS only.

checksums

fe5eac672dac3b5c66ccc62de2617d8a251d047473d088ba9175f013f974a3db  descry.3dsx
ab20c8e0d0d0c0e5a9f20907d8d4cd5b710609db4bdba341cb67557d3ba65086  descry.cia
2063e92e63e91250f1123556a32bcd1cd082ffc402d055a6db822c834187fec1  descry.3ds
23f73f5278336ef87aaa2a7dc85672c6a541f6f275912e5ff1360ef9345de5d1  descry-v1.0.6-IRONLUNG.zip

v1.0.5 · Aug 3, 2026

three weeks of work, and most of it is the unglamorous kind: races, silent
corruption and knobs that did nothing. a sampler workflow overhaul on top.

sampling & wavetables

  • complete sampler capture / slicing workflow — recording, trimming, transient and equal chopping, per-slice reverse, slice-to-phrase and slice-to-kit, beat-sync repitch, and a wav browser that handles 8/16/24/32-bit and float files. all of it realtime-safe: SD and decode work happens off the audio lock, then swaps under it
  • capture any sampler window as a permanent oscillator — the visible window becomes a single-cycle USER wavetable plus a matching wavsynth instrument, DC removed and normalised, persisted across reboots. record a vowel through the mic, play it as an oscillator
  • host-side tools for building sample/wav libraries and pushing them to the console over FTP

fixes

  • two use-after-free races between the UI and the audio worker — preview voices were published to the mixer before note_on(), so if a buffer fill landed in that window the worker deleted the voice as inactive and the UI then called note_on() on freed memory. separately, every destructive sample edit (normalize, reverse, fade, crop, wav load, resample, drum regen, mic record) mutated a vector a live sampler voice was reading — a realloc there is heap corruption. new start_voice() and cut_slot_voices() close both. *found in an external audit of v1.0.4*
  • a full SD card could destroy the project you were saving — saves went straight over the target file, so a failed write left a torn file while the UI reported success. saves are now atomic (temp file, verified, renamed) and loads are transactional, so a short read can no longer leave the live project half-old and half-new. loading also validates and clamps anything the player indexes into or divides by, instead of trusting the file
  • sampler LENGTH disagreed with the engine — the UI drew the window as [start, start+length), the engine read LENGTH as an absolute end frame. invisible at the default 100%, but any moved START played something other than what was on screen: START 50 + LENGTH 50 played an empty window instead of the visible second half
  • mic recordings were 39 cents flat — the 3DS mic delivers 32728 Hz, the engine plays 32000, and nothing resampled. every recording ever made was 2.3% slow. now resampled on stop
  • long wavetable filenames never loaded — the scan buffer counted .wav against a 20-byte limit, leaving 15 characters of real name, so AKWF_hvoice_0001.wav and friends were skipped. that is the dominant naming convention for single-cycle packs, so the usual symptom was an empty list with no explanation
  • wavetable slot order was not alphabetical, despite the header saying so — it sorted a 32-entry window and took the first 16, so with more than 16 files the surviving set depended on raw FAT order. since projects store the slot as an index, a saved project could come back playing a different waveform
  • CHA FF skipped its guaranteed trigger once every 256 rolls (off-by-one on a 0..255 range)
  • a deep down-transpose under DLY jumped ten octaves up — the note wrapped through unsigned before being clamped, so −1 became 255 became 127
  • full-scale peaks read as silence on the meters — negating INT16_MIN wrapped back to itself
  • cross-core flags were volatile, not atomic — no happens-before between the UI on core 0 and the audio worker on core 1. also, a failed audio init leaked everything it had already acquired
  • the in-app help page documenting the SD layout and export was invisible — a page fits 18 lines before it hits the footer and that one had grown to 24, so everything from "SD layout" down was drawn off-screen

song exports (#6)

exports were hardcoded to a single render.wav, so rendering a second project
silently destroyed the first, and there was no way to name the file — reported by
@francorv99.

exports now go to renders/ named after the current project, and an existing
take is never overwritten: repeat renders become NAME_01.wav, NAME_02.wav, …
so you can bounce a whole session before pulling the SD card. hold R in the
PROJECT view to rename, and the view shows the exact target
(SEL -> renders/NAME.wav) before you press SELECT. rename mode existed
already but nothing on screen advertised it, which is half of why this was
filed — there is a R=RENAME hint now.

tests

make tests builds and runs the host-side suite. six tests had no build rule at
all and were dead weight nobody ran. test_slice was worse than useless: it only
printed results and always claimed success, and it probed chop sensitivity on a
break with a silent floor where the setting cannot matter — 80, 150 and 220 all
produced byte-identical output, so that knob could have been completely broken
without anyone noticing. it asserts now, on material where sensitivity actually
does something.

note

the SD layout no longer has render.wav — it is renders/ now. no project or
sample data is affected; a leftover render.wav is simply unused and can be
deleted by hand.

v1.0.4 · Jul 15, 2026

descry v1.0.4 — modes, scopes & housekeeping

record modes done right (issue #5)

the touch keyboard used to always write notes in the phrase view — "REC off still records", as @Rhlp-Engineering rightly complained. the REC button now cycles three explicit modes:

| mode | what happens |
| --- | --- |
| JAM (default) | keys and pads only preview. nothing is ever written — noodle over a playing song without leaving fingerprints |
| WRT | tracker write mode: notes land at the cursor, cursor advances |
| LIVE | with the transport running, notes are recorded onto the step playing right now |

and the other half of the report — "i couldn't find the note clear button" — there's a CLR button next to REC now: in WRT it clears the step under the cursor and advances (tap-tap-tap wipes a run), in LIVE it clears the currently playing step. everything is undoable (ZL+B), and touch-entered notes finally participate in undo too.

scope styles

tap the DESCRY wordmark — under the theme list there's a new SCOPE row:

  • WAVE — the classic filled envelope (default)
  • BARS — mirrored peak bars, chunky VU look
  • X-Y — a proper goniometer: mid/side-rotated lissajous with auto-gain, connected phosphor-decay trail and CRT-style beam blanking on transients. mono sits as a vertical needle; reverb, detune and panning bloom the figure sideways. gorgeous in fullscreen (L+SELECT)

the picker stays open while you choose so the strip reacts live. your pick is remembered.

song export, wired up

render.wav — song export was promised by the manual... but no button ever triggered it. now: SELECT in the project view renders the song to sdmc:/3ds/descry/render.wav (up to 60 s, 32 kHz stereo), with a status toast either way.

settings that stick

new settings.cfg replaces theme.cfg (your saved theme migrates automatically). descry now wakes up exactly how you left it: theme, octave, KEYS/PADS/KAOS mode, kaoss X/Y assignments, stick sync, scope style.

fixes

  • bottom screen flickered / vanished in fullscreen X-Y scope — the goniometer trail was draining the shared citro2d quad pool on hot transients, silently starving everything drawn after it. hard quad budget + beam blanking + a bigger pool
  • in-app manual updated: record modes, groove pattern column (mixer GRV), scope styles

files

| file | use |
| --- | --- |
| descry.3dsx | homebrew launcher |
| descry.cia | install to home menu (FBI) |
| descry.3ds | flashcart / citra-azahar |

> emulator users: descry needs a real DSP firmware dump — see issue #2 for the dspfirm.cdc setup.

v1.0.3 · Jul 11, 2026

descry v1.0.3

added

  • in-app manual — tap the ? badge on the bottom screen: an 8-page guide right on the console (basics, global keys, phrase editing, instruments, the full FX command list, performance, sampling). the FX pages are generated from the engine's own command table, so the help can never drift from what the player executes. (issue #3)
  • INIT preset — preset 1 in every synth engine (wavsynth / FM / DSN) is now a true blank patch for building sounds from scratch: FM = DX7-style init voice (single sine carrier), DSN = one saw, filter open, no modulation. old saves are unaffected.
  • DSN drum presets — KICK / SNARE / HAT / TOM analog drum starting points on the DSN voice.
  • reverb size + damping — RSIZ / RDMP in the mixer master strip: room size up to near-self-oscillation feedback plus feedback damping, saved per project (older project files load unchanged).
  • key root tap — the KEY readout is split: tap the left half to cycle the root note, the right half to cycle the scale.
  • load confirmation — loading over unsaved changes now asks first (amber LOAD?, press A again to confirm).

fixed

  • sample loop modes — FWDLOOP / REVLOOP with no loop markers set now loop the play window (M8 behaviour) instead of silently doing nothing.
  • audio cutout recovery — a watchdog now recovers the NDSP channel after a silent stall: ~200 ms of unexpected silence = unpause, ~600 ms = full channel re-init.
  • phrase R-hint bar no longer overflows the bottom screen.

checksums

09f92d8e5794878f7429e3e40ab0ed6b411cbe8b6a299de7f11e680419cf1d2c  descry.3dsx
7ab4d42f36ffd723bae4b6a13557766bff877fe1963cc72243c2b4d062d3ecbf  descry.cia
79305cf50ee5be5c34ef4316a28200d6d9b093b1942c7c029e9ff6ff565d8291  descry.3ds

thanks

  • lavenderdragon (discord) — for the detailed feedback round that shaped most of this release: loop behaviour, reverb depth, key handling, load safety, drum presets, audio cutouts.
  • @Rhlp-Engineering — for asking for an in-app manual (issue #3). it's the ? badge now.
  • @DoubleSprattt — for continued testing and the hold-to-sustain preview idea.

install: CIA via FBI (recommended on CFW) · 3DSX from the homebrew launcher · .3ds for flashcarts. New 3DS / New 2DS only.

v1.0.2 · Jul 8, 2026

descry v1.0.2

added

  • live instrument voice refresh while editing synth parameters
  • animated live envelope overlay for wavsynth, sampler, FM and DSN voices
  • horizontal song timeline mode with rotated navigation

fixed

  • show an explanatory error screen when NDSP init fails / dspfirm.cdc is missing
  • speed up exit/autosave by skipping unchanged sample writes
  • tighten bottom panel hit zones so upper navigation touches are not swallowed

checksums

a6df3bef246aa92423fdd0c54a576e23480c75b7edd1b927f8c3087ee7c0c752  descry.3dsx
f0470426cf9b9066641d09e8d0a0f1f1b48fc3fff0339bd5e1fea548379aaa8b  descry.cia
68510353436408002ca3328281bc57e1339f3fce096592eaa7943cce777d704d  descry.3ds

thanks

  • @DoubleSprattt — for the careful issue #1 report, screenshots, and testing notes.

v1.0.1 · Jul 7, 2026

bugfix + polish release, driven almost entirely by issue #1 — thanks @gearmo3ds and @DoubleSprattt.

fixed

  • tempo jitter: sequencer events were quantized to audio-buffer boundaries (up to 32ms off-grid, audible as unstable tempo in GRAVEHILL). the scheduler is now tick-accurate inside the buffer.
  • kaoss pad CUT/RES (and everything else) was stomped by every note trigger — gestures now own their parameters while held and hand them back after the release ramp.
  • mixer settings (faders, delay, reverb, duck) now apply on project load, not on the first visit to the mixer screen.
  • the R-modifier help bar told the wrong story on the table screen; hint bars are now context-aware per screen.
  • tapping REC in the drumkit GEN panel flips back to the pads (there was nothing to record in GEN).

improved

  • kaoss DEL/REV sends: perceptual curve — audible from mid-pad instead of only at the top.
  • kaoss M>C: auto-engages an LPF and gives the wobble headroom (base cutoff to ~55% while held).
  • instrument view header: USED IN N PHRASES counter + slot hints — instruments are a global bank, now the UI says so.
  • hold L + A in the instrument view: clone the instrument to the first free slot.
  • hold R + Y in the phrase view: clear the whole phrase (undo-tracked).

docs

install: CIA via FBI (recommended on CFW) · 3DSX in the zip (copy 3ds to SD root) · .3ds for flashcarts. the zip carries the five demo projects and the wavetable starter pack. New 3DS / New 2DS only.

v1.0.0 · Jul 6, 2026

first public release.

a music tracker + synthesizer for the New Nintendo 3DS — song/chain/phrase
sequencer, 23 FX commands, mod tables, five synth engines (wavsynth / 4-op FM /
sampler / drumkit / DSN analog voice), per-track DSP, delay + reverb,
KAOSS-style XY pad, mic sampling, user wavetables, 6 color themes.

install (pick one):

  • CIA — install descry.cia with FBI, launches from the home menu with its own icon + banner. recommended on CFW.
  • 3DSX — unzip descry-v1.0.0.zip, copy the 3ds folder to your SD card root, launch from the Homebrew Launcher.
  • descry.3ds — CCI for flashcarts.

the zip includes five demo projects plus a starter pack of single-cycle
wavetables — grab it for the demo content even if you install the CIA.

New 3DS / New 2DS only.