Newsletter #16 – The Whole of a Piece
A piece in Ooloi now has a complete representation, and every part of it can be handled directly. The players, the instruments each of them holds, the staves beneath those, who doubles on what, which musicians appear in the full score and which in each part, what everything is called and how it is numbered. All of it is there, and all of it is worked by dragging, dropping, and editing in place. One vocabulary of gestures covers the whole of it, and every change is visible to collaborators as it happens.
This is the principle the project rests on, followed to its conclusion. Ooloi has represented music as musical fact throughout: a pitch is a spelling rather than a number, a time signature keeps its own description, an accidental is derived rather than decided. Carried up to the constitution of the piece itself, that leaves nothing for a dialog to configure: there's no setup layer standing apart from the musical facts, so arranging a piece means handling those facts directly. The numbering follows because the model knows what a doubling is; the parts follow because it knows what a layout is.
The representation is complete short of the music itself, which is what arrives next. The Piece Window, where all of this happens, is finished apart from a short list of small items; Delete These Five Staves? reports from the end of that stretch.
So Ooloi now numbers musicians and instruments by itself, as you drag. First flute, second flute; and separately, the dedicated piccolo player who is Piccolo 1 while the first flautist doubling on piccolo is Piccolo 2. Two dimensions that do not map onto one another, and nothing to set by hand. ADR-0054 is the specification; Doublings works through it from the instrumentarium of Elektra.
Undo and redo are now complete across the whole application, plugins included: a plugin author writes no undo code and can't get it wrong. What Undo Remembers sets out what belongs in an undo chain and what doesn't, and why collaboration settles the question rather than complicating it; the design is in ADR-0015.
Quitting now asks about unsaved work, and the next launch reopens the windows you left. That much is ordinary desktop behaviour. What sits behind it is not: Ooloi identifies a piece by what it is rather than by where it is kept, and no part of the interface handles a path, so the same operations serve whether a piece is on this machine or on a collaborator's. Concealing that is the work: the difficulty is real, and it belongs on this side of the interface rather than the user's.
Before the Piece Window closes I'm going through a list of small defects and loose ends accumulated along the way. All of it is enjoyable work, for the plain reason that these tickets are far less complex than the semantic work that preceded them. The most recent concerned the twenty-two languages Ooloi ships in, where a single confirmation message turned out to be wrong in four of them.
Separately, and about how the project is made rather than what it does: when the source is released, the whole development apparatus goes with it: instructions, prompts, skills, and the tooling that builds the Librarian's corpus. Anyone who clones Ooloi gets the means by which it was made, not merely the result. Rembrandt and Workshop explains the reasoning.
Next come the plugin system and MusicXML import, at which point the engine finally has real orchestral scores thrown at it in volume. The importer written as an ordinary plugin against the public API, with no privileges of its own. Then Skija and the rendering pipeline. Then the notes.
There will be a short pause first. The Swedish summer has a claim on a week or two of this.
— Peter Bengtson ooloi.org