Skip to content

Releases: bonninr/masterpiece

Masterpiece 0.5.3

Choose a tag to compare

@github-actions github-actions released this 20 Sep 03:27

Changes

Sample set loading

  • Console artwork stored as BMP is drawn. JUCE reads PNG, JPEG and GIF; the older sets paint their jambs, keys and drawstops in BMP, and those came out black. 1, 4, 8, 16, 24 and 32 bits per pixel, compressed or not, bottom-up or top-down. A 32-bit file whose alpha bytes were never written is treated as opaque rather than drawn as nothing. (#24)
  • An organ whose folders are linked in from another tree is found: the search for OrganInstallationPackages now walks up from the path as given and from the path with its symbolic links resolved. (#12)
  • One layout cannot be worked out from a path at all -- the packages beside the link, the definition opened through the resolved path. The organ's root folder can now be named outright, on the Engine tab, saved with that organ's other settings. --organ-root <dir> does the same from the command line.

Settings

  • The sample cache can be written wherever the player chooses. A decoded cache is as large as the organs played through it, and a machine often has a small fast disk and a large slow one. Engine tab, saved as soon as it is chosen; empty means the default place beside the other settings. A folder that cannot be created -- a drive that is not plugged in -- falls back to the default rather than stopping the load.
  • The Engine tab scrolls when the window is shorter than its contents. On macOS the default window left the last rows unreachable. (#21)

Installation

  • Windows: masterpiece-0.5.3-windows-setup.exe
  • Debian / Ubuntu / Raspberry Pi OS: sudo apt install ./masterpiece-0.5.3-linux-<arch>.deb (amd64, arm64, armhf)
  • macOS: unsigned .zip; clear quarantine: xattr -dr com.apple.quarantine Masterpiece.app

Full Changelog: v0.5.2...v0.5.3

Masterpiece 0.5.2

Choose a tag to compare

@github-actions github-actions released this 19 Sep 11:55
0603679

Changes

Stability

  • Fixes a crash on load (access violation) in 0.5.1, seen on Begard with and without samples. The per-block stage check added in 0.5.1 moved switches from the audio thread while the load thread was starting the organ (init controls, blower) in the same switch network. The check now waits until a load has finished. (#23)
  • Pallets start no voices until the new organ's audio is in place.

Everything in 0.5.1 is otherwise unchanged; see its notes for pallet-driven pipework.

Installation

  • Windows: masterpiece-0.5.2-windows-setup.exe
  • Debian / Ubuntu / Raspberry Pi OS: sudo apt install ./masterpiece-0.5.2-linux-<arch>.deb (amd64, arm64, armhf)
  • macOS: unsigned .zip; clear quarantine: xattr -dr com.apple.quarantine Masterpiece.app

Full Changelog: v0.5.1...v0.5.2

Masterpiece 0.5.1

Choose a tag to compare

@github-actions github-actions released this 19 Sep 10:22
ef6f9be

Changes

Pallet-driven pipework

  • Pipes reached through Pipe_SoundEngine01.ControllingPalletSwitchID now sound. Keyboard keys engage their KeyboardKey switches. The switch network routes each key through the stop's switch to the pipe's pallet, and a pipe speaks while its pallet is engaged. (#22)
  • Sets with no StopRank rows now play: Alessandria, Erfurt Predigerkirche, Swieta Lipka. All three were previously silent.
  • Key-action, stop-action and blower noise ranks, which only pallets reach, now sound on every set that declares them.
  • Only ranks that no StopRank reaches are driven by pallets, so no pipe sounds twice. Sets played through StopRank are unchanged.
  • A partial preload (--preload-drawn) keeps pallet-driven ranks, since their stops do not name them.

Switch network

  • A linkage asserts its destination on its firing edge, not on its level. A destination is the OR of the linkages currently firing into it.
  • Fixes pallets being closed in the same step they opened: the idle half of a tremulant-on/tremulant-off linkage pair was acting on the pallet.
  • An inverting linkage that is not firing at load still holds its destination on.

Continuous controls

  • ConditionSwitchLinkIfEngaged is honoured. Paired linkages, one live while a switch is engaged and one while it is not, no longer both apply.
  • Solver capped at 64 passes. Conflicting linkages previously cost about one second per audio block on Erfurt Predigerkirche.
  • Stage switches fire when the solver moves a control, not only when a control is set directly. Pipe-delay ramps open their pallets this way. The delay is applied after one audio block, not at the ramp's own speed.

Tools

  • mp-render --load-ranks <ids>: load only the named ranks, to test one rank of a large set in seconds.
  • Headless renders turn off the load-progress tick for the session, without changing the saved preference.

Installation

  • Windows: masterpiece-0.5.1-windows-setup.exe
  • Debian / Ubuntu / Raspberry Pi OS: sudo apt install ./masterpiece-0.5.1-linux-<arch>.deb (amd64, arm64, armhf)
  • macOS: unsigned .zip; clear quarantine: xattr -dr com.apple.quarantine Masterpiece.app

Full Changelog: v0.5.0...v0.5.1

Masterpiece v0.5.0

Choose a tag to compare

@github-actions github-actions released this 19 Sep 04:48
afccd32

Changes

Sample set loading

  • Organ root resolution moved to mp::deriveOrganRoot() in the JUCE-free core, shared by the application and the loader. Resolves the definition path as given, then with symbolic links resolved, and selects the root that has an OrganInstallationPackages sibling. Covers relocated OrganDefinitions, OrganInstallationPackages, or an individual package folder. (#12, #15)
  • Unknown ODF tables: warning issued only when the table contains rows, with the ignored row count. Empty placeholder tables (present in all 22 sets tested) are recorded without a warning. (#20)
  • Missing-sample validation now checks OrganInstallationPackages/<package>/<file>, the path the loader reads, instead of <root>/<file>.
  • Test coverage: three symlink layouts built in a temporary directory. Executed on Linux and macOS CI; skipped with an explicit notice where the OS refuses symlink creation.

Settings

  • Master gain persisted per organ in the .mporgan file and restored on load. (#13, #16)
  • Dedicated writer rewrites only the gain line. A fader change no longer risks committing unsaved Settings-dialog state; previously the level was not saved at all for that reason.
  • Level resets to unity before each load. Organs without a saved value open at 0 dB instead of inheriting the previous organ's level.
  • Trailing blank entries are dropped before rewrite; repeated saves leave the file size unchanged.

Command line

  • --draw-only: draws the stops given by --draw-stops and leaves the console interactive. No recital take, no exit. With --preload-drawn, only the drawn stops' samples are loaded. (#14)
  • --draw-stops without --draw-only retains recital behaviour: draw, play, exit.

Documentation

  • README: "What it is" rewritten to describe the instrument, the sample-set format and the player's function before the implementation. (#17)

Installation

  • Windows: masterpiece-0.5.0-windows-setup.exe
  • Debian / Ubuntu / Raspberry Pi OS: sudo apt install ./masterpiece-0.5.0-linux-<arch>.deb (amd64, arm64, armhf)
  • macOS: unsigned .zip; clear quarantine: xattr -dr com.apple.quarantine Masterpiece.app

Full Changelog: v0.4.2...v0.5.0

Masterpiece v0.4.2

Choose a tag to compare

@github-actions github-actions released this 18 Sep 14:21
a3c0cba

Changes

Sample pitch resolution

  • resolveSamplePitch() now dispatches on Pitch_SpecificationMethodCode. Previous implementation ignored the selector, inferred source from populated fields, and fell through to 0-cent correction.
  • Code 1 sets (pitch in smpl chunk, pitch fields empty — Friesach: 11400/12146 samples; Lemmer: all samples): pipes referencing a recording made for a different note played at the source note. Measured on Friesach: 177/2696 pipes, deviation up to 5 semitones, concentrated in mixture ranks and pedal reeds.
  • Fractional MIDI note from smpl chunk is preserved; no rounding. Retains per-pipe tuning offset (Friesach Principal 8': 2–9 cents).
  • Harmonic-number absent value assigned dedicated sentinel; no longer aliases to 8.
  • Unpitched samples: placeholder Pitch_ExactSamplePitch (100 Hz or organ base pitch) and smpl content of silent references (e.g. Noises/BlankLoop.wav, smpl note 98.3) are disregarded. Affected ranks render as-recorded. Prior resampling error reached -41 semitones where the ODF defines no Noise table.
  • Friesach resolution after fix: 618 pipes as-recorded, 2224 corrected <50 cents, 168 corrected >50 cents.

Audio backends

  • Windows: ASIO device type added. JUCE_ASIO, Windows scope only. Listed when a vendor ASIO driver is installed. Basis: Steinberg ASIO SDK dual-license (Oct 2025), GPLv3 arm, compatible with GPL-3.0-only. Headers via JUCE; no additional download.
  • Linux: JACK device type added alongside ALSA. JUCE_JACK. Runtime dlopen(libjack.so.0); no link-time or package dependency. Build requires libjack-jackd2-dev (native and ARM multiarch, host and target). Entry omitted when library is absent. JACK client name: Masterpiece.

Release engineering

  • All artifacts carry the version in the filename. Unversioned duplicates removed.
  • cmake/set-version.sh synchronizes CMakeLists.txt and README links. Release workflow aborts on missing version token.

Installation

  • Windows: masterpiece-0.4.2-windows-setup.exe
  • Debian / Ubuntu / Raspberry Pi OS: sudo apt install ./masterpiece-0.4.2-linux-<arch>.deb (amd64, arm64, armhf)
  • macOS: unsigned .zip; clear quarantine: xattr -dr com.apple.quarantine Masterpiece.app

Full Changelog: v0.4.1...v0.4.2

Masterpiece v0.4.1

Choose a tag to compare

@github-actions github-actions released this 17 Sep 23:33
65aaa25

Changes

Packaging

  • CPack output added: masterpiece-windows-setup.exe (NSIS) and masterpiece-linux-<arch>.deb (amd64, arm64, armhf). Monolithic app component; application icon and menu entries included; VST3 and LV2 plugins included on Linux.
  • Each package is install-tested in CI (Windows silent install/start/uninstall; .deb install/remove on Debian 12 and Ubuntu 24.04, emulated for ARM; x86-64 start under Xvfb).
  • Portable .zip / .tar.gz archives retained for all platforms.

Linux baseline

  • Linux builds moved to Ubuntu 22.04. Floor: glibc 2.35. Fixes startup failure on Debian 12 and Raspberry Pi OS (GLIBC_2.38, GLIBCXX_3.4.32, ALSA_1.2.10 not found in 0.4.0 binaries built on 24.04).
  • Native .deb dependencies generated by dpkg-shlibdeps. Cross-built packages retain declared list.

MIDI mapping repair

  • MidiMap::repairKeyboardBindings runs on load. Drops channel-colliding keyboard bindings and bindings for manuals absent from the ODF, then applies organ channel assignments. Original file preserved as .before-repair; repaired map written back once. Repair reported via message box.

Registration under held keys

  • Registration changes are reconciled with sounding notes at the next audio block. Newly drawn stops start pipes under the held key's note ID (shared voice-start path; couplers and voicing apply). Retired stops release only their pipes via VoiceEngine::noteOffPipe; remaining pipes and key state are unaffected.

Version identification

  • CMake project version is the single source, exposed as MP_VERSION. Surfaces: window title (Masterpiece <version>), --version, installer file properties. Artifacts published with version in filename; unversioned filenames retained in this release for releases/latest/download links.

Load progress

  • Optional audible tick at each 10% of organ load. Default: off. Setting: loadticks in settings.mpglobal, toggle on Engine panel. Synthesized post-recording; max 1 tap per block, min interval 2 s; skipped thresholds consumed, not deferred.

Tests

  • Test suite committed in-repo: 76 functional, 5 timing. Fixtures: hand-written organ definitions, no sample library (ADR-007). CI executes on Linux, Windows, macOS x86-64 and ARM64. ARM cross-builds covered via .deb install tests.

Installation

  • Windows: masterpiece-0.4.1-windows-setup.exe
  • Debian / Ubuntu / Raspberry Pi OS: sudo apt install ./masterpiece-0.4.1-linux-<arch>.deb (amd64, arm64, armhf)
  • macOS: unsigned .zip; clear quarantine: xattr -dr com.apple.quarantine Masterpiece.app

Full Changelog: v0.4.0...v0.4.1

Masterpiece v0.4.0

Choose a tag to compare

@github-actions github-actions released this 16 Sep 23:43

0.4.0

A playability milestone: the instrument is verified live from a real keyboard, end to end, and the version reflects that status.

  • External consoles sound on every manual, including partially mapped rigs and sets whose pictured drawstops are wired separately from their stops.
  • Drawn manuals and the piano strip light up for external consoles, as they do for file playback; Panic releases externally held notes too.
  • Startup verifies the audio device and falls back to working defaults when the saved setup is unusable.
  • --log-midi reports every incoming message and its outcome.

Masterpiece v0.3.9

Choose a tag to compare

@github-actions github-actions released this 16 Sep 22:33

0.3.9

MIDI input routing -- notes on channels claimed by no manual binding were dropped once any binding existed, silencing partially mapped consoles, the on-screen keyboards, and file channels alike. Unclaimed channels now resolve through the organ''s default assignment (MidiMap::hasChannelBinding); explicitly mapped splits and device-specific bindings are unchanged.

Console stop engagement -- on sets whose pictured drawstops are wired separately from their stops (Friesach), engaging a knob changed only the artwork. Switch movement now also engages the stops it stands for (stopsBySwitch_), resolved once at load.

Audio device fallback -- a saved setup with no live output previously opened silent with no error. Startup now verifies the open device, falls back to factory defaults when it is unusable, and logs the active device, rate and block size.

Diagnostics -- --log-midi reports every incoming message and its outcome (consumed by a mapping, matched manuals, divisions reached, or why nothing plays).

Masterpiece v0.3.8

Choose a tag to compare

@github-actions github-actions released this 16 Sep 20:57

Full Changelog: v0.3.7...v0.3.8

Masterpiece v0.3.7

Choose a tag to compare

@github-actions github-actions released this 16 Sep 19:46

Full Changelog: v0.3.5...v0.3.7