Skip to content

deermichel/soundboard-electron

Repository files navigation

soundboard

soundboard is a live-performance music playground inviting everybody to get creative and to experiment with sounds. It is designed to be straightforward to use and to be understandable without knowing all the muso slang. Behind the scenes, it is a React-based Electron app backed by a C++ native module built around the JUCE framework. It started out as a personal project to learn audio programming, but everyone is invited to contribute :).

some nice screenshot

Contents

Build Instructions

soundboard is known to work under macOS Big Sur on Intel and M1 macs. If someone wants to get their hands dirty and add Linux or Windows support, that'll make a great first contribution :).

  1. Prerequisites
    • Install Node.js
    • Setup SSH key authentication for your GitHub account (technically not required, but you have to adjust the submodule urls otherwise)
  2. Clone the repo
    git clone --recurse-submodules git@github.com:deermichel/soundboard.git
  3. Install npm dependencies
    cd soundboard
    npm install
  4. Build and start the app
    npm start
    
    # or compile on multiple threads to speed up the build
    JOBS=max npm start
  5. Optional: After changing native code, you have to remove the built addon to force a rebuild
    rm -rf build && npm start

Architecture

TODO: write some history starting from Pedalboard and the four attempts before this one.

Features

  • One super-boring instrument: Sine-wave oscillator - BUT with MIDI support
  • Channel mixer with panning and gain controls
  • Here's some music while you wait for new features...

Roadmap

1.0.0 (release date: unknown)

  • [backend&frontend] audio input mono & stereo
  • [backend&frontend] configure audio & midi inputs, outputs
  • [backend&frontend] piano sampler unit
  • [backend&frontend] session handling
  • [backend&frontend] volume meter
  • [backend] fix compile warnings
  • [backend] review TODOs
  • [backend] complete code review (const correctness, method ordering, dead imports, private vs public)
  • [backend] setup and add unit tests
  • [frontend] complete code review
  • [frontend] fix missing or wrong key props
  • [frontend] i18n: en, muso slang
  • [frontend] review eslint ignores
  • [frontend] setup and add unit tests
  • [org] design a logo (idea: spotlight, knob, fader)
  • [org] package app
  • [org] write architecture section in readme

Ideas

  • [backend&frontend] quick transpose
  • [frontend] first steps builtin tutorial
  • [frontend] i18n: church slang
  • [org] setup CI/CD pipeline with GitHub Actions
  • [org] publish in app store
  • [org] use GitHub projects for this roadmap
  • [org] write contribution guide

Third-Party Credits

  • Electron (MIT): They invest an incredible effort to make cross-platform desktop development a breeze.
  • Feather Icons (MIT): Big shout-out to my former co-intern @colebemis for providing these gorgeous icons.
  • JUCE (GPL v3): I consider JUCE as being the washing machine of audio programmers.
  • And thanks to all the unmentioned thousands of contributers behind the amazing projects that keep this app running.

License

This project is released under the GNU GPL v3 License. (See LICENSE for more information.)

soundboard - live-performance music playground
Copyright (c) 2021 Micha Hanselmann

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.