Shared MIDI channels, organs matched to known libraries, and a cheaper true-stereo reverb - #30
Merged
Merged
Conversation
Reported in #29: with one keyboard on Friesach, only two manuals could be mapped to the same channel. Assigning a third silently unassigned the others, and a mapping that shared a channel was stripped of every such binding the next time it loaded. Both rules came from #3, where a saved mapping sent one keyboard to several divisions by accident. Sharing a channel is a legitimate choice, though: it is how one keyboard plays two divisions at once, and a rig with fewer keyboards than manuals has no other way to reach them. Learning a manual from a pressed key still takes the channel, which is what teaching a rig one keyboard at a time means. A channel chosen in Settings now shares it, and the MIDI tab names the manuals that share one, so a player who did it unawares can see why two divisions are sounding. Repair keeps its other work: a binding for a keyboard the organ does not have still goes, and so does one listed twice over in every field.
Reported again in #12 after 0.5.3: both standard Hauptwerk folders were links, OrganDefinitions into Dropbox and the packages onto an external disk. The definition's real path shares no parent with its audio, so no search of the path can find it. Masterpiece now keeps a list of sample libraries -- folders holding an OrganInstallationPackages directory. It is seeded with the standard Hauptwerk location when that exists, and every load that works adds the folder it used. When a definition's own path leads to no packages, each known library is asked whether it holds the packages the definition names, and the first that does is used. Checking the package ids is what makes this safe: a library holding other organs is passed over rather than reporting every sample missing. The per-organ folder setting still overrides it. The matching lives in the core so it can be tested without a processor writing to real settings. The test builds two unrelated locations, as the reporter suggested, and needs no symlinks, so it runs everywhere.
Reported in #29: Augustine's impulse responses gave "just scratching sound" through a Focusrite on ASIO. Rendered offline, the same IR is clean; timed, it is not. At a 64-sample block the convolution took the engine from 33 to 2.5 times real time, because JUCE's convolution partitioned a two-and-a-half-second room at the audio block size. At the 32-sample buffers ASIO users choose, with a full registration or a slower machine, that falls behind real time, and live that is a crackle. The convolution is now non-uniform: a short zero-latency head, the tail in large partitions. Measured on the Lemmer room at 32-sample blocks it runs at 6.7 times real time -- with twice the work, because of the next change. Hauptwerk impulse responses are four-channel true stereo: left to left, left to right, right to left, right to right. They were read as stereo, which kept the first two paths and dropped the other two. Each input now runs through its own pair, and the four are summed. A Hauptwerk IR package also ships one file per sample rate; the one matching the device is now used, instead of resampling another, which changes the apparent size of the room. And the IR is normalised by its energy across all four paths with one gain, so the room keeps its balance and sits at the level it did.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three fixes for 0.5.4.
Several manuals on one MIDI channel (#29). With one keyboard on Friesach, only two manuals could be mapped to one channel: assigning a third unassigned the others, and a mapping that shared a channel was stripped on the next load. Both rules came from #3. Sharing is now kept, since it is how one keyboard plays two divisions.
Organs matched to a known library (#12, reported again after 0.5.3). With both standard Hauptwerk folders linked to unrelated drives, the definition's real path shares no parent with its audio, so no path search can find it.
Room reverb (#29, second half: Augustine's IRs gave "just scratching" on ASIO). Offline the IR renders clean; timed, it does not keep up at ASIO buffer sizes.
Verified against Augustine's Lemmer IR package (four-channel, 44.1/48/96 kHz). Not verified on the reporter's ASIO interface.
Tests: 88/88.