Eigenstate
Notes / Ansatz

Too heavy, and I could not say which notes

A vague listening complaint became seventy-two precise velocity changes. Then the score turned out to agree.

Revised Jason Shen

I was listening to a MIDI rendering of Burgmüller’s Arabesque, Op. 100 No. 2. Something in the left hand bothered me, first in the opening and again about fifteen seconds in. This is what I was hearing:

The whole file, both hands

What I was hearing

Every note in the MIDI file, left to right in time. The two marked stretches are the parts I complained about. Play the piece, or click anywhere in it to jump there.

Right handLeft hand

the chords I meant, found latereverything else

283 notes from mid inspect of the original file: right hand on track 1, left hand on track 2. Audio is the session's full-length render.

I did not know yet that every one of those chords was struck at the same velocity. I only knew how it sounded. The opening felt heavy: the piano struck at even intervals with the same force each time, and the middle did the same. What I actually said was less precise than the feeling. It was too repetitive, too cluttered.

No bar numbers, no note names, no parameters. A feeling about sound, in ordinary language. I had not looked at the score.

I was working with an agent through OliviaMIDI, a tool that lets a person and a language model collaborate around the same MIDI file. The Rust core, Battuta, reads, modifies, and diffs MIDI through a command-line program called mid. By the end I had learned something about the piece I did not expect.

The opening is easy to locate. The similar part in the middle is not. It could mean an entire passage or only the accompaniment within it. Adjusting everything in range would drag the melody down with the chords.

The agent read the file and found the candidates: left-hand chords in bars 1–6, and a similar figure returning around bar 20.

Candidates, not targets. I needed to hear them.

The agent rendered two short trial listens. The second started one bar early, so I could hear where I was. A listen can be wider than the edit: that bar would be heard, not touched.

Second trial listen

What I heard, and what could change

Bar numbers follow the MIDI file, which here match the printed score.

I listened, and could say more. Yes, that was it. I wanted the dynamics to curve: the opening should feel like an entrance, and the middle could stay even but alternate heavy and light.

The direction came from language. The object came from listening. The precise file locations were the tool’s job.

In the original file every one of those chords had velocity 69, the force of the key strike. The agent proposed a shape for each passage:

Twenty-four chords, one parameter

Flat at 69, then shaped

Each column is one left-hand chord; its height is the strike velocity shared by the chord's three notes. Play a passage, then choose which version you hear while it runs.

Opening, bars 1–6a gradual entrance

Version to hear for Opening, bars 1–6

The clip covers exactly the twelve edited chords.

Original clipEdited clip

Return, bars 20–25heavy-light alternation

Version to hear for Return, bars 20–25

The clip starts one bar earlier, at bar 19, which was heard but not edited.

Original clipEdited clip

Velocities from the edit set. Both clips of each passage are cut at the same source times from two full-length renders made with identical playback settings; choosing a version changes which recording you hear, not the playback. Velocity is the strike force FluidSynth receives, not a loudness value.

These numbers are one audible interpretation of my words. I set the direction; the agent proposed the values; my ear judged. The alternation’s heavy beats are also lighter than the original 69. I had not asked for that; it was the agent’s choice, and I kept it after listening.

Each passage has twelve chords of three notes: seventy-two notes modified in total. Pitch, timing, duration, and melody were preserved. The next listen could answer a clean question: with only these accompaniment velocities changed, how does it sound?

mid apply wrote a new MIDI file and kept the original. mid diff reported seventy-two velocity changes and nothing else, and a separate parser agreed. Every render used the same playback settings, cut from one full-length render. Whatever I heard differently could only come from those seventy-two notes.

I listened again. It was right.

What the score had to say

Afterward I asked a question I should have asked earlier: why did the composer write it that way? Were those uniform chords serving a purpose I was overriding?

The MIDI came from Mutopia, generated by LilyPond, and Mutopia publishes the printed score alongside it. The page marks the opening piano, puts staccato dots on the first two bars of chords, and writes a crescendo. The MIDI rendered all of it at a flat velocity of 69, with every chord sustained to the next beat.

Bars 1–6, twice

What the page asks for, what the file played

Printed score

First system of the printed score, bars 1 to 6. The left-hand chords are marked piano, the chords in bars 1 and 2 carry staccato dots, and cresc. is written at bar 5.

p at bar 1staccato dots, bars 1–2cresc. at bar 5

MIDI file

Twelve chords at velocity 69, each sustained to the next beat.

Score: Mutopia Project, typeset by Bas Wassink with LilyPond 2.16.1, public domain. Source page.

What I heard as too heavy, too repetitive, was not entirely a preference. Part of it was information lost when notation became a MIDI file. The staccato and dynamic shaping existed in the score. They were not in the rendering.

That changes what the edit was. Not only taste: in one parameter, it compensated for expression the rendering had discarded. The numbers were still an interpretation; they did not restore the staccato or follow the written crescendo. But the direction — lighter, graduated, varied — had been in the score all along.

I could have started by reading the score. Instead I started by listening, noticing something wrong, and saying so without technical vocabulary. From there: a trial listen to find where, numbers to make the direction audible, a tool to change exactly those notes, a check that nothing else moved, and another listen.

The score discovery came after. That order is the one I want. I would rather start from what I hear, change one thing, hear the result, and bring a more specific question to the notation, than try to implement the score faithfully without knowing what bothered me.

This was two passages, one parameter, one piece. It does not generalize to every vague description a listener might offer. The next ambiguous “that part” will still need a trial listen and a confirmation before anyone edits anything.

Case files and versions

My words during the session, in the original Chinese: first 开头的匀间隔同强度敲钢琴 和中段同类的匀间隔敲…太重复杂乱了; after the trial listens 嗯对,感觉力度要更有层次曲线一点?第一段有种渐入的感觉,中段可以匀,但是重轻重轻交替; after the final listen 很好 改到我想改的位置了.

Recorded 27 September 2026, using mid 0.1.3. Source MIDI from Mutopia Project (Public Domain, typeset by Bas Wassink, LilyPond 2.16.1).

Case files: input MIDI, edit set, output MIDI, diff report, independent verification.

Verification: mid diff --tolerance 0 compared the two files by note identity and found seventy-two velocity changes, with no additions, deletions or other differences. An independent check with Mido, a separate MIDI parsing library, found 72 onset velocities changed and 519 other events identical in value, timing, and order.

Playback: FluidSynth 2.6.0, GeneralUser GS soundfont, gain 0.2, reverb and chorus enabled, 44.1 kHz stereo, no per-file loudness normalization. The same velocity through a different piano sample library can sound different, so these settings were held constant across all renders. Excerpts were cut from one full-length render rather than rendered as separate fragments, so each passage keeps the acoustic context leading into it.

Figure audio: the switchable clips are cut at identical source times (0–4.74 s and 14.21–19.74 s) from the session’s two full-length renders, original.wav and the render of the edited take, with 20 ms edge fades and no normalization. The score excerpt is rendered from Mutopia’s A4 PDF.

Software and installation: OliviaMIDI repository. Editing format per mid apply --help at the version used.