A cross-platform audio player with a waveform-centric interface
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Simon Repp 95ea9c6ff5
Remove boilerplate debug output
2 days ago
src Remove boilerplate debug output 2 days ago
.gitignore Add resources to gitignore 7 months ago
Cargo.lock Update vulkan backend 5 days ago
Cargo.toml Update vulkan backend 5 days ago
LICENSE.txt License the application under GPL-3.0-or-later 7 months ago
README.md Document playback engine shortcuts, revise restart with defaults logic 3 days ago
build.rs Introduce engine abstraction, massively refactor and clean up 6 days ago


Good Form

A cross-platform audio player with a waveform-centric interface

A screenshot of Good Form's interface

Research & Development

Good Form is presently in alpha. It already offers the solid technical foundation and base functionality of an audio player and works very reliably on compatible systems. However due to limited user testing as of now there might just as well be systems on which it will entirely refuse to run. The user interface does not yet represent anything of what Good Form intends to be - this is for now just a usable foundation to work from.

Feature proposition

  • Somewhere between a professional DAW and a casual player - probably a professional player
  • Designed for intent listening and professional usecases
    • Browsing samples
    • Evaluating recordings
    • Studying musical pieces
    • Analyzing audio material
    • At the end of the day enjoying music with a beautiful player
  • No casual playlist, queue, favorite features - other players cover this nicely
  • Strong focus on usability and aesthetics of the interface
  • Custom look and feel - not built around Qt, GTK, etc.
  • Modern graphics (Vulkan natively, with Metal/OpenGL compatibility option)
  • Cross platform, written in Rust
  • Free and open source (GPL3+)

Current functionality

  • Supported formats: flac, mp3, ogg, wav
  • Drag and drop a directory or file onto the window to open it
  • Press T to toggle between the dark and light theme
  • Main Interaction
    • Press Space to play/pause
    • Left-click or Left-drag anywhere to reposition the playhead
    • Shift + Left-drag to define a selection range
    • Press R to play the selected range on repeat (loop)
      • If there is no selection range one is set automatically based on the last play/pause actions
    • Hold Ctrl, move the mouse in some direction and release Ctrl to reposition the playhead
      • Left -> Last play point
      • Right -> Last pause point
      • Up -> Start
      • Down -> End
  • Filetree Navigation
    • Use and to select a directory or file in the filetree
    • Use Alt + / to ascend/descend in the filetree
    • Press Enter to open the selected file or directory
  • Playback Engine
    • Press F5 to toggle the sound playback engine on or off
    • Press Shift + F5 to revert to the default audio device and restart the engine
  • Commandline arguments
    • Run good-form --help to print available flags and options to the console
    • Use --list-hosts or --list-devices to discover available host/device combinations
    • Use --host [INDEX] and/or --device [INDEX] to run Good Form with a non-default audio host/device configuration
    • Pass a path to an audio file or directory to open it right away on startup


Currently you can choose from two experimental snapshot packages provided for debian-based (Debian, Ubuntu) and rpm-based (CentOS, Fedora, RHEL) 64bit systems, both of which are configured for modern graphics only (your system needs to support Vulkan).

For now please use at your own risk and anticipate that the package might not yet work for you.
Note: You can make a valuable contribution by reporting issues you run into on your system!

Still with me? Awesome!

Experimental Debian/Ubuntu 64bit .deb snapshot package
Experimental CentOS/Fedora/RHEL 64bit .rpm snapshot package

Building from source

You will most likely need to install dependencies, see further below for instructions.

Linux/Windows with support for Vulkan

cargo build --features=vulkan --release

macOS with support for Metal

cargo build --features=metal --release

Platforms that only support OpenGL

cargo build --features=gl --release

Note that this currently only compiles, but does not run due to unresolved issues in the gfx-backend-gl crate. I am currently in touch with the gfx-rs developers to work out solutions. You can follow up on progress with the most recent blocker in this issue on GitHub.


This is a best-effort listing of dependencies that might be required on different systems, along with installation instructions.

macOS Catalina

You need cmake installed, for this you can for instance install Homebrew and then run:

brew install cmake

Ubuntu 19.10

Just install all dependencies through the apt package manager:

sudo apt install cmake libasound2-dev libexpat-dev libfreetype6-dev libxml2-dev libx11-dev python3-distutils

Windows 10

You need to install CMake and Ninja, for instance through the CMake installer and Chocolatey Ninja package.