-
Notifications
You must be signed in to change notification settings - Fork 4
Regular Meetings
Welcome to the Anklang Weekly Meetings Wiki page. Whether you're a seasoned developer, an audio enthusiast, or simply curious about the project, you are invited to join and contribute to our (mostly) weekly video chats about ongoing Anklang developments.
Meetings are usually held every Friday around 16:00 CEST/CET via Jitsi. Related Links:
- Anklang Jitsi Room: Anklang2020 - audio required, video recommended
- IRC channel #Anklang: #Anklang - often used to share links and context during meetings
- Issue Tracker: Issue Tracker - milestones are used to focus and prioritize
- Pull Requests: Pull Requests - PRs may see partial reviews during meetings
The meetings have been going on for a few years. Then, recent advancements in LLMs have allowed us to transcribe audio recordings and produce summaries in a partly automated fashion. The recordings are discarded after the summarization has been finalized. The summaries are listed here in chronological order.
-
Attendees: Stefan and Tim
-
Anklang:
- Release: The Anklang 0.3.0 release has been made, all changes are summarized in the NEWS.md file.
- Licensing Update: Changed public domain code in Anklang from CC0 to Unlicense to ensure compatibility with Fedora's legal requirements while maintaining Public Domain dedication.
- CI/CD Improvements: Removed dependency on the icon-gen NPM packet and the problematic Sharp image library by using ImageMagick for SVG to icon conversion.
- Blog: Release notes are very technical, Stefan suggests making a separate blog post to explain the changes in simpler terms.
- Screencast: Stefan made a screencast for the Anklang release: Anklang 0.3.0
- LV2 Code: Stefan is working on LV2 code, but it's a large PR. Tim suggests splitting the PR into smaller ones.
- Panda: The Panda resampler update should be merged soon.
Both developers will be off on a vacation break for the next couple of weeks.
-
Attendees: Stefan and Tim
-
SpectMorph Progress:
- Release 1.0.0 Beta 1: Stefan has made significant progress on preparing the release, including implementing post-install checks for audio tests, fixing issues with macOS UI events, and optimizing LV2 port groups.
- Post-Install Checks: Stefan has implemented post-install audio checks to ensure that audio rendering is working correctly by checking average volume on different platforms (Linux, macOS, Windows).
- macOS UI Event Handling: Stefan resolved an issue with macOS where mouse events were lost when interacting with the plugin UI in Bitwig. He implemented a property to ensure that mouse click events are captured even when the window does not have focus, aligning the behavior with other macOS applications and improving user experience.
- Instrument Downloading: Stefan has added an option to download instrument data during the build process.
- LV2 Port Group Declaration: Stefan updated SpectMorph's TTL (Turtle) files to declare stereo output port groups for LV2 plugins, ensuring better compatibility with hosts that require explicit port group declarations for multi-channel audio routing.
- Stereo Output Declaration: Stefan has declared the output of SpectMorph as a stereo port group in the TTL file.
-
Anklang Progress:
- CI Improvements: Tim attempted to improve the CI pipeline using ACT for GitHub CI rules, but encountered issues due to differences between Docker environments and GitHub CI VMs. He switched from Bindmounts to Docker Volumes to address file path discrepancies when mounting volumes in nested Docker containers. Despite this, challenges with user IDs and group IDs persist, complicating the process of building consistent release assets across different environments. We now use a custom Docker image from ghcr.io in the GitHub CI, reducing build times to under 2 minutes.
- Docker Issues: The Docker issues with bind mounts and Github user IDs are workaround by using the Github CI user IDs in Docker files and sudo groups. Dockerfile.focal#L103-L105
- Act Issues: Sizable artifact uploads and other things in Act do not work. #2371 #2378
- Liquid SFZ PR: Stefan fixed an issues with Liquid SFZ in detecting changes to the instrument and notifying the loader thread.
- Mechanism for Waking Up Loader Thread: Tim suggests using a main-thread job queue to wake up the SFZ loader thread,
- Notification System: Stefan proposes implementing a notification system similar to the LV2 API's worker thread extension, which would allow plugins to notify the host when work is completed.
-
Attendees: Stefan and Tim
-
Anklang Progress:
- Tim fixed an issue where successful test executions were being logged excessively, cluttering the output.
- A new Grep Dialog can be activated with
Alt+F12
, allowing developers to input a regular expression to grep the project state for assertions during UI event replays. - Support for PCRE2 has been added to the C++ utilities, allowing for more complex regular expressions in the Grep Dialog.
- Tim has implemented conditional gzip content encoding in Anklang's web server, ensuring compatibility with clients that request or handle compressed content.
- Source maps are now always compressed. This was done due to the widespread support for gzip among popular tools and browsers. However, this means that clients which don't request gzip encoding won't receive source maps.
- With some minor issues being pushed back, the milestone 0.3.0 task list has finally reached 100% completion.
-
Anklang LiquidSFZ Loading Issue (#44):
- The issue has been resolved by debugging the entire toolchain and identifying a conditional block that caused input events to be missed during processing.
- A temporary fix was applied, but a proper implementation is still required for scenarios where instrument loading takes an extended period.
- Stefan plans to provide a more robust pull request (PR) addressing the issue properly.
-
SpectMorph Threading:
- Stefan is working on improved threading to get rid of
pthread_mutex_unlock()
which can cause arbitrary stalls. - A solution may involve using atomic operations and use of a spinlock.
- Tim emphasizes the importance of using _mm_pause to avoid bus congestion during spinlocks.
- Stefan is working on improved threading to get rid of
-
SpectMorph, CI/CD and Assets:
- Stefan has been working on improving the Continuous Integration (CI) process, aiming to automate asset building for different platforms.
- He plans to use GitHub's macOS runners for building Mac assets but will manually build some assets due to performance considerations.
- Stefan decides to postpone bumping the compiler dependency and adopting new C++ standards until after the upcoming release to ensure stability.
-
Miscellaneous:
- Tim has nearly completed porting the UI from Vue to Lit, with only two files remaining.
- Choosing between CMake and Meson (instead of Autotools) is discussed for some of Stefan's projects.
- A brief discussion ensues about the feasibility of local backups of GitHub issues, code and wiki repositories.
- A Github API and some tools exist that could assist with issues backups but a specific solution has not yet been identified.
-
Attendees: Stefan and Tim
-
Anklang Progress:
- The source files transferred between the C++ backend web server, and the frontend can now be gzipped, which is utilized for Source Maps.
- Modal error dialogs have been transformed into Notice Popup-Bubbles that scroll up on the right side of the screen.
- The Device-Panel Vue component has been replaced with a new LitComponent (for displaying devices in a track).
- Fixes for menus and properties are being worked on locally by Tim, with plans to push them soon.
- Some focus handling issues with modal dialogs have also been addressed.
-
Panda Resampler:
- Updates were made to Panda Resampler, including resolving Address Sanitizer issues by increasing buffer sizes from 3 to 6 in two code locations.
- A new version was released (0.2.1) that includes Make-Install functionality for system-wide header installation and optional tests building.
- Building a shared library will be added for convenience and Package-Config usage.
- It would be good to create quality tests and add those to the website demonstrating Panda Resampler's performance with oversampling.
-
SpectMorph Progress:
- SpectMorph was updated to use the latest Panda Resampler version, fixing Address Sanitizer triggers in other areas of the codebase.
- Global objects for logging and debugging were reorganized to ensure proper destruction order when plugins are unloaded.
- MIDI channel handling bugs have been fixed, Clap has been updated to 1.2.1, and shared pointers replaced manual object deletion at certain API points.
- LV2-related issues with external file references in sessions have also been resolved.
- Attendees: Stefan and Tim
-
SpectMorph:
- Stefan refactored the code to use a log2f approximation in loops. Splitting the approximation into two halves and two loops allowed to improve vectorization.
- Gcc can vectorize one loop, clang can vectorize both loops. Clang is used for release builds on macOS, gcc is used everywhere else.
- The Log2 approximation of the logarithmic function comes from Anklang under MPL-2.0, permission to relicense under SpectMorph's LGPL is filed as issue #27.
- SpectMorph's audio signal representation for partial tones uses a quasi-sinusoidal component model where the volume of each tone is stored logarithmically (in dB). The approximation helps convert these values between linear and logarithmic scales during audio processing.
- Related, SpectMorph uses an approximation for the exponential function (Exp2) to handle conversions from dB to linear values. This is split into high-byte and low-byte calculations, using tables for each byte's value before multiplication.
-
Panda Resampler:
- Stefan is currently working on addressing issues with the Panda Resampler, which triggers Address Sanitizer errors by reading beyond array bounds. A fix is in progress but its stability needs to be ensured before integrating it into the codebase.
- Tim requests Git (release) tags to be added to the Panda Resampler repo for significant fixes or improvements.
-
Anklang:
- The Anklank Wiki page Regular-Meetings is now up to speed with the recent meeting history.
- Extending the Anklang CI to include Address Sanitizer tests is a desirable goal.
-
Attendees: Stefan and Tim
-
Meeting Summaries:
- Summaries of the weekly meetings are now added to the Anklang Wiki page: Regular Meetings
- The summaries are generated using speech-to-text tools and LLMs, which are somewhat error-prone but are helpful to provide a general overview of the discussions for manual editing.
- Tim is experimenting with different LLMs for transcription and summarization, considering their trade-offs in quality and speed. He has also developed scripts to automate parts of this process.
-
Testbit Tools:
- The
yyhelp
helper script (for simplified Git usage) has been moved into tim-janik/tools/bin/yyhelp. - Other tools are also planned to be moved into the tim-janik/tools, so their development can be tracked in Git.
- The
-
CSS Source Maps: Tim fixed issues with CSS source maps by ensuring they are generated correctly during PostCSS processing. This allows for proper debugging of CSS in the browser's DevTools.
-
Continued LitElement Porting:
- Multiple tree selector Vue components were rewritten into single Lit element, resulting in cleaner code and improved UI.
- Several issues like focus handling and browser inconsistencies (e.g., Chrome's treatment of
.offsetWidth
and.offsetHeight
for elements in hidden<DETAILS/>
HTML containers) had to be fixed on the way, i.e. using the checkvisibility() method. - The remaining Vue dialog components are the preference dialog and a few dynamic dialogs for error display or confirmation dialogs that shouldn't be too hard to replace soon.
- Then, the
Shell
will be the last component currently implemented in Vue. Porting it to Lit will be a significant task due to the amount of logic embedded within it. This might be pushed to after the release.
-
Device Panel and Insertion Order Bug:
- The current plan is to address the device panel next, as it is related to bug #59, affecting the insertion order of devices in a track.
- The rewrite as a LitElement of this component should resolve the bug.
-
Release Planning:
- A minor PR has just been merged #58, the remaining ones will need to wait until after the release.
- After fixing of the remaining outstanding bugs, it is intended to release a new version of Anklang in maybe one week, with further bug fixes and improvements to follow.
- The release will be followed by a new merge window for integrating new contributions.
-
SpectMorph Versioning:
- Stefan has been working on versioning for the upcoming beta release of SpectMorph.
- He has decided on a versioning scheme that is compatible with Debian package management and macOS PKG, using '~beta' for the Debian package and '-beta' for other distribution methods.
- He also discussed the LV2 plugin versioning, which requires a unique version string to ensure compatibility with host applications.
- Stefan has updated the build process to generate these version strings correctly.
-
SpectMorph CI Improvements: Stefan has improved the CI pipeline for SpectMorph to include static compilation of LV2 plugins, ensuring that the built plugins are loadable and compatible with LV2-Lint checks.
-
SpectMorph Refactoring: Stefan has continued refactoring efforts, removing outdated dependencies like
libbse.so
and old Qt code, as well as performing general cleanup of Automake files in preparation for the release.
- Attendees: Stefan and Tim
-
NPM Updates:
- After the recent NPM package updates, various new issues needed fixing and some older packages could be removed.
-
Locale and Logfile Support:
- Early in
main()
, AnklangSynthEngine now initializes the libc locale using the user's environment locale settings. - Anklang now supports --log2file to write messages to a logfile in
~/.cache/anklang/
(in accordance with the XDG spec) instead of stderr. - Logging is enabled automatically when AnklangSynthEngine is started with the ElectronJS GUI.
- Log messages are kept in English and are generated using the POSIX locale.
- Enhanced logging to capture more debug information by default.
- Early in
-
Parallel Tests and PCM/MIDI Device Overrides:
- Support for parallel unit test execution went into trunk.
- Support for overriding the PCM and MIDI devices (
-P
and-M
) went into trunk, unit tests are run without PCM/MIDI devices opened.
-
CI Pipeline Updates:
- Several
#include
and JS fixes were needed to fix CI runs after the recent updates.
- Several
-
Vue to JavaScript Porting:
- More Vue->JS porting work went on. The Noticeboard LitComponent in JavaScript has been completed, allowing to remove related old Vue code.
-
Issue Tracker Prioritization:
- Prioritizing of issues for the upcoming 0.3 release was discussed, focusing on bug fixes and enhancements that need to be addressed before the release.
- A new issue was created to address the improper rendering of choices in the device view, which is critical for the 0.3 release. #59
-
LiquidSFZ Integration:
- They discussed the remaining work on LiquidSFZ, ensuring that instrument names are properly serialized before the release. #44
- The file browser's lack of filtering by extension was noted as a minor issue that can be addressed if time permits.
- SFZ property rescanning functionality is in a stub state, with the actual implementation being more involved and potentially deferred to a later release.
-
Audio Feedback for Drumkits:
- An enhancement was proposed to provide audio previews and drumkit labels in the GUI to improve usability, which will be tracked as separate issue. #60
- Another potential future enhancement is adding audio previews for samples in the piano roll (and maybe file browser), also tracked as separate issue. #61
-
SpectMorph Project Update:
- Stefan decided to postpone further development on the Vocal Synthesizer until after completing the SpectMorph release.
- Stefan has submitted a talk about Spectral Morphing for the FrOSCon conference in August, aiming to finalize Formant Synthesis and make a release before the conference.
-
Attendees: Stefan and Tim
-
Hot Swapping Improvements: The process of hot swapping UI code when editing and reloading has been made faster, though there is still room for improvement.
-
Bundling: All assets that need bundling are now bundled via Rollup for the browser, it turned out to produce leaner bundles than Browserify.
-
Parallel Test Execution: Tim has been working on parallelizing the test suite for Anklang Engine, which currently runs tests sequentially in about 2.9 seconds. GNU Parallel is considered to speed up unit test execution. However, Ubuntu's
moreutils
installs aparallel
binary that is incompatible and occasionally drops jobs. So in order to use GNU Parallel correctly, additional logic is needed to detect its presence. Also, unit tests need to be executed on systems without GNU Parallel installed. For that usingxargs
is considered as a drop in. When running in parallel, the current unit tests run time can see reduction of test execution time by approximately 50%. Stefan suggested that they should ensure GNU Parallel is installed in all development environments and CI systems, as non-developer build times are less of a concern. -
Audio device issues: Executing many tests in quick succession or in parallel causes issues for the pipewire/pulseaudio combination on Ubuntu 22.04 (first, we get device-busy, then pulseaudio hangs). So unit test execution needs adjustments to run tests without active PCM or MIDI drivers. For that, Anklang needs the
--norc
,-P null
and-M null
command line options. -
GUI Bugs: There are outstanding bugs related to CSS that affect the visibility of menus in the GUI, which need to be debugged further. #59 The importance of documenting bugs in the bug tracker was emphasized to ensure that they are not overlooked during development.
-
SpectMorph and Audio Device Issues: Stefan attempted to reproduce a bug related to the SpectMorph plugin without success, suggesting it might be related to specific project setups or configurations.
-
Attendees: Stefan and Tim
-
NPM Updates: All
package.json
dependencies are being updated. This involved moving to a new ESLint config and rewriting the PostCSS integration. ElectronJS updates went seamless. -
Vue to Lit Porting: The FileCrawler work is done, it can be used now to load SFZ and Hydrogen samples into LiquidSFZ.
-
Bash & Emacs Integration: Integration of LSP and FIM (LLM infilling) via elisp and external Python scripts was discussed. Also, discussion evolved around a number of FZF (Fuzzy Finder) based helper scripts for history searching or
fzf-diff
for navigating and cherry picking of Git diffs. -
SpectMorph Development: Stefan talked about the progress in SpectMorph's ability to synthesize words from vocals and sung text, particularly the new capability to handle transitions between vowels. A SpectMorph 1.0 release is planned after addressing remaining bugs and implementing new features like phase randomization for better sound quality at the start of playback. For pre-1.0 beta versions, versioning approaches were discussed, considering the example of GIMP's use of 0.99 versions before a major release. He explained that they currently use MusikXML with phonetic notation for input but aim to automate the conversion from written lyrics to phonetic representation.
-
Clip Functionality and Property Editor: There is a need for a generic property editor in Anklang, which would be useful for various tasks like editing velocity, panning or even text associated with notes in a Pianoroll. They also discussed the importance of improving the functionality of clips within Anklang's Clip Launcher to make it more interactive and scriptable. The conversation touched on the trade-offs between using Arranger vs. Clip-based compositions, especially for creating longer, engaging musical pieces in Anklang.
-
Meeting Transcripts and Regular Updates: A Wiki page to document the topics discussed during meetings was discussed, with a focus on recent updates and future plans rather than detailed process discussions. The idea of a development blog or regular screencasts to communicate progress to users was considered, taking inspiration from projects like Serenity OS and Ladybird, which provide monthly updates. Tim expressed interest in streamlining the process without committing extensive time to video production or manual transcription.
-
Attendees: Stefan and Tim
-
SpectMorph Development: Stefan improved error messages in SpectMorph, to provide more detailed information about what is involved in an error. He also fixed issues with the Continuous Integration (CI) system due to changes in Xcode Clang in macOS 14, which required updates to Automake configurations for correct compiler and linker flags usage. Additionally, he has been working on recording sessions with Sven for vocal transitions, which will require further coding to integrate these recordings into singing synthesis.
-
JavaScript Props and C++ Member Props: All property related changes have been fully merged and pushed to trunk. This simplifies the API significantly, by using member templates properties instead of numerous manually implemented accessor functions. The JavaScript property bindings will synchronously produce a fallback value upon first access, albeit with the correct type (bool, int, float, string, array) depending on the C++ property type. After that, the correct value is fetched via IPC, and future updates are automated by subscribing to C++ notifications and relaying the changes in JavaScript via the JS Signal mechanism.
-
Property API simplification: There is now work possible to majorly simplify the Property binding implementation. The Property binding can just pull all Metadata as an array of key-value pairs. Since Metadata changes occur infrequently, this eliminates the need for all the asynchronous Metadata accessor functions.
-
File Selector Update: The new LitComponent FileSelector has been simplified and is almost done, it will be pushed soon. This update includes a directory display at the top and a file list at the bottom, with improved speed and usability compared to the Vue version.
-
Cleanups: The clang++ based LSP (Language Server Protocol) server made useful suggestions to reduce unnecessary includes in C++ sources. The embedded CSS code was adjusted to improve VSCode's highlighting for CSS snippets.
-
Attendees: Stefan and Tim
-
Change Notification: As previously discussed, the new
Member<>
template property implementation in C++ allows type-safe notification, a significant improvement over the old use of strings for signaling. Vue's reactivity system is conflicting with the JS Signal system due to Vue's use of Proxy objects, which leads to problems with unbound methods when trying to call Get and Set methods on the original objects. As a workaround, the JavaScript API objects are now frozen, to prevent Vue from altering them. This needs additional glue code to maintain functionality within Vue components. Initially, introduction ofJS Signal
affected Pianoroll performance, this was resolved by removing outdated wrapper objects and properly implementing musical note exchange as C++ properties, it is now as fast as before. -
Progress on FileCrawler: Progress has been made on the Filecrawler project, which now works with Properties. There are two branches that need to be merged and rebased. Once done, we will have a usable Filecrawler for SFZ.
-
Git Hooks for Code Quality: A Git pre-push hook is discussed that prevents pushing commits containing "FIXME" or "WIP" messages from being pushed to the repository. This will help with half finished branches that contain several open areas besides lots of other fixes to e.g. CSS, Linting, package dependencies.
-
BlepSynth Updates: Stefan suggests that implementing different oscillator modulation modes in the BlepSynth module may require oversampling of the oscillator signals to maintain bandlimited characteristics. We need investigating of the level of oversampling needed and could look at other DAWs or VSTs for this.
-
SpectMorph Updates: Stefan has been researching and fixing bugs related to the SpectMorph vocal synthesis, focusing on transitions between consonants and vowels within a note.
- Attendees: Stefan and Tim
-
JavaScript Signal Proposal:
- The IPC binding now uses the JavaScript Signal Proposal polyfill, which allows for reactive programming by tracking changes in state and updating dependencies accordingly.
- A limitation exists where
Signal.Computed()
caches the result of callbacks, which is not ideal for functions with side effects or those that need to be called at specific times. - A workaround involves adding additional state to invalidate the cache and ensure synchronous callback execution, but this also requires modifications to the Watcher implementation to prevent infinite loops.
-
Anklang Codebase and Lit Elements:
- The porting to use Lit elements continued, most of the Vue components have been ported except for the dialog and tree components, which are more complex due to their interaction with the remote C++ backend.
-
SpectMorph and Phoneme Labeling:
- Stefan is working on SpectMorph, dealing with the phonetic structure of the German language, which involves more nuanced sounds than the standard alphabet suggests.
- Sven provided a list of 44 distinct phonemes in German, which Stefan plans to use for generating synthetic words to cover all possible sound transitions.
- They discussed manual labeling of these phonemes in audio recordings as a feasible approach, with Sven capable of labeling at a rate of approximately one label per second.
- The idea of using AI to automatically label phonemes has been considered, but manual labeling is currently seen as more reliable and less time-consuming than delving into AI based labeling.
-
Attendees: Stefan and Tim
-
Properties, Notifications, Signals: The Anklang C++ properties emit notifications upon changes. Currently, the JavaScript UI explicitly subscribes to notifications (via the
AseObejct.on()
method) with lots of boilerplate to handle async property value fetching. It would be nice to instead make use of JS Signal, a proposed mechanism for state change notification in JavaScript (stage 1). A polyfill is already available. -
Audio Engine and Automation Lanes: Instrument and effect parameters (Volume, Panning, BPM) are somewhat different from the Object properties exposed in the IPC API. Audio parameters change over time, not just instantaneously, aside from interactive user input. The parameters require frame-accurate processing, changes have to be applied in real time, so those are best handled via automation lanes.
-
FileCrawler: Once the C++ and JS properties are properly implemented and connected, the FileCrawler API needs to be rewritten to make use of the properties and get rid of custom notifications.
-
Release Schedule: The release is postponed until the current infrastructure work and outstanding bug reports are resolved.
-
Attendees: Stefan and Tim
-
Jitsi: First meeting on Jitsi, we will give audio recording via OBS a try (after some fighting with Pipewire). Transcription should be possible, e.g. via Whisper and GGML. LLMs can be used for translation (in case meetings have only German participants) and for summarization. Jitsi internal functionality for recording of meetings is limited and seems to be available only in Chrome, not Firefox.
-
C++ Properties Implementation:
- The C++ classes in
ase/
now have a Member<> template for implementing properties on C++ classes. These map really well through the IPC layer onto properties on JavaScript. - Tim delves into a detailed explanation of implementing properties in C++, referencing a 2005 standardization paper that initially discouraged property syntax in C++ due to its unconventional nature and the principle of encapsulating state in object-oriented programming.
- He describes how modern C++ (C++20) allows for the implementation of properties without allocating additional space for each property, using member function pointers as template arguments.
- Tim has successfully refactored the BPM and Numerator/Denominator properties to use this new approach, which includes automatic registration with the base class and support for notifications upon value changes.
- Related: "C++ Properties - a Library Solution", 2005, by Lois Goldthwaite https://accu.org/journals/overload/13/65/goldthwaite_255/#d0e143 https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1615.pdf
- The C++ classes in
- Vue2Lit: Work on porting the remaining Vue components to LitElement is ongoing. The number of Vue components has been reduced to less than ten, with two more set to be merged soon. The new FileCrawler involves porting the old FileDialog and FolderView Vue components to LitElement.
- Tailwind CSS: Some UI parts make use of Tailwind now. The jury is still out on whether that simplifies things. The Tailwind Dev docs server does not properly support search when used fully offline (during trips/ravel).
-
FileCrawler: Work on a generic file crawler continues, so the UI supports file selections beyond project load/save. The implementation will benefit from a unified property API in the IPC layer.
-
C++ Properties: The C++ implementation of the preferences and related properties have been moved to a global internal preference table, simplifying the old system.
-
Releases: The current cycle is being delayed, but finishing the current work will be worth it.
-
Problems: Undefined behaviors (UB) in C++ is a recurring topic. There was criticism of the C++ committee for not prioritizing elimination of undefined behavior (UB) and memory safety issues, instead of focusing on new features. Rust and Swift do not seem to have this problem. Interestingly, Swift is designed to support local reasoning (in functions) and have safe defaults. Also, Swift offers an incremental migration strategy that allows continued use of older versions until the developer decides to update their codebase. Related: Introducing a Memory-Safe Successor Language in Large C++ Code Bases - John McCall - CppNow 2023 - YouTube
-
Future Work: Plans for the next merge window involve the arranger, two open PRs and LV2 work.
-
Open Issues:
- Implement SFZ file loading, needs the new FileCrawler.
- Fix the bug with menus hanging when closed.
- Resolve issues with device insertion order.