Skip to content
Hero Studio is an attempt to build an studio similar to Bitwig Studio or Ableton Live
Rust JavaScript TypeScript CSS
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
app-electron
app-server small refactor May 27, 2019
core small refactor May 27, 2019
.gitignore
.travis.yml
Cargo.toml Websocket server (#12) Feb 3, 2019
LICENSE
README.md updated roadmap May 27, 2019
rustfmt.toml

README.md

TravisCI build status

Hero Studio

This project is an attempt to build a music studio similar to Ableton Live or Bitwig Studio in the long term.

For the short term my main goal is to learn the core details about DAWs and audio programming, and may be to use the core engine to build more modest applications such as a VST host for development of plugins, a Raspberry Pi recording device, or a tracker.

UI development

I plan to make this project very modular and keep UIs as separate applications. The plan is to have an engine that allows communication from external systems such a UI or a surface MIDI controllers, through some RPC mechanism (currently WebSockets + some serialization protocol).

I have been exploring several possibilities for building GUIs, more information can be found in the wiki.

Organisation

This is a multi-project composed by:

  • core: The core data model and logic.
  • app-server: The application server that runs the Audio/MIDI engine.
  • app-electron: Very preliminary prototype of a GUI with Electron.

Running

For running the main application you need to run the following commands:

cd app-server
cargo run --release

But bear in mind that you will need to install PortAudio and PortMIDI before running the project, as this is using the portaudio and portmidi crates that depend on their binaries and headers.

If you get an error like:

error while loading shared libraries: libportaudio.so.2: cannot open shared object file: No such file or directory

then you should install the binary dependencies and headers for PortAudio and/or PortMIDI:

Installing PortAudio & PortMIDI in Ubuntu

# ubuntu
sudo apt-get install libportaudio2 libportmidi-dev

Installing PortAudio & PortMIDI in MacOS

brew install portaudio portmidi

Tests

Tests can be run with:

cargo test

Roadmap

  • core: Basic transport logic with accurate timing: play, stop, loop
  • app-native: Allow MIDI configuration through studio.toml
  • core: MIDI bus system
  • core: Implement a basic metronome using MIDI notes
  • core: Management of time and sync between different clocks: Audio, Midi, Host, Ticks
  • app-server: Build MIDI output abstraction to send MIDI events to a device using CoreMIDI & PortMIDI as an initial impl
  • app-server: Explore ways to avoid locks and allocations from the real-time processing threads
  • core: Implement an audio based metronome and investigate the MIDI metronome drift.
  • app-server: Add MIDI input support
  • app-server: Add VST plugins support
  • rethink the project submodules into something like (ui-electron, server and engine)
  • Start exploring UI integrations (some progress already done with Electron, but would like to test Qt too)
  • core: Filling MIDI output buffers from the Song clips (initially choose one type of clip between pianoroll, step-sequencer, drum-box).
  • ...
You can’t perform that action at this time.