Listen to music and podcasts freely as both in freedom and free of charge!
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.
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 (rusty ) |
Mpv (mpv ) |
Gstreamer (gst ) |
Metadata |
---|---|---|---|---|
ADTS | Yes | Yes | Yes | No |
AIFF | Yes | 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 | Yes(opus not supported) | Yes | Yes | No |
MKV | Yes(depends on codec) | Yes | Yes | No |
Default backend: rusty
You will need to build with the stable rust toolchain. Minimal Supported Rust Version 1.79.0.
git
will be required to build the package.
Backend | Requirements |
---|---|
Symphonia(rusty) | On Linux libasound2-dev is required for building.When using rusty-soundtouch additionally soundtouch and clang (build only) are required. |
GStreamer | GStreamer |
MPV | MPV |
This is required to build and run termusic. For ubuntu: protobuf-compiler
, For arch: protobuf
.
DBus is required for MPRIS control. For ubuntu: libdbus-1-dev
, For arch: dbus
.
You can optionally install yt-dlp and FFmpeg to download from various providers.
To display covers in the terminal itself, feature cover
can be enabled.
To only enable specific protocols for cover support, see Cargo.toml#features.
Feature cover-ueberzug
will require some ueberzug implementation to be present at runtime.
Do note that these will be compiled with the symphonia backend.
Arch Linux users can install termusic
from the official repositories using pacman.
pacman -S termusic
NetBSD users can install termusic
from the official repositories.
pkgin install termusic
Either in the user's environment:
nix-env --install termusic
Or declaratively in /etc/nixos/configuration.nix
:
{
environment.systemPackagess = with pkgs; [
...
termusic
];
}
cargo install termusic termusic-server --locked
git clone https://github.com/tramhao/termusic.git
cd termusic
make
Then install with:
make install
By default, termusic can display album covers in Kitty or iTerm2 (mac, not tested).
If you need album covers displayed on other terminals, you can enable the sixel
protocol or use a ueberzug implementation(x11/xwayland only).
To build with all backends and all cover protocols:
make full
Finally, you can run it with:
~/.local/share/cargo/bin/termusic
You can copy it anywhere in your $PATH
. The configuration file for the TUI is located in ~/.config/termusic/tui.toml
, and the configuration file for the server is located in ~/.config/termusic/server.toml
(or on macOS, ~/Library/Application Support/termusic/tui.toml
, ~/Library/Application Support/termusic/server.toml
, respectively).
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.
- Better interface to adjust timestamp of lyric.
- Rating and sync support.
- Multiple root and easy switch.
- Save playlists.
- Listen to rss feeds/Podcasts. Need a new layout.
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
hasezoey
MIT License for main part of code.
GPLv3 for Podcast code under lib/src/podcast/mod.rs
. Comes from shellcaster.