Giter VIP home page Giter VIP logo

termusic's Introduction

Build status crates.io dependency status MSRV

Terminal Music and Podcast Player written in Rust

Listen to music and podcasts 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 (rusty) 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 Yes(opus not supported) Yes Yes No
MKV Yes(depends on codec) Yes Yes No

Default backend: rusty

Installation

Requirements

MSRV

You will need to build with the stable rust toolchain. Minimal Supported Rust Version 1.75.0.

git

git will be required to build the package.

=======

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.
In addition soundtouch and clang(build only) are required.
GStreamer GStreamer
MPV MPV

Protobuf

This is required to build and run termusic. For ubuntu: apt-get protobuf-compiler, For arch: paru -S protobuf.

Dbus

As right now use_dbus is a configuration option, it's required to compile. For ubuntu: apt-get libdbus-1-dev, For arch: paru -S dbus.

Yt-dlp support

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

Album cover support

For kitty, album cover support is default. For other terminals, need ueberzug/ueberzugpp installed and cover feature flag compiled.

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 termusic-server --locked

From Source

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, please install ueberzug or ueberzugpp, then:

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 (or on macOS, ~/Library/Application Support/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

  • 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.

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

Contributors

hasezoey

Thanks

License

MIT License for main part of code. GPLv3 for NetEase api code under src/lyric/netease. Comes from netease-cloud-music-gtk. GPLv3 for Podcast code under src/podcast. Comes from shellcaster.

termusic's People

Contributors

bradshaw avatar devhell avatar eboye avatar escwxyz avatar hasezoey avatar jim4067 avatar lxcode avatar myypo avatar orhun avatar pdckxd avatar porkepix avatar scratchcat458 avatar serial-ata avatar tornaxo7 avatar tramhao avatar zoey-on-github avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

termusic's Issues

[Enhancement] Will this repo support to macos in the future

I've try to compile it manually on macos, but the complier gives an error as below shows โ†“

error: failed to run custom build command for `libdbus-sys v0.2.1`

Caused by:
  process didn't exit successfully: `/Users/jacklanda/termusic/target/debug/build/libdbus-sys-46a31ceeb976ef02/build-script-build` (exit status: 101)
  --- stdout
  cargo:rerun-if-env-changed=DBUS_1_NO_PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG
  cargo:rerun-if-env-changed=DBUS_1_STATIC
  cargo:rerun-if-env-changed=DBUS_1_DYNAMIC
  cargo:rerun-if-env-changed=PKG_CONFIG_ALL_STATIC
  cargo:rerun-if-env-changed=PKG_CONFIG_ALL_DYNAMIC
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64-apple-darwin
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64_apple_darwin
  cargo:rerun-if-env-changed=HOST_PKG_CONFIG_PATH
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64-apple-darwin
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64_apple_darwin
  cargo:rerun-if-env-changed=HOST_PKG_CONFIG_LIBDIR
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64-apple-darwin
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64_apple_darwin
  cargo:rerun-if-env-changed=HOST_PKG_CONFIG_SYSROOT_DIR
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR

  --- stderr
  thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Failure { command: "\"pkg-config\" \"--libs\" \"--cflags\" \"dbus-1\" \"dbus-1 >= 1.6\"", output: Output { status: ExitStatus(ExitStatus(256)), stdout: "", stderr: "Package dbus-1 was not found in the pkg-config search path.\nPerhaps you should add the directory containing `dbus-1.pc'\nto the PKG_CONFIG_PATH environment variable\nNo package 'dbus-1' found\nPackage dbus-1 was not found in the pkg-config search path.\nPerhaps you should add the directory containing `dbus-1.pc'\nto the PKG_CONFIG_PATH environment variable\nNo package 'dbus-1' found\n" } }', /Users/jacklanda/.cargo/registry/src/github.com-1ecc6299db9ec823/libdbus-sys-0.2.1/build.rs:6:70
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...
error: build failed
make: *** [fmt] Error 101

I guess it goes wrong because this repo not support to macos ?

Text display detail bug?

The status bar looks like:

Playlist โ”€โ”€โ”ค Total 1 tracks | 03:30 | Loop: consume | Add:last

I believe that Add:last should be Add: last instead.

Version: termusic v0.6.11 (built from latest dev branch, 74fd4a0)

No support for `webm`s, doesn't even detect that it can't play them and refuse to play them

Instead it adds them to the list as 0-duration songs and gets stuck

I thought it wasn't working for a while, as all the music I've downloaded I've stored in webms because they compress the best.

It seems that Symphonia from #33 might fix this, though I don't think it has support for m4a so I don't think it is a perfect solution.

mpv can play all audio format's I've encountered. Does it's library bindings not provide something that is needed?

integration with playerctl

I use playerctl to control music playback but with termusic it doesn't seem to work. My workflow is to use termusic and go to another window in that window if I want to change music I would do it with playerctl but this one did not work. I would like to be able to use playerctl together with termusic

[Feature] Display cover if JPG/PNG file present in folder

I organize my albums as follows : one directory per album with all the tracks and a JPG/PNG file for cover (named cover.{jpg,png})

I'm using Kitty as terminal : cover is displayed properly if ID3 tag (APIC) is present. But I would like the cover to be displayed in terminal if JPG/PNG file is present in the directory with a specific name : cover.jpg or front.jpg.

Add installation instructions for NetBSD

Hi,

Please consider adding the following to the README.md,

NetBSD

NetBSD users can install termusic from the official repositories.

pkgin install termusic

Thanks.
Best Regards,
pin

search track in playlist

First of all, thank you for this excellent software. Now I would like to be able to search for a track in the playlist so that I can reproduce it and that when it finishes the next track is played

"Not Support" shows up for some tracks

First off, amazing cli tool, I love it.

I see "Not Support" show up for some tracks; reading them with crate id3 shows no errors, and the track title and artist can be extracted/displayed normally.

Screenshot from 2022-02-13 21-48-09

Search in folder

Hello! I just tried termusic and it works flawlessly, thank you for this awesome project.

I have a pretty big mp3 archive and one functionality that I couldn't find on termusic is "search in folder". Is it currently possible to do that? I'm sorry if there's a key binding that I overlooked.

So far I tried s but that seems like only for searching on YouTube. I think pressing / and searching in the folder (left menu) would be pretty sweet. I can also work on an implementation and submit a PR if this is a missing feature.

Can't fastforward paused songs in v0.6.11

In v0.6.7, you could fastforward a paused song, but in v0.6.11, this is not possible.

ffv0.6.7.mp4

The above is not possible under v0.6.11. Also, not really related, but I noticed that the rate at which the song is fastforwarded with f is slower in the latest version.

Tested under the gstreamer backend, in alacritty.

Thoughts on the indicator bar above the playlist section

I just upgraded to v0.6.5. Now it looks like: Playlist โ”€โ”€โ”ค Total 5 songs | 15m 40s | Loop: โฌ‡ | Add:๏ฌ 

  • I suggest that "track" is more preferable than "song" since a lot of music tracks are not songs (e.g. orchestra).
  • Using "15m 40s" looks a bit overkill; "15:40" should be good enough. When exceeding 1 hour, "1:04:01" will be good. Also, the player progress bar 1m 4s : 2m 44s should follow, if we ever change the time format in the indicator bar.
  • The symbols after Add: are not really intuitive. I had to do experiments to discover what they represented. Using Add: Next / Add: Last may be better. The specific wording may be open for further discussions. Options include Next/Last, Top/End, Head/Tail, etc.
  • Is it possible to use text (instead of icons) for the loop mode indicator? Using "Normal" / "List Loop" / "Single Loop" will be ok.

Also, while vim-style navigation is cool, I would like to have my good old arrow keys back. This is important for me, and I wish you may consider.

Songs don't play and constantly skip to next song

Hi there,

I just installed version 0.3.13 via cargo and when I add songs to my playlist they say "Current Playing" and then when I move my cursor it cycles through the songs, constantly skipping the songs that it can't play. I have also tried playing a song that has been downloaded via youtube-dl and it does the same thing.

I have the following packages installed on my machine:

gstreamer
gst-plugins-bad
gst-plugins-base
gst-plugins-good
gst-plugins-ugly

All are version 1.18.4 and 64-bit. I am running Gentoo Linux. Might I be missing a dependency? Is there a good way to troubleshoot this issue?

Any help would be greatly appreciated. This app looks amazing and I can't wait to use it.

Thanks!

Some prompts are cut off when the window is too small

When spawning the download prompt with s, the exit prompt with q or the help prompt, the display is a bit cut off and either hides the text box or some other information. This doesn't hold true for all prompt (/ search prompt shows up fine). There may also be others that don't show up properly

image

image

Repeating one song occasionally hangs on `v0.6.7`

When playing a single song on repeat in repeat-one mode, it doesn't go back to playing itself when it's finished and hangs just before it finishes playing (i.e., it'll sit at 3:46/3:47). I can't seem to consistently reproduce this issue for some reason.

Also, after switching to the gst backend, the issue seems to not be present.

Queue order

I noticed that, when I add a track into the playlist in queue mode, the new track would appear on the top of the list, and the player will play from top to bottom.

This appears to be counterintuitive. I personally prefer a first-add-first-play pattern. The most recently added track should be played after previously added tracks.

Let me know if you have alternative ideas.

Time keeps going when on pause

If you put a track on pause it stops playing, time bar stops moving, but time actually keeps going without the track and Termusic skips to the next track when time runs out

The interface doesn't redraw if the terminal size changes

I'm running i3 window manager and have termusic running in a terminal. If I open anything else that changes the size of the terminal running termusic then the interface gets all glitched.
I think there needs to be a way to detect if the terminal has changed and issue a redraw of the interface.

Compile error: or-patterns syntax is experimental

I'm installing using cargo install termusic and get the following error message:

  Compiling termusic v0.3.13
error[E0658]: or-patterns syntax is experimental
   --> /home/james/.cargo/registry/src/github.com-1ecc6299db9ec823/termusic-0.3.13/src/ui/activity/main/mod.rs:194:18
    |
194 |             Some(Status::Running | Status::Paused) => {}
    |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: see issue #54883 <https://github.com/rust-lang/rust/issues/54883> for more information

error[E0658]: or-patterns syntax is experimental
   --> /home/james/.cargo/registry/src/github.com-1ecc6299db9ec823/termusic-0.3.13/src/ui/activity/tageditor/update.rs:222:21
    |
222 |                     COMPONENT_TE_INPUT_ARTIST | COMPONENT_TE_INPUT_SONGNAME,
    |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: see issue #54883 <https://github.com/rust-lang/rust/issues/54883> for more information

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0658`.
error: failed to compile `termusic v0.3.13`, intermediate artifacts can be found at `/tmp/cargo-installMld7fL`

Caused by:
  could not compile `termusic`

To learn more, run the command again with --verbose.

Output of rustc --version --verbose:

rustc 1.52.1 (9bc8c42bb 2021-05-09)
binary: rustc
commit-hash: 9bc8c42bb2f19e745a63f3445f1ac248fb015e53
commit-date: 2021-05-09
host: x86_64-unknown-linux-gnu
release: 1.52.1
LLVM version: 12.0.0

OS: arch linux on x86_64

I could try to fix it and submit a PR if that would be helpful, I'd love to contribute to such a cool project!

Various bugs

Hi,

It seems there has been some changes to the player back-end, it can play next song faster than before which is great!
However, I'm experimenting a few annoying bugs :

  • If I play a playlist, pause the song and leave the player untouched, it suddenly plays and skips to the next song after tens of minutes
  • I haven't found out the conditions to replicate the issue, but sometimes if I quit termusic in a particular way and then launch it again, all playlist are broken: if I play a playlist, first song gets played, but next song in playlist doesn't play. Doesn't matter if it's loop mode or not.
  • If I play a folder which contains music along with the album art (in .jpg or any image format), the player tries to play the image (despite indicating it doesn't support it) and crashes. Especially annoying in random mode.
  • Thank you for enabling custom shortcut! However, it seems the search menu (accessed with "/") still uses the default shortcut and not the ones in config.tomlโ€ฆ)

Keep up the good work!

Feature Request: Have search window linger after selecting a song

Hello! When pressing / to search for a specific song, the search window closes immediately after picking a song. This makes it a little inconvenient when I want to add multiple songs that match a keyword, or search for multiple songs consecutively. Would it be possible to have the window remain open after picking a song?

I vaguely recall this being the default in previous versions, but I'm not sure.

mpris default

Hi,

NetBSD package maintainer here.
Just saw your latest release, thanks.

Although, personaly I have dbus installed on my system, I know a lot of people on *BSD are opposed to its use.

Having mpris as default and forcing dbus will for sure make some people back-off from using termusic.
This is obviously, your call as you are the developer. I will include the dbus dependency on my next update but, thought I'd just let you know the fact.

Best Regards,
pin

Show volume level

I don't know the inner workings of the sound implementation but is it possible to show the volume level on the interface? I think seeing that would be pretty helpful.

(I apologize if it is already being shown and I missed it.)

[Feature request] Don't remove the song from the playlist once played

Hi, thanks for your work : termusic a great CLI tool to play my MP3 songs on Linux.

When a track from a playlist was played, it is removed from the displayed playlist. I wish an option to keep the played songs displayed in the current playlist : useful when the list contains all songs of an album.

Branch structure

Rather than have a dev branch, could you make a stable branch and use master instead? Since github defaults to master when making a PR, it would make it easier to not have to think about it.

Either that, or could you write up a CONTRIBUTING.md that makes it clear you should be targeting the dev branch?

Search prompt colouring looks a little off

After pressing / to pull up a search prompt, I noticed that it looks a little bad with the grey colouring, it would make more sense to just use the same black background all around imo. This also might just be something to do with my terminal (alacritty), I'm not sure.

image

Unable to run `termusic.exe` on Windows

Hello! After going through the installation instructions and installing lots of packages, I was able to compile an exe for Windows. Although when trying to run it, the program panics. I'll attach the terminal output from when the program finishes compiling:

    Finished release [optimized] target(s) in 7m 24s
mkdir -p ~/.local/share/cargo/bin/
process_begin: CreateProcess(NULL, mkdir -p ~/.local/share/cargo/bin/, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [Makefile:32: post] Error 2

C:\Users\laith\Music\terminalplayer\termusic>cd target

C:\Users\laith\Music\terminalplayer\termusic\target>cd release

C:\Users\laith\Music\terminalplayer\termusic\target\release>termusic
thread 'main' panicked at 'Original console mode not set: TryFromIntError(())', C:\Users\laith\.cargo\registry\src\github.com-1ecc6299db9ec823\crossterm-0.20.0\src\event\sys\windows.rs:36:10
stack backtrace:
   0:           0xb85bef - std::backtrace_rs::backtrace::dbghelp::trace::ha1342f348cead49b
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src\..\..\backtrace\src\backtrace/dbghelp.rs:98:5
   1:           0xb85bef - std::backtrace_rs::backtrace::trace_unsynchronized::h431f895d4d021a9e
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src\..\..\backtrace\src\backtrace/mod.rs:66:5
   2:           0xb85bef - std::sys_common::backtrace::_print_fmt::h268587549249780b
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src\sys_common/backtrace.rs:67:5
   3:           0xb85bef - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hf0b5d7043737f5c1
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src\sys_common/backtrace.rs:46:22
   4:           0xbdb4da - core::fmt::write::h262c3fb713ffc6d3
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\core\src\fmt/mod.rs:1163:17
   5:           0xb780a2 - std::io::Write::write_fmt::h3a73c72ba1aaaf37
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src\io/mod.rs:1696:15
   6:           0xb88f00 - std::sys_common::backtrace::_print::h0c4a0674492a7fe1
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src\sys_common/backtrace.rs:49:5
   7:           0xb88f00 - std::sys_common::backtrace::print::h4fd6a700cd528c38
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src\sys_common/backtrace.rs:36:9
   8:           0xb88f00 - std::panicking::default_hook::{{closure}}::h2c0cb277fc1fc478
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src/panicking.rs:210:50
   9:           0xb88a90 - std::panicking::default_hook::h43b1dff01235db8a
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src/panicking.rs:227:9
  10:           0xb89687 - std::panicking::rust_panic_with_hook::he603728c8a0f9941
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src/panicking.rs:624:17
  11:           0xb892b3 - std::panicking::begin_panic_handler::{{closure}}::h4eda58867cacc520
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src/panicking.rs:521:13
  12:           0xb865d7 - std::sys_common::backtrace::__rust_end_short_backtrace::h1e07124d6f9f5e69
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src\sys_common/backtrace.rs:139:18
  13:           0xb89219 - rust_begin_unwind
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src/panicking.rs:517:5
  14:           0xbd7fc0 - core::panicking::panic_fmt::h86526a8d509aa4f5
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\core\src/panicking.rs:100:14
  15:           0xbd8313 - core::result::unwrap_failed::hf0f66878199e7508
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\core\src/result.rs:1616:5
  16:           0x763593 - crossterm::event::sys::windows::disable_mouse_capture::hdd9c1d62907fe3ec
  17:           0x439fe3 - <termusic::ui::context::Context as core::ops::drop::Drop>::drop::ha8e96111a47a3b9d
  18:           0x46577e - core::ptr::drop_in_place<termusic::ui::context::Context>::h7646e7f97875a310
  19:           0x47aa3a - termusic::main::h8d3373a4ebe30e09
  20:           0x430a26 - std::sys_common::backtrace::__rust_begin_short_backtrace::h59382bbb3745bad2
  21:           0x4aca5c - std::rt::lang_start::{{closure}}::h102e30f6d15915ba
  22:           0xb856a7 - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h08b52bd93a4f7206
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\library\core\src\ops/function.rs:259:13
  23:           0xb856a7 - std::panicking::try::do_call::h7323e80cc68cfbc2
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src/panicking.rs:403:40
  24:           0xb856a7 - std::panicking::try::heae7fdcd350d3730
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src/panicking.rs:367:19
  25:           0xb856a7 - std::panic::catch_unwind::h6733449c632e5a90
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src/panic.rs:133:14
  26:           0xb856a7 - std::rt::lang_start_internal::{{closure}}::hd5fb97a1ef9fd5f1
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src/rt.rs:128:48
  27:           0xb856a7 - std::panicking::try::do_call::h378ed81a4337e1b9
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src/panicking.rs:403:40
  28:           0xb856a7 - std::panicking::try::hfe02d0606e509701
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src/panicking.rs:367:19
  29:           0xb856a7 - std::panic::catch_unwind::h27f08792bbecab6c
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src/panic.rs:133:14
  30:           0xb856a7 - std::rt::lang_start_internal::h55e005787b69f69a
                               at /rustc/c1026539bd22e9d070988deaa47b1360cbc76436\/library\std\src/rt.rs:128:20
  31:           0x47ab08 - main
  32:           0x4013c7 - __tmainCRTStartup
  33:           0x4014fb - mainCRTStartup
  34:     0x7ffc26db6ab0 - <unknown>
  35:     0x7ffc27a51dbb - <unknown>
thread panicked while panicking. aborting.

I'm on Windows 11 and using the default cmd terminal. If you need any more information, please let me know!

What does "Queue" mean

Introduction

I happened to notice that, a track does not vanish from the "Queue" after it is finished. In other words, the "Queue" does not "consume" tracks.

This is counterintuitive (at least for me). As we work with the concept "Queue", we usually expect its contents to be temporary (volatile). We suppose that a message queue consumes messages sent to it. A queue should be like a character device.

The Language

From the perspective of language, the "playlist" should be named "library", while the "queue" should be named "playlist". I can sense a misplacement here.

The Feature

From the perspective of feature, it will be good to control the mode of the list ("queue") like:

Mode Name Description
Queue Mode Tracks are consumed after finishing.
Loop Mode The cursor moves down the list and moves back to the first one after finishing the last one.
Single Loop Mode The player keeps playing the same track; the cursor stays.

Keyboard shortcuts Alt+Q, Alt+L, and Alt+S may be good for choosing modes. Additionally, using m to switch through modes will also be good.

The Metaphor

All music playing softwares and hardwares date back to the time of tapes. We learned the ideas of Play/Pause, Seek, and Loop since the tape era.

This proposes the question: Who moves? Does the queue move, or does the cursor move?

Traditional music player softwares (e.g. iTunes) tend to keep a static playlist while allowing the cursor to move down the list as the player plays.

Random Personal Nonsense

The entire "queue" thing is useless for me. I always play entire albums from the beginning to the end. While I know that a lot of people are not like me, I still want to minimize the impact of the existence of the "queue" things when I look for music player softwares.

Conclusion

  • Feature Request: Mode switching in the playlist (currently named "queue"): Queue, Loop, Single Loop.
  • Feature Request: Indicator for the current track in both the library (currently named "playlist") and the playlist (currently named "queue").

P.S. I will appreciate if you may reconsider the naming of the components, and will always respect your choice.

Feature request: One more level of expandable hierarchy

image

I have a library/artist/album/[disc]/track hierarchy structure (the disc level is optional), and I have a shell alias ttermusic for termusic $MYMUSICLIB, so that I may access my music library in a simple manner.

However, I cannot expand the disc directory. I wish one more level may be allowed. Thanks.

Music files must be put into ~/Music?

I don't know whether you have tested it or not.

I move my music files into another folder such as /tmp or ~/test/, you can load those music files into the ui of termusic but they won't be played by termusic.

They are only playable when they are inside the ~/Music or subdirectory inside ~/Music

Not compiling with cargo

error: linking with `cc` failed: exit status: 1
  |
  = note: "cc" "-m64" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-Wl,--as-needed" "-L" "/home/bevan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/tmp/cargo-installd7dnUF/release/deps/termusic-00ec425ab5a7f719.termusic.95cwfboh-cgu.0.rcgu.o" "/tmp/cargo-installd7dnUF/release/deps/termusic-00ec425ab5a7f719.termusic.95cwfboh-cgu.1.rcgu.o" "/tmp/cargo-installd7dnUF/release/deps/termusic-00ec425ab5a7f719.termusic.95cwfboh-cgu.10.rcgu.o" "/tmp/cargo-installd7dnUF/release/deps/termusic-00ec425ab5a7f719.termusic.95cwfboh-cgu.11.rcgu.o" "/tmp/cargo-installd7dnUF/release/deps/termusic-00ec425ab5a7f719.termusic.95cwfboh-cgu.12.rcgu.o" "/tmp/cargo-installd7dnUF/release/deps/termusic-00ec425ab5a7f719.termusic.95cwfboh-cgu.13.rcgu.o" "/tmp/cargo-installd7dnUF/release/deps/termusic-00ec425ab5a7f719.termusic.95cwfboh-cgu.14.rcgu.o" "/tmp/cargo-installd7dnUF/release/deps/termusic-00ec425ab5a7f719.termusic.95cwfboh-cgu.15.rcgu.o" "/tmp/cargo-installd7dnUF/release/deps/termusic-00ec425ab5a7f719.termusic.95cwfboh-cgu.2.rcgu.o" "/tmp/cargo-installd7dnUF/release/deps/termusic-00ec425ab5a7f719.termusic.95cwfboh-cgu.3.rcgu.o" "/tmp/cargo-installd7dnUF/release/deps/termusic-00ec425ab5a7f719.termusic.95cwfboh-cgu.4.rcgu.o" "/tmp/cargo-installd7dnUF/release/deps/termusic-00ec425ab5a7f719.termusic.95cwfboh-cgu.5.rcgu.o" "/tmp/cargo-installd7dnUF/release/deps/termusic-00ec425ab5a7f719.termusic.95cwfboh-cgu.6.rcgu.o" "/tmp/cargo-installd7dnUF/release/deps/termusic-00ec425ab5a7f719.termusic.95cwfboh-cgu.7.rcgu.o" "/tmp/cargo-installd7dnUF/release/deps/termusic-00ec425ab5a7f719.termusic.95cwfboh-cgu.8.rcgu.o" "/tmp/cargo-installd7dnUF/release/deps/termusic-00ec425ab5a7f719.termusic.95cwfboh-cgu.9.rcgu.o" "-o" "/tmp/cargo-installd7dnUF/release/deps/termusic-00ec425ab5a7f719" "/tmp/cargo-installd7dnUF/release/deps/termusic-00ec425ab5a7f719.4w5zmof6fg8a3vg3.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-Wl,-O1" "-nodefaultlibs" "-L" "/tmp/cargo-installd7dnUF/release/deps" "-L" "/tmp/cargo-installd7dnUF/release/build/ansi_colours-305da707f4169e74/out" "-L" "/home/bevan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/tmp/cargo-installd7dnUF/release/deps/libtextwrap-55abf25e5f424ab0.rlib" "/tmp/cargo-installd7dnUF/release/deps/libshellexpand-8b954ecbdc5c8f32.rlib" "/tmp/cargo-installd7dnUF/release/deps/libviuer-74cf21c3c42e994a.rlib" "/tmp/cargo-installd7dnUF/release/deps/libtempfile-8412533598a5e0bc.rlib" "/tmp/cargo-installd7dnUF/release/deps/libremove_dir_all-b2850f33bbe50cfc.rlib" "/tmp/cargo-installd7dnUF/release/deps/libconsole-93e8dc1dad417ee1.rlib" "/tmp/cargo-installd7dnUF/release/deps/libterminal_size-c79d7e218e63acd5.rlib" "/tmp/cargo-installd7dnUF/release/deps/libtermcolor-97f0cb45bf22182f.rlib" "/tmp/cargo-installd7dnUF/release/deps/libansi_colours-e211726e5088d826.rlib" "/tmp/cargo-installd7dnUF/release/deps/libcrossterm-5fec10a339339f45.rlib" "/tmp/cargo-installd7dnUF/release/deps/libsignal_hook_mio-5a1451c56e100ddb.rlib" "/tmp/cargo-installd7dnUF/release/deps/libsignal_hook-94757b8a33214cac.rlib" "/tmp/cargo-installd7dnUF/release/deps/libdirs_next-1a884a19c2c1baec.rlib" "/tmp/cargo-installd7dnUF/release/deps/libdirs_sys_next-4bb0e20180134c1f.rlib" "/tmp/cargo-installd7dnUF/release/deps/libmp3_duration-aa1159a49ed98076.rlib" "/tmp/cargo-installd7dnUF/release/deps/libimage-c065c15671805d05.rlib" "/tmp/cargo-installd7dnUF/release/deps/libbytemuck-242017e4eae52a0a.rlib" "/tmp/cargo-installd7dnUF/release/deps/libpng-1eba88efc26d26e4.rlib" "/tmp/cargo-installd7dnUF/release/deps/libminiz_oxide-cc17d01ca709c90b.rlib" "/tmp/cargo-installd7dnUF/release/deps/libdeflate-27d4112022e4a03d.rlib" "/tmp/cargo-installd7dnUF/release/deps/libadler32-ad7ad90bc9413707.rlib" "/tmp/cargo-installd7dnUF/release/deps/libnum_iter-fe312562e9f8988f.rlib" "/tmp/cargo-installd7dnUF/release/deps/libscoped_threadpool-bc269af4ece9aba3.rlib" "/tmp/cargo-installd7dnUF/release/deps/libnum_rational-c1f51defb8b7c623.rlib" "/tmp/cargo-installd7dnUF/release/deps/libnum_integer-6cdd3d74f1306bc5.rlib" "/tmp/cargo-installd7dnUF/release/deps/libgif-d12493e1b1fcc143.rlib" "/tmp/cargo-installd7dnUF/release/deps/libcolor_quant-19a57f3ff97fd6ff.rlib" "/tmp/cargo-installd7dnUF/release/deps/libnum_traits-01f2f2bad41a599d.rlib" "/tmp/cargo-installd7dnUF/release/deps/libtiff-e77a59d14e5554f1.rlib" "/tmp/cargo-installd7dnUF/release/deps/libweezl-b79695efa9ae8b3a.rlib" "/tmp/cargo-installd7dnUF/release/deps/libjpeg_decoder-e288703fb1a16fe6.rlib" "/tmp/cargo-installd7dnUF/release/deps/librayon-bae7884da51413b8.rlib" "/tmp/cargo-installd7dnUF/release/deps/librayon_core-244510438a3127ad.rlib" "/tmp/cargo-installd7dnUF/release/deps/libcrossbeam_deque-5737246334f960a1.rlib" "/tmp/cargo-installd7dnUF/release/deps/libcrossbeam_epoch-60677b4a611d0d09.rlib" "/tmp/cargo-installd7dnUF/release/deps/libmemoffset-a8770a680b71765d.rlib" "/tmp/cargo-installd7dnUF/release/deps/libcrossbeam_channel-8f32871263acf1a1.rlib" "/tmp/cargo-installd7dnUF/release/deps/libcrossbeam_utils-92d74a4d9da1c46e.rlib" "/tmp/cargo-installd7dnUF/release/deps/libhex-cef67a7c0e8dd950.rlib" "/tmp/cargo-installd7dnUF/release/deps/libtui_realm_treeview-b7a74d5275ad3122.rlib" "/tmp/cargo-installd7dnUF/release/deps/libtuirealm-230c15502e8d6944.rlib" "/tmp/cargo-installd7dnUF/release/deps/libtextwrap-a82d1ab61947b900.rlib" "/tmp/cargo-installd7dnUF/release/deps/libsmawk-7912d4c7fb764ab5.rlib" "/tmp/cargo-installd7dnUF/release/deps/libunicode_linebreak-0dfe4f46b0151b45.rlib" "/tmp/cargo-installd7dnUF/release/deps/libtui_tree_widget-33a9f9a5e792897d.rlib" "/tmp/cargo-installd7dnUF/release/deps/libtui-c154f88916dc9cf6.rlib" "/tmp/cargo-installd7dnUF/release/deps/libcassowary-8effc0aae28845c8.rlib" "/tmp/cargo-installd7dnUF/release/deps/libunicode_segmentation-28678a410b5c0160.rlib" "/tmp/cargo-installd7dnUF/release/deps/libcrossterm-364ae7cf65566774.rlib" "/tmp/cargo-installd7dnUF/release/deps/libsignal_hook-fc0ca587a5724a86.rlib" "/tmp/cargo-installd7dnUF/release/deps/libsignal_hook_registry-9de489ca14b412f4.rlib" "/tmp/cargo-installd7dnUF/release/deps/libparking_lot-a86d4fa829644c4f.rlib" "/tmp/cargo-installd7dnUF/release/deps/libparking_lot_core-8cd1f894c56e06d0.rlib" "/tmp/cargo-installd7dnUF/release/deps/libsmallvec-6afca1b3452e7641.rlib" "/tmp/cargo-installd7dnUF/release/deps/liblock_api-e5bdbca3009eddde.rlib" "/tmp/cargo-installd7dnUF/release/deps/libscopeguard-15331d4a8e3b48c1.rlib" "/tmp/cargo-installd7dnUF/release/deps/libinstant-4413f3191560175c.rlib" "/tmp/cargo-installd7dnUF/release/deps/libhumantime-efefbca8dd35e25a.rlib" "/tmp/cargo-installd7dnUF/release/deps/liblibmpv-dd3a1ebbaac9ba20.rlib" "/tmp/cargo-installd7dnUF/release/deps/liblibmpv_sys-5d3808e73d0f3322.rlib" "/tmp/cargo-installd7dnUF/release/deps/libytd_rs-33cbe2aaf65fe31b.rlib" "/tmp/cargo-installd7dnUF/release/deps/libunicode_truncate-277a4e892d88b2ad.rlib" "/tmp/cargo-installd7dnUF/release/deps/libunicode_width-b995ec368e728108.rlib" "/tmp/cargo-installd7dnUF/release/deps/libid3-c11e436e6a88db99.rlib" "/tmp/cargo-installd7dnUF/release/deps/libbyteorder-f757b2018ba91b7a.rlib" "/tmp/cargo-installd7dnUF/release/deps/libreqwest-f0969d4f538bf2d8.rlib" "/tmp/cargo-installd7dnUF/release/deps/libcookie_store-735bd1543259fbac.rlib" "/tmp/cargo-installd7dnUF/release/deps/libpublicsuffix-4995a8a52acbb9b0.rlib" "/tmp/cargo-installd7dnUF/release/deps/libcookie-710b35406e7f958a.rlib" "/tmp/cargo-installd7dnUF/release/deps/libtime-8c882dab616ffa02.rlib" "/tmp/cargo-installd7dnUF/release/deps/libtime_macros-ae985a816e9ab123.rlib" "/tmp/cargo-installd7dnUF/release/deps/libstandback-0a4fd6a684fc9dcd.rlib" "/tmp/cargo-installd7dnUF/release/deps/libhyper_tls-3358b91b4d5db8d1.rlib" "/tmp/cargo-installd7dnUF/release/deps/libipnet-acdfaf6330ea01aa.rlib" "/tmp/cargo-installd7dnUF/release/deps/libtokio_socks-d36808b7308a06c7.rlib" "/tmp/cargo-installd7dnUF/release/deps/libthiserror-cbd914e8cb932bf7.rlib" "/tmp/cargo-installd7dnUF/release/deps/libeither-8d06619f0024e436.rlib" "/tmp/cargo-installd7dnUF/release/deps/libtokio_native_tls-1b28c05634345379.rlib" "/tmp/cargo-installd7dnUF/release/deps/libserde_urlencoded-b4d44c41dff4fbfa.rlib" "/tmp/cargo-installd7dnUF/release/deps/libmime-2bdfe467a7d2bc44.rlib" "/tmp/cargo-installd7dnUF/release/deps/libencoding_rs-ceecaef510b9306d.rlib" "/tmp/cargo-installd7dnUF/release/deps/libbase64-ed5a397cb7dbdfb6.rlib" "/tmp/cargo-installd7dnUF/release/deps/libasync_compression-648308baefda7c46.rlib" "/tmp/cargo-installd7dnUF/release/deps/libflate2-56693204b5fe67bd.rlib" "/tmp/cargo-installd7dnUF/release/deps/libminiz_oxide-28644040b56a6b06.rlib" "/tmp/cargo-installd7dnUF/release/deps/libadler-1ba43ae5e1e0207c.rlib" "/tmp/cargo-installd7dnUF/release/deps/libcrc32fast-cd1d991c37121398.rlib" "/tmp/cargo-installd7dnUF/release/deps/libnative_tls-ac14cbe27ee29c82.rlib" "/tmp/cargo-installd7dnUF/release/deps/libopenssl_probe-cd012426d1cbc807.rlib" "/tmp/cargo-installd7dnUF/release/deps/libhyper-5a0e823c6af4d173.rlib" "/tmp/cargo-installd7dnUF/release/deps/libwant-ac9cfa2049e41d99.rlib" "/tmp/cargo-installd7dnUF/release/deps/libtry_lock-64040b05b0663a5e.rlib" "/tmp/cargo-installd7dnUF/release/deps/libsocket2-9ffb395bdef37886.rlib" "/tmp/cargo-installd7dnUF/release/deps/libh2-b0e9f73eb6a5a7a7.rlib" "/tmp/cargo-installd7dnUF/release/deps/libindexmap-e8dcabfddb7033cd.rlib" "/tmp/cargo-installd7dnUF/release/deps/libhashbrown-412204cae1e9d31c.rlib" "/tmp/cargo-installd7dnUF/release/deps/libtokio_util-c711e5e684cc8565.rlib" "/tmp/cargo-installd7dnUF/release/deps/libfutures_sink-c98fcd9070362d63.rlib" "/tmp/cargo-installd7dnUF/release/deps/libhttparse-7d3c1fa61359a966.rlib" "/tmp/cargo-installd7dnUF/release/deps/libtower_service-33b4269b689acac5.rlib" "/tmp/cargo-installd7dnUF/release/deps/libfutures_channel-f8c5e17a54a6a81e.rlib" "/tmp/cargo-installd7dnUF/release/deps/libtracing-95f29f715d5e9660.rlib" "/tmp/cargo-installd7dnUF/release/deps/libtracing_core-1f53418fef904dbe.rlib" "/tmp/cargo-installd7dnUF/release/deps/libtokio-38e8b3d5f72e8c0b.rlib" "/tmp/cargo-installd7dnUF/release/deps/libnum_cpus-519fa3f4ee5d46ae.rlib" "/tmp/cargo-installd7dnUF/release/deps/libmio-e657c37a72979c89.rlib" "/tmp/cargo-installd7dnUF/release/deps/libhttp_body-62cd79bb894a6f48.rlib" "/tmp/cargo-installd7dnUF/release/deps/libfutures_util-ab5becf5a24d2314.rlib" "/tmp/cargo-installd7dnUF/release/deps/libfutures_io-43e474165ba9af53.rlib" "/tmp/cargo-installd7dnUF/release/deps/libslab-79fe3b2983e80599.rlib" "/tmp/cargo-installd7dnUF/release/deps/libpin_project_lite-0ab8ae0604a5de02.rlib" "/tmp/cargo-installd7dnUF/release/deps/libfutures_task-681393ef78b16ed8.rlib" "/tmp/cargo-installd7dnUF/release/deps/libpin_utils-6922c210eee8b76d.rlib" "/tmp/cargo-installd7dnUF/release/deps/libfutures_core-46d694cd8f4f9363.rlib" "/tmp/cargo-installd7dnUF/release/deps/liburl-3cb2757e7b97b60f.rlib" "/tmp/cargo-installd7dnUF/release/deps/libidna-c41b5b8397faa01b.rlib" "/tmp/cargo-installd7dnUF/release/deps/libunicode_normalization-82c7e2cd267b7f43.rlib" "/tmp/cargo-installd7dnUF/release/deps/libtinyvec-3cd7e5cf59b08923.rlib" "/tmp/cargo-installd7dnUF/release/deps/libtinyvec_macros-6722b761eaeeeaf5.rlib" "/tmp/cargo-installd7dnUF/release/deps/libunicode_bidi-0d250cc156352038.rlib" "/tmp/cargo-installd7dnUF/release/deps/libform_urlencoded-276c95e762addf81.rlib" "/tmp/cargo-installd7dnUF/release/deps/libpercent_encoding-44320724dae1ad17.rlib" "/tmp/cargo-installd7dnUF/release/deps/libmatches-5569a903734de6f8.rlib" "/tmp/cargo-installd7dnUF/release/deps/libhttp-5d53b843304ad301.rlib" "/tmp/cargo-installd7dnUF/release/deps/libbytes-ac7d3bd045a40fc9.rlib" "/tmp/cargo-installd7dnUF/release/deps/libfnv-fb56affc7069367a.rlib" "/tmp/cargo-installd7dnUF/release/deps/libserde_json-abba0251fb3e2cf3.rlib" "/tmp/cargo-installd7dnUF/release/deps/libryu-5b4f1379e02b1b69.rlib" "/tmp/cargo-installd7dnUF/release/deps/libitoa-da13ee0c56578310.rlib" "/tmp/cargo-installd7dnUF/release/deps/libserde-103829749e6ff143.rlib" "/tmp/cargo-installd7dnUF/release/deps/libcustom_error-4e89f34ca5f70f41.rlib" "/tmp/cargo-installd7dnUF/release/deps/liburlqstring-418564f5a2d5c5e5.rlib" "/tmp/cargo-installd7dnUF/release/deps/librand-f50f0c25af8c37ca.rlib" "/tmp/cargo-installd7dnUF/release/deps/librand_chacha-b682668452925f67.rlib" "/tmp/cargo-installd7dnUF/release/deps/libppv_lite86-fe49843071894a3d.rlib" "/tmp/cargo-installd7dnUF/release/deps/librand_core-e26c44e3e56e083c.rlib" "/tmp/cargo-installd7dnUF/release/deps/libgetrandom-0e3eda47537c2aac.rlib" "/tmp/cargo-installd7dnUF/release/deps/libopenssl-d62e15eec5ffd593.rlib" "/tmp/cargo-installd7dnUF/release/deps/libonce_cell-0a82a78f5f8f66bc.rlib" "/tmp/cargo-installd7dnUF/release/deps/libbitflags-61ee16c26132f2e5.rlib" "/tmp/cargo-installd7dnUF/release/deps/libforeign_types-bf080cb3020ac602.rlib" "/tmp/cargo-installd7dnUF/release/deps/libforeign_types_shared-67f9bd5675903289.rlib" "/tmp/cargo-installd7dnUF/release/deps/libopenssl_sys-c4d7faa299628327.rlib" "/tmp/cargo-installd7dnUF/release/deps/liblibc-d4a934ae5d0d2d91.rlib" "/tmp/cargo-installd7dnUF/release/deps/libregex-d77a181d4ffe1a8f.rlib" "/tmp/cargo-installd7dnUF/release/deps/libaho_corasick-87366150b7da3371.rlib" "/tmp/cargo-installd7dnUF/release/deps/libmemchr-33700248bab0e8e8.rlib" "/tmp/cargo-installd7dnUF/release/deps/libregex_syntax-3686789fe085b6b6.rlib" "/tmp/cargo-installd7dnUF/release/deps/liblazy_static-b29a250468ee713f.rlib" "/tmp/cargo-installd7dnUF/release/deps/libanyhow-2cb74e7988cae881.rlib" "/tmp/cargo-installd7dnUF/release/deps/liblog-2067918ab4b05777.rlib" "/tmp/cargo-installd7dnUF/release/deps/libcfg_if-6399ff0a7b04fb24.rlib" "-Wl,--start-group" "/home/bevan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-b6b48477bfa8c673.rlib" "/home/bevan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-f560ec02638f7ffe.rlib" "/home/bevan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libminiz_oxide-9c8eadb7013c9e0b.rlib" "/home/bevan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libadler-8b0ec8dbdb85d0bf.rlib" "/home/bevan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libobject-ba5d5ee707c805d2.rlib" "/home/bevan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libaddr2line-55166126dbdd5e46.rlib" "/home/bevan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libgimli-c327b365eae3b2f3.rlib" "/home/bevan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-416439b546a0d033.rlib" "/home/bevan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-2581188d29552e15.rlib" "/home/bevan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-da7b2635bfcce6ef.rlib" "/home/bevan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-09200ed1945e7b2b.rlib" "/home/bevan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-223ac369b29f5000.rlib" "/home/bevan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-39562fe6600dd936.rlib" "/home/bevan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-9b411bb7a19f81b3.rlib" "/home/bevan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-64ea0581d80339f7.rlib" "/home/bevan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-b2dbda88b377d685.rlib" "/home/bevan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-2a8415a96ed1d7dc.rlib" "-Wl,--end-group" "/home/bevan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-c4d9a5b072ee3191.rlib" "-Wl,-Bdynamic" "-lmpv" "-lssl" "-lcrypto" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc"
  = note: /usr/sbin/ld: cannot find -lmpv
          collect2: error: ld returned 1 exit status
          

error: aborting due to previous error

error: failed to compile `termusic v0.2.4`, intermediate artifacts can be found at `/tmp/cargo-installd7dnUF`

Caused by:
  could not compile `termusic`

To learn more, run the command again with --verbose.

I got the above error when I tried to install termusic. The repo looks cool enough. I'd love to see it running!

Full Rust stack

I've just come across https://github.com/pdeljanov/Symphonia which provides native Rust decoders.

I'm no expert by any means but was wondering if you were aware of this as an alternative to requiring GStreamer. Would be awesome to go full Rust on the audio stack. Would love to hear your thoughts on that project.

Features request

Hi, this is probably still early development but still the program looks good and works well, so well done!

Would you consider the following features?

  • Loop only 1 song (as in VLC) mode
    • Already exists
  • Possibily to remap shortcuts to other keys (right now, having the vim style navigation with a keyboard that looks nothing like qwerty is pretty inconvenient)
    • Now possible in latest version
  • About the "Are you sure you want to quit" message box when attempting to quit the app, adding as a key to switch from "No" to "Yes" and inversely, and adding the possibilty to disable this message box
    • Now possible in latest version
  • Possibilty to tune the thumbnail's size
    • Done in ver 0.6.4

build failed

The following warnings were emitted during compilation:

warning: "pkg-config" "--libs" "--cflags" "gstreamer-player-1.0" "gstreamer-player-1.0 >= 1.12" did not exit successfully: exit status: 1

error: failed to run custom build command for gstreamer-player-sys v0.17.0

Caused by:
process didn't exit successfully: /tmp/cargo-install6qnBPi/release/build/gstreamer-player-sys-050699e367bffae5/build-script-build (exit status: 1)
--- stdout
cargo:rerun-if-env-changed=GSTREAMER_PLAYER_1.0_NO_PKG_CONFIG
cargo:rerun-if-env-changed=PKG_CONFIG
cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64-unknown-linux-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64_unknown_linux_gnu
cargo:rerun-if-env-changed=HOST_PKG_CONFIG_PATH
cargo:rerun-if-env-changed=PKG_CONFIG_PATH
cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64-unknown-linux-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64_unknown_linux_gnu
cargo:rerun-if-env-changed=HOST_PKG_CONFIG_LIBDIR
cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64-unknown-linux-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64_unknown_linux_gnu
cargo:rerun-if-env-changed=HOST_PKG_CONFIG_SYSROOT_DIR
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR
cargo:warning="pkg-config" "--libs" "--cflags" "gstreamer-player-1.0" "gstreamer-player-1.0 >= 1.12" did not exit successfully: exit status: 1
--- stderr
Package gstreamer-player-1.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing gstreamer-player-1.0.pc' to the PKG_CONFIG_PATH environment variable No package 'gstreamer-player-1.0' found Package gstreamer-player-1.0 was not found in the pkg-config search path. Perhaps you should add the directory containing gstreamer-player-1.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gstreamer-player-1.0' found

warning: build failed, waiting for other jobs to finish...
error: failed to compile termusic v0.3.13, intermediate artifacts can be found at /tmp/cargo-install6qnBPi

Caused by:
build failed

Metadata support for `.opus` files

I've been using yt-dlp to download some songs from youtube since I've found the downloading functionality to be a bit slow. I've been getting them in the .opus file format and while they play fine, it can look a bit odd without the metadata for the songs. Would it be possible to add support for this file type?

Also, I've really been enjoying using termusic!

Customize colors

First of all it looks spectacular based on termusic except for some elements that look bad (at least in kitty yes). So, like other players of this style, I would like the possibility of creating custom themes. I had thought that the default theme would be the colors of the terminal but that you can add others. Thanks in advance

album art via ueberzug fails

I installed ueberzug on the device I was testing on, but it still fails to run, with a broken pipe right here:

stdin.write_all(cmd.as_bytes())?;

Note: i was running termusic via an ssh session, so I did not have DISPLAY env variable set; I tested by running with WAYLAND_DISPLAY=wayland-0 DISPLAY=:0 but it makes no difference. Is there a way to run without this feature?

I am also seeing the next track not playing sometimes in the playlist, and I'm wondering if it's caused by this?

I can't forward "f"

Hi. f wont forward. I've tried to re-bind it to another key. Same result :/

termusic 0.6.10 (tar binary)
kitty 0.19.3

New Edit: Not f its h for Seek forward/backward 5 seconds

Arrow keys don't work during search

Termusic 0.6.12 - default Symphonia backend on alacritty 0.10.1.

When in the library you can press / to initiate search mode. I start typing to narrow down the list. Press tab to swap to the pane below the search bar. In the results box the arrow keys used to work for going up and down. Now only the vim search keys k and j seem to work.

current build fails due to "trait `From<String>` is not implemented" (in pinyin)

error[E0277]: the trait bound `Cow<'_, str>: From<String>` is not satisfied
   --> /home/dym/.cargo/registry/src/github.com-1ecc6299db9ec823/pinyin-0.8.0/build.rs:166:16
    |
166 |         result.into()
    |                ^^^^ the trait `From<String>` is not implemented for `Cow<'_, str>`
    |
    = note: required because of the requirements on the impl of `Into<Cow<'_, str>>` for `String`

error[E0277]: the trait bound `Cow<'_, str>: From<String>` is not satisfied
   --> /home/dym/.cargo/registry/src/github.com-1ecc6299db9ec823/pinyin-0.8.0/build.rs:185:16
    |
185 |         result.into()
    |                ^^^^ the trait `From<String>` is not implemented for `Cow<'_, str>`
    |
    = note: required because of the requirements on the impl of `Into<Cow<'_, str>>` for `String`

For more information about this error, try `rustc --explain E0277`.
error: could not compile `pinyin` due to 2 previous errors
warning: build failed, waiting for other jobs to finish...
error: build failed
make: *** [Makefile:7: fmt] Error 101

Feature Request: Ability to filter by Genre or by Artist

First of all, thanks so much for the free music player! I'm really excited to have a responsive music player after using rhythmbox for years and waiting forever for python to churn through my music library for over a minute on startup.

One thing I miss is the ability to filter my library by tags such as Genre or Artist. Any plans for that, or will navigation stay filesystem based?

Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.