Repository navigation
Banks And Patches
A bank always contains 128 numbered slots, matching the range of a MIDI Program Change message. This fixed address space keeps program numbers stable for DAW automation, sequencers, controllers, and set lists.
An empty slot remains addressable. In the browser it loads the Init sound and remains available to previous/next navigation, so it can be selected as a write destination. Plugin Program Change behavior for empty slots is documented in MIDI control.
Along the foot of the panel:
| ‹ › | previous and next slot, wrapping at both ends |
| the name | which patch is loaded, and out of which bank — click it to open the browser |
| WRITE | put the sound you have into a slot |
| CONFIG | what the controllers do, and the manual |
| VOL | master volume, which is not a patch parameter |
Click the patch name. Banks down the left, slots down the right in numbered columns filling downward — 000–063 in the first column, 064–127 in the second — so a run of numbers stays vertically adjacent and "somewhere in the forties" is findable by eye.
Click a slot to load it, double-click to load it and close. Search filters the bank list by name; with a hundred and seventy-five banks open that is the difference between a list and a haystack.
Three buttons above the bank list:
- New — an empty bank, 128 slots with nothing in them, to write into.
-
Add — a bank from a file: a
.jsonbank, a.zipof patches, or one.sy1. -
Folder — a directory of
.sy1files, which is how the reference keeps its own banks.
And along the foot:
- EXPORT — write the open bank to a file you choose. In a plugin that means your Downloads folder.
- KEEP — make the open bank the one this instrument comes back to. Plugins only; see where things are kept.
- DONE — close.
Select WRITE to enter write mode. In normal browser mode, selecting a slot loads it. In write mode, selecting a slot chooses the destination without loading it; this preserves the sound currently being edited.
Review the proposed patch name before confirming. The name describes the current sound, not the sound previously stored in the destination. The destination is shown in amber and may differ from the currently loaded slot.
Caution: Writing replaces the selected destination slot.
Five input forms are supported:
.json |
a quesynth.bank or quesynth.patch document — this project's own format |
.zip |
an archive of .sy1 files: one bank |
| a folder | a directory of .sy1 files: one bank, ordered by file name |
.zip of .zips |
the published collection — a hundred and seventy-five banks in one file |
.sy1 |
one patch. It arrives as the sound you are playing, not as a bank |
File names are compared numerically, so 10 Gamma sorts after 2 Beta rather than between 1 and 2. Sorting them as plain text is what puts a bank's hundredth patch third, and the numbering in those names is the point of them.
An archive of archives is listed, not read. Opening all of them would be eleven megabytes of inflating and some twenty thousand patches built in order to show a hundred and seventy-five names, and only one is ever wanted at a time — so each row keeps the bytes of its own archive and opens it when it is picked. Listing the collection takes about 3 ms; opening one of its banks about 80 ms.
Persistence follows the ownership model of each host.
The browser uses local storage for four items:
- Current sound — restored after a page reload.
- Factory bank working copy — retains sounds written into the supplied bank.
- MIDI desk map — retains assignments created through CONFIG.
- Master volume — restores the browser output level.
Clearing site data removes these values. Export a bank before clearing browser storage or moving work to another browser profile.
Banks you opened from a file are not kept. They are already on disk, under their own names.
The current sound is saved by the host, into the project, through the mechanism each format provides for it — getState/setState in VST3 and CLAP. That is what a DAW expects, and a panel that also wrote its own copy would be a second version of the same state, restored in an order neither side controls.
The bank is a file, because nothing in either plugin format saves one. A bank is not part of a song; it is part of the instrument, the way it is on hardware.
%LOCALAPPDATA%\Quesynth\user-bank.json
VST3 and CLAP share this file so a slot written in one format appears in the other. Concurrent writes use last-writer-wins behavior; avoid writing a bank from multiple plugin instances at the same time.
The panel tells the plugin about the bank whenever it changes — loaded, switched, written into — because a plugin selecting programs out of a bank the panel is not showing means one program number is two different sounds.
Writing to the file is a separate question with a different answer:
- Writing a patch into your own bank saves it.
- Opening somebody else's bank does not. Browsing a
.zipshould not overwrite what you had. - KEEP designates the open bank as the persistent user bank.
If the file is missing or unreadable, the bank compiled into the plugin is used and the file is left alone — refusing to start an instrument over a convenience file would be worse than forgetting.
← The panel · MIDI control →
Operation
Sound design
Technical reference