An audio and MIDI loop machine written in Rust.
This is still in active development, but the basic functionality already works.
- JACK Audio output
- Audio and MIDI support
- Simultaneous recording of both Audio and MIDI at a time
- As seamless as possible switching between both
- Multiple audio chains (implemented by having multiple JACK ports)
- separate "Main speakers" and "Monitoring headphones" output chains (not yet)
- Browser-based user interface
- Fully (PC-)keyboard-controllable (not yet)
- MIDI clock master
- MIDI transport slave (not yet)
- Close-to-full unit test coverage for the engine
Currently, you need to use the unstable Rust toolchain, version 1.50 or later. You can add a per-directory override using
rustup override set nightly
rustup update # might or might not be needed
You might need to update rust, for more information, you can refer to https://rocket.rs/v0.4/guide/getting-started/.
Start a jack server, then launch the engine using cargo run
. You should now be able to make REST requests
like curl localhost:8000 /api/synths
.
In order to be able to use the GUI, change to the web directory and run yarn serve
. (You might need to yarn install
before). Then access http://localhost:8080 in your web browser.
Run the tests with cargo test
.
Note that the outsourced_allocation_buffer tests are inherently racy and it might be needed to increase
sleep time in fn wait()
. There is nothing we can do about this, as this is the intended use case for
outsourced_allocation_buffer. In normal situations, the allocator thread has between 0.2 to 2 seconds
to react, but this would slow the test suite down heavily.