Music Set Scripting language
Go to file
2023-12-03 22:22:44 -05:00
.github Create FUNDING.yml 2023-06-04 20:47:30 +00:00
bliss-rs@2dcdd5643b Add radio sorter with improved music analysis and misc cleanup 2023-01-24 22:44:56 -05:00
extras Update licensing info and some doc typos 2022-07-02 16:09:58 -04:00
interpreter Fix playlist filepath generation to ignore already-absolute paths 2023-12-03 22:22:44 -05:00
m3u8 Update repo url 2023-07-15 16:15:50 -04:00
mpris-player@2e843ec8d9 Create barebones music player for mps interpretor 2021-12-10 16:53:22 -05:00
player Add clear and pause-after REPL commands 2023-10-29 17:40:48 -04:00
src Add clear and pause-after REPL commands 2023-10-29 17:40:48 -04:00
tests Change file extensions to .muss 2022-07-30 00:05:38 -04:00
.gitignore Fix tests for rename 2022-07-01 17:50:07 -04:00
.gitmodules Migrate bliss-rs to git.ngni.us 2023-08-24 19:30:20 -04:00
Cargo.lock Improve song duration reporting, change to fork of playback library with duration fix 2023-09-17 16:47:22 -04:00
Cargo.toml Implement REPL command to add current item to a m3u8 playlist 2023-08-22 21:05:41 -04:00
LICENSE Create LICENSE 2022-01-01 04:30:05 +00:00
ngnius.muss.desktop Add ?skip and ?list REPL commands and fix some missed names 2022-07-08 21:24:46 -04:00
README.md Update READMEs with newer syntax 2023-07-08 20:40:05 -04:00
README.tpl Update licensing info and some doc typos 2022-07-02 16:09:58 -04:00

muss

repl_demo

Sort, filter and analyse your music to create great playlists. This project implements the interpreter (./interpreter), music player (./player), and CLI interface for Muss (./). The CLI interface includes a REPL for running scripts. The REPL interactive mode also provides more details about using Muss through the ?help command.

Usage

To access the REPL, simply run cargo run. You will need the Rust toolchain installed. For a bit of extra performance, run cargo run --release instead.

Examples

One-liners

All songs by artist <artist> (in your library), sorted by similarity to a random first song by the artist.

files().(.artist? like "<artist>")~(~radio);

All songs with a .flac file extension (anywhere in their path -- not necessarily at the end).

files().(.filename? like ".flac");

All songs by artist <artist1> or <artist2>, sorted by similarity to a random first song by either artist.

files().(.artist? like "<artist1>" || .artist? like "<artist2>")~(~radio);

Bigger examples

For now, check out ./src/tests, ./player/tests, and ./interpreter/tests for examples. One day I'll add pretty REPL example pictures and some script files... // TODO

FAQ

Can I use Muss right now?

Sure! It's never complete, but Muss is completely useable right now. Hopefully most of the bugs have been ironed out as well :)

Why write a new language?

I thought it would be fun. I also wanted to be able to play my music without having to be at the whim of someone else's algorithm (and music), and playing just by album or artist was getting boring. Designing a language specifically for iteration seemed like a cool & novel way of doing it, too (though every approach is a novel approach for me).

What is Muss?

Music Set Script (MuSS) is a language for describing a playlist of music. It can execute SQLite select clauses or directly query the filesystem. Queries can be modified by using filters, functions, and sorters built-in to Muss (see interpreter's README.md).

Is Muss a scripting language?

Yes. It evolved from a simple query language into something that can do arbitrary calculations. Whether it's Turing-complete is still unproven, but it's powerful enough for what I want it to do.

License

LGPL-2.1-only OR GPL-3.0-only

NOTE: Advanced features make use of a fork of bliss-rs a GPL-3.0 licensed music analysis library.

Contribution

This is a hobby project, so any contribution may take a while to be acknowledged and accepted.