Moiré is a musical live performance application with a DAW-like timeline 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.
fwcd 22d8da29a2
Support hidapi on macOS
5 days ago
assets rename to Moiré and revise roadmap 1 year ago
containers add Cargo config.toml to macOS container 1 year ago
crates Support hidapi on macOS 5 days ago
.codespellignore Add .justfile and various config files 9 months ago
.gitignore add Containerfiles for cross compiling 1 year ago
.justfile Update `jack` dependency and unpin version 4 months ago
.markdownlint-cli2.yaml Add .justfile and various config files 9 months ago
.pre-commit-config.yaml Update aoide and hidapi dependencies 2 weeks ago
.prettierrc.yaml Distinguish file types in prettier config 6 months ago
.rustfmt.toml Add .justfile and various config files 9 months ago
Cargo.lock aoide: Remove redundant type aliases 1 week ago
Cargo.toml Upgrade to Rubato v0.13 pre-release 4 months ago
Cross.toml add Cross.toml to pass through environment variables 1 year ago
LICENSE.txt initial commit with a README, ROADMAP, and GPLv3 license 1 year ago
README.md Use Prettier for auto-formatting Markdown files 2 months ago
ROADMAP.md Use Prettier for auto-formatting Markdown files 2 months ago

README.md

Moiré

Moiré will be a new DJ application written in Rust with a DAW-like timeline interface. Refer to the roadmap.

Come say hi on the Zulip chat.

A moiré is "an interference pattern produced by overlaying similar but slightly offset templates".

♫ When the spacing is tight / And the difference is slight / That's a moiré ♫

XKCD comic by Randall Munroe licensed under Creative Commons Attribution-NonCommercial 2.5 License.

Moiré is licensed under the GNU General Public License version 3 or later.

Building & running

Moiré is written in Rust and has few C dependencies.

JACK is required on all operating systems. On Windows and macOS, libjack does not need to be available at build time, only at runtime. On Linux, Pipewire JACK can be used instead of JACK1 or JACK2 (pipewire-jack-audio-connection-kit-devel package on Fedora). JACK/Pipewire needs to be running before running Moiré.

On Linux, at least one of the x11 or wayland Cargo features must be enabled. Both are enabled by default. The x11 feature requires the xcb library (libxcb-devel package on Fedora).

On Linux, fontconfig is required. Also, an XDG Desktop Portal implementation that supports the org.freedesktop.portal.FileChooser D-Bus API needs to be available at runtime. The KDE, GNOME, and GTK XDG Desktop Portal backends provide this, but the wlroots backend does not. The wlroots backend can be installed simultaneously with another backend that provides the FileChooser API.

After these dependencies are installed, building is as simple as:

cargo build

and running is as simple as:

cargo run

Development

Various development tasks are automated using just recipes that are configured in .justfile.

Use Cargo for installing the just command:

cargo install just

Get started by installing (or updating) the dev tools required for the project:

just setup

List the available recipes:

just

Upgrade all dependencies periodically:

just upgrade

Check that all crates can be built independently after modifying dependencies:

just check

Each commit should pass the pre-commit hook checks:

just pre-commit

Goals

  • Equally usable as a casual music player application on a phone in a pocket or a full fleged DJ software on a laptop
  • Support features common on commercially available contemporary DJ controllers from popular manufacturers
  • Eventually support timecode vinyl control
  • Eventually crossplatform (Linux, Windows, potentially Android) but focusing on Linux first (desktop and mobile Linux)
  • Strive for designs that work for a wide variety of use cases before resorting to adding options
  • Actively work to solve problems upstream and collaborate with other projects
  • Purely FOSS without proprietary dependencies beyond operating system APIs
  • Use FOSS infrastructure as much as practical (exceptions can be made, for example, for building the application on proprietary operating systems)
  • Consensus-based decision making and cooperative, nonhierarchical governance. Irreconcilable disagreements will be decided promptly by voting. Details will be worked out as more people join.

Non-goals

  • Video playback, mixing, manipulation, or generation. Communication with external video applications over standard protocols would be welcome though.
  • Imitating other DJ software verbatim. This is its own application. Proposals will be evaluated on their own merits, not simply because another software does it that way.
  • Antifeatures (functionality that acts against the interest of the user), for example DRM. Antifeatures also include interacting with any network services such as music streaming services whose terms of service would require implementing artificial restrictions.