← Back to selected work

Creative software / WebMCP / Browser-local studio

Lingji

Make data audible. Keep the decisions yours.

Turn a dataset into music, then inspect which value created each note.

My contribution
Built deterministic data-to-note mapping, the audio studio, and shared editing rules for people and browser agents.
Result
A working three-track score with note provenance, protected edits, and WAV export.

FROM THE PROJECT

Inside the working score

Actual Lingji studio with source data, three-track score, and selected-note provenance.
Repository screenshot: working score and note inspector, using a fictional delivery dataset during the September usability audit. Source ↗
9
semantic WebMCP tools
3
independently editable tracks
48 kHz
stereo PCM16 WAV export

THE CHALLENGE

Can you explain every note?

Data sonification becomes useful when someone can explain why a value produced a particular note. Lingji makes that relationship inspectable, while allowing a browser agent to help refine the music without overwriting deliberate human choices.

ENGINEERING

One score shared by human and agent

CSV parsing, column profiling, normalization, sequence generation, and provenance live in a pure domain layer. Numeric fields use min/max normalization, categories use a stable sorted lookup, and missing values can produce rests. The same input and mapping configuration generate the same event sequence.

The studio offers Melody, Pulse, and Bass tracks. A person can map fields to pitch, velocity, rhythm, brightness, or instruments; edit individual notes; and choose a repeated 16-step pattern or a complete dataset scan. Sampled piano and marimba sit alongside oscillator-based synth voices.

React controls and WebMCP tools both dispatch into one StudioSession store. Agent mutations must include the current revision. Stale requests and pending human drafts are rejected, and only the human can unlock protected decisions. The selected-note tool exposes the exact source row and mapping provenance.

One composition, not an agent-only copy

Human edits, agent edits, playback, previews, and export use the same effective sequence and command boundary.

Protection beyond a visible lock icon

Track, mapping, and note locks prevent indirect edits through changes to timing, sound, and mix. Manual overrides remain distinct from generated provenance.

Local audio rendering

Web Audio handles live playback and offline WAV rendering. Lingji has no audio-generation API, embedded chatbot, backend, or account system.

ARCHITECTURE

From source row to audible note

Lingji architectureCSV data enters deterministic mapping. Human controls and WebMCP tools share a revision-checked session; protected decisions shape the final note plan used by playback and WAV export.CSV + column profilesExplicit source valuesHuman controlsDrafts · edits · locksBrowser agentNine WebMCP toolsShared StudioSessionRevision checks + lock rulesDomain mappingNormalization + provenanceEffective note planGenerated + edited + lockedShared audio engineLive playback / offline renderWAV export48 kHz stereo PCM16

CSV data enters deterministic mapping. Human controls and WebMCP tools share a revision-checked session; protected decisions shape the final note plan used by playback and WAV export.

RESULTS AND LIMITS

An inspectable working score

The repository contains a documented browser audit, keyboard and narrow-layout screenshots, and a WebMCP verification trace. The 3 September usability audit reports 220 passing tests across 18 files. That is a dated repository result, not a new test run or a participant usability study.

Current boundaries

Editable state is session-only: no project save/load or undo. WAV saves audio, not an editable backup. Connected browser agents can receive dataset contents through WebMCP.

EXPLORE THE SOURCE

Inspect mapping, locks, and browser verification

Repository review: 14 September 2026. Recorded test results retain their original scope; they were not rerun for this site.

← All selected workNEXT PROJECTEETRE ↗