#terminal #tui #music #youtube #mpv

app termusic

Terminal Music Player written in Rust. Can download music from youtube(netease/migu/kugou) and then embed lyrics and album photos into mp3/m4a/flac/wav/ogg vorbis files.

47 releases

Uses new Rust 2021

0.6.16 May 21, 2022
0.6.14 Apr 29, 2022
0.6.11 Mar 8, 2022
0.6.4 Dec 24, 2021
0.2.11 Jul 16, 2021

#5 in Audio

Download history 190/week @ 2022-03-13 151/week @ 2022-03-20 44/week @ 2022-03-27 43/week @ 2022-04-03 11/week @ 2022-04-10 47/week @ 2022-04-17 232/week @ 2022-04-24 299/week @ 2022-05-01 371/week @ 2022-05-08 811/week @ 2022-05-15 238/week @ 2022-05-22 459/week @ 2022-05-29 253/week @ 2022-06-05 17/week @ 2022-06-12 19/week @ 2022-06-19 59/week @ 2022-06-26

399 downloads per month

MIT and maybe LGPL-2.1

3.5MB
21K SLoC

Build status crates.io dependency status

Terminal Music Player written in Rust

Listen to music freely as both in freedom and free of charge!

Main view Tag editor

Freedom: As time goes by, online service providers control pretty much everything we listen to. Complicated copyright issues make things worse. If my favorite song cannot be found on a website, I'll probably just not listen to them for years.

Free of charge: You can download from YouTube, NetEase, Migu and KuGou for free. No need to register for monthly paid memberships.

As a contributor of GOMU, I met serious problems during development. The main problem is data race condition. So I rewrote the player in rust, and hope to solve the problem.

Supported Formats

Below are the audio formats supported by the various backends.

In the case that metadata is not supported, an attempt will still be made to play the file.

Format (feature) Symphonia (default) Mpv (mpv) Gstreamer (gst) Metadata
ADTS Yes Yes Yes No
AIFF No Yes Yes Yes
FLAC Yes Yes Yes Yes
M4a Yes Yes Yes Yes
MP3 Yes Yes Yes Yes
Opus No Yes Yes Yes
Ogg Vorbis Yes Yes Yes Yes
Wav Yes Yes Yes Yes
WebM No Yes Yes No

Installation

Requirements

You will need to build with the stable rust toolchain. Version 1.58 is tested, and according to user feedback, versions below 1.52 do not work.

=======

Backend Requirements
Symphonia You will need ALSA installed to support decoding with symphonia.
Note that the ALSA development files are required. These are provided as part of the libasound2-dev package on Debian and Ubuntu distributions and alsa-lib-devel on Fedora.
GStreamer GStreamer
MPV MPV

Yt-dlp support

You can optionally install yt-dlp and FFmpeg to download MP3s from Youtube.

Packages

Do note that these will be compiled with the symphonia backend.

Arch Linux

Arch Linux users can install termusic from the AUR using an AUR helper.

paru termusic

NetBSD

NetBSD users can install termusic from the official repositories.

pkgin install termusic

Nix/NixOS

Either in the user's environment:

nix-env --install termusic

Or declaratively in /etc/nixos/configuration.nix:

{
    environment.systemPackagess = with pkgs; [
      ...
      termusic
    ];
}

Cargo

cargo install termusic

From Source

git clone https://github.com/tramhao/termusic.git
cd termusic
make

Then install with:

make install

Or if you need dbus mpris support (you will need to have dbus installed):

make mpris

By default, termusic can display album covers in Kitty or iTerm2 (mac, not tested). If you need album covers displayed on other terminals, please install ueberzug, then:

make cover

If you need mpris, cover, and yt-dlp, do:

make full

Finally, you can run it with:

~/.local/share/cargo/bin/termusic

You can copy it anywhere in your $PATH. The configuration file is located in ~/.config/termusic/config.toml. However, as this is a minimalistic program, you don't need to edit the configuration file and almost everything can be set from the app.

TODO

  • key editor.
  • symphonia backend.
  • Better interface to adjust timestamp of lyric.
  • Database.

Contributing and issues 🤝🏻

Contributions, bug reports, new features and questions are welcome! 😉 If you have any question or concern, or you want to suggest a new feature, or you want just want to improve termusic, feel free to open an issue or a PR.

Please follow our contributing guidelines

Thanks

License

GPLv3 for NetEase api code under src/lyric/netease. MIT License for other code.

Dependencies

~39–82MB
~1.5M SLoC