Terminal Music Player written in Rust

Overview

Terminal Music Player written in Rust

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

Freedom: As time goes by, online service providers controls pretty much everything we listen. Complicated copyright issues make things worse. If my favorite song cannot be found in a website, probably I'll 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 monthly paid membership for several websites.

As a contributor of GOMU(https://github.com/issadarkthing/gomu), I met serious problems during development. The main problem is data race condition. So I basically rewrite the player in rust, and hope to solve the problem.

As for now, mp3, m4a, flac, wav and ogg/vorbis are supported.

By the way, for mobile devices, I recommend sync your music library with mobile by verysync and listen to them with vinyl(which I contributed also).

main tageditor

Requirement:

Need gstreamer and related plugins installed to play music. Please check below:

gstreamer
gst-libav
gstreamer-plugins-base(gst-plugins-base)
gstreamer-plugins-good(gst-plugins-good)
gstreamer-plugins-bad(gst-plugins-bad)
gstreamer-plugins-ugly(gst-plugins-ugly)
(Additonally for gentoo:)
gst-plugins-meta
(Additionally for macos:)
gstreamer-audio
gstreamer-sys

Optionally you need youtube-dl and ffmpeg installed to download mp3 from youtube.

On windows, please download and install gstreamer development package from https://gstreamer.freedesktop.org/download/.

Installation:

cargo install termusic

Or manually:

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

Then install with:

make install

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

make mpris

By default, termusic can display album cover in kitty or iterm2(mac, not tested). If you need album cover displayed on other terminals, please install ueberzug(https://github.com/seebye/ueberzug) by pip3 install ueberzug or paru -S ueberzug, then:

make cover

If you need both mpris and cover, you can:

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 everything can be set from the app. For example, you can change music dir with enter and backspace, and it'll be saved to config. You can change loop mode with m key and it'll be saved too. You can change volume with +/-, and it'll be saved also.

You need stable branch rust toolchain installed to build it. I'm building with 1.55. According to user feedback, version less than 1.52 is not working.

Distro Packages

Arch Linux

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

paru termusic

NetBSD

NetBSD users can install termusic from the official repositories.

pkgin install termusic

ChangeLog

[v0.5.0]

  • Released on: Oct 15, 2021.
  • New: album photo for all kinds of terminals. Alacritty,kitty and st tested. Require install ueberzug.

[v0.3.17]

  • Released on: Oct 10, 2021.
  • Added rust-toolchain.toml to avoid using nightly toolchain.
  • iterm2 album photo support.
  • Minor fix: playingbar title length limit.
  • Refactor mpris to operate faster(100ms).

[v0.3.16]

  • Released on: Oct 1, 2021.
  • Rename playlist to library, and queue to playlist.
  • New: loop mode configuration. Default is queue mode(aka consume mode), can switch to loop mode and single loop mode by pressing "m" key when focusing Playlist. In queue mode, previous song cannot be played as it's already consumed from the playlist. In single loop mode, previous song will be ignored.
  • Show volume in progress bar title.

[v0.3.15]

  • Released on: Sep 27, 2021.
  • Revert mpris to optional as some users don't have dbus installed( NetBSD and MacOs).

[v0.3.14]

  • Released on: Sep 27 , 2021.
  • Minor fix: popup message will display for 5 seconds. no message overlapping each other.
  • New: search in playlist. Key binding: "/".
  • New: wav file support.
  • Fix: All lrc files was merged into mp3 after downloading. Should be distinguished by file name.
  • Fix: play any folder with command line args.
  • Fix: spamming mpris propertieschanged messages. Thus mpris is default now.

[v0.3.13]

  • Released on: Sep 23, 2021.
  • New: mpris support(optional). use "make mpris" to compile and install it.
  • Show a message when start playing a song.
  • Remove the usage of msgbox component and use paragraph instead.
  • press "N" for previous song.

[v0.3.12]

  • Released on: Sep 15, 2021.
  • Minor fix: wrong hints for empty queue.
  • Load queue faster.
  • Remove dependency of openssl.
  • Remove dependency of urlqstring.

[v0.3.11]

  • Released on: Sep 13, 2021.
  • Load faster by loading queue after app start.
  • Remove dependency of ogg-metadata.
  • Display version info in both tui and cli.
  • Could override music directory with command line arguments.

[v0.3.10]

  • Released on: Sep 11, 2021.
  • New: ogg vorbis format support.

[v0.3.9]

  • Released on: Sep 7, 2021.
  • New: flac format support.
  • Refactor invidious.rs.

[v0.3.8]

  • Released on: Sep 4, 2021.
  • Remove the usage of configr, also make the app minimal.
  • Change hotkey for help to Ctrl+h.
  • Rearrange components in tag editor.
  • Embed duration into tag. Load faster.
  • Remove dependency of mp3-duration.
  • Minor fix: lyric lang_ext was set to wrong names.

[v0.3.7]

  • Released on: Sep 2, 2021.
  • Fix table focus issue.
  • Fix invidious search slow down the whole program.
  • Change http client from reqwest to ureq, to make the app minimal, thus speed up compilation.

[v0.3.6]

  • Released on: Aug 31, 2021.
  • Remove the dependency of unicode truncate, as tui-realm-stdlib implemented width for table.
  • Fix playlist sorting with characters of mixed languages.
  • Speed up load_queue and sort playlist.
  • Minor fix: duration display in queue.

[v0.3.5]

  • Released on: Aug 26, 2021.
  • Refactoring status line, to show download success or fail message.
  • Parsing output of youtube-dl to select downloaded song in playlist.
  • Embed all lyrics after youtube download. Switch lyric with "T" key while playing.
  • Show popup messages on top right corner.
  • Sort file name(including chinese) in tree.
  • Can delete single lyric from tag editor.
  • Currently only mp3 support several lyrics.

[v0.3.4]

  • Released on: Aug 24 2021.
  • Refactoring lyric mod to songtag mod.
  • Run songtag search in threads so it'll not block tageditor.
  • Refactoring youtube_options and no more search error with youtube.

[v0.3.3]

  • Released on: August 21, 2021.
  • Run songtag search in parallel to save some time in tageditor.

Implemented features(changelog before v0.3.3):

  • Music library below ~/Music, can be changed via editing $HOME/.config/termusic/config.toml
  • Pause/Skip
  • Seek forward/backward
  • USLT lyric
  • Album Photo display(only for kitty terminal)
  • Youtube-dl integration
  • lyric and tag download
  • yank and paste in playlist
  • Lyric offset adjustment
  • Local service to fetch lyrics
  • Download song in tag editor
  • Configuration v0.2.6
  • Local service for kugou v0.2.10
  • Youtube-dl progress indication(indicated by status line)
  • Youtube search by invidious V0.2.7(from the same dialogue of download)
  • Local service for migu v0.2.8
  • m4a format support v0.2.12
  • switch to Gstreamer playing backend in order to support m4a v0.2.12
  • m4a meta support v0.3.0
  • Invidious servers are random selected and verified, thus no configuration is needed.v0.3.2

Thanks for

License

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

Comments
  • Feature request: ability to populate playlist with x random tracks or albums

    Feature request: ability to populate playlist with x random tracks or albums

    This would be equivalent to the tqueue / lqueue functions of cmus — my usual cmus workflow (which I'd love to replace with termusic) is to append 50 or so random albums to the playlist, remove or reorder a few of them and let it play.

    Alternatively, a way to just append a single random album to the playlist would be good enough.

    https://man.archlinux.org/man/cmus.1.en

    enhancement 
    opened by lxcode 14
  • [Feature request] Support for xspf playlists

    [Feature request] Support for xspf playlists

    it would be great to be able to select an xspf playlist file and have the music specified in the file loaded into the playlist pane of termusic. This is a portable format and the spec is here

    enhancement 
    opened by pcause 14
  • Various bugs

    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!

    bug 
    opened by FlanOfHarmony 13
  • Features request

    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
    opened by FlanOfHarmony 13
  • Thoughts on the indicator bar above the playlist section

    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.

    opened by neruthes 12
  • I can't forward

    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~~

    opened by danrobi11 11
  • Music files must be put into ~/Music?

    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

    opened by c02y 10
  • Repeating one song occasionally hangs on `v0.6.7`

    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.

    bug 
    opened by hydrobeam 9
  • Unable to run `termusic.exe` on Windows

    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!

    opened by hydrobeam 8
  • What does

    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.

    opened by neruthes 8
  • [Feature request] Shortcut to change directory as root for Library

    [Feature request] Shortcut to change directory as root for Library

    Hi,

    I would like to have a shortcut (o for Open could be a good candidate) to choose a directory as new root for Library.

    For now, I have to navigate with Backspace/Enter to change root directory between ~/Music/ (local directory for my albums) and /mnt/disk/Music/ (NFS directory mounted from my NAS).

    enhancement 
    opened by lcheylus 7
  • [Feature request] Command line handling

    [Feature request] Command line handling

    Please keep in mind that I have just started using the software.

    I'm coming from mocp and I'm just missing one feature from what I had before, more command line handling.

    The thing you could do with mocp was type

    mocp -f
    mocp -G
    

    And mocp would skip to the next song, or pause / unpause it.

    It would be nice to have something like that in termusic, from the command line, such as :

    termusic --next / -n
    termusic --toggle-pause / -T
    

    I also would be useful for WM users, as it allows to map keybindings to control the music player, as I could do with mocp.

    BTW : termusic is awesome so far !

    opened by Dazaisan99 3
  • [Bug] update photo error: Failed to run Ueberzug: Broken pipe (os error 32)

    [Bug] update photo error: Failed to run Ueberzug: Broken pipe (os error 32)

    Songs cover view don't work.
    Operating System: Arch Linux x86_64
    Linux Kernel Release: 6.1.1
    Ueberzug Version: 18.1.9
    Displays this error every time music is played:

    截图 2022-12-25 11-09-07

    opened by QuestionMark001 3
  • download failed: Error download: failed to execute youtube-dl

    download failed: Error download: failed to execute youtube-dl

    When i trying to download a song from youtube i get error. I have installed yt-dlp, ffmpeg, gstreamer, mpv. Im using pipewire.

    OS: arch linux (zen 6.0.10) terminal: alacritty (also tryed in tty)

    opened by NEsanya 4
  • Soulvaki lib panic Windows

    Soulvaki lib panic Windows

    I'm not sure how to do this on my end, is it possible to cargo install with some build flag? Either way the Windows bins are literally unusable the moment.

    ❯ termusic
    thread 'main' panicked at 'Windows media controls require an HWND in MediaControlsOptions.', C:\Users\runneradmin\.cargo\registry\src\github.com-1ecc6299db9ec823\souvlaki-0.5.2\src\platform\windows\mod.rs:50:14
    stack backtrace:
       0:     0x7ff7607e69af - <unknown>
       1:     0x7ff76080b65a - <unknown>
       2:     0x7ff7607de109 - <unknown>
       3:     0x7ff7607e965b - <unknown>
       4:     0x7ff7607e92d5 - <unknown>
       5:     0x7ff7607e9c09 - <unknown>
       6:     0x7ff7607e9b0d - <unknown>
       7:     0x7ff7607e75e7 - <unknown>
       8:     0x7ff7607e97e9 - <unknown>
       9:     0x7ff76097e535 - <unknown>
      10:     0x7ff760808d30 - <unknown>
      11:     0x7ff760808cdb - <unknown>
      12:     0x7ff76097e389 - <unknown>
      13:     0x7ff76036d8a4 - <unknown>
      14:     0x7ff7601654a3 - <unknown>
      15:     0x7ff760112c76 - <unknown>
      16:     0x7ff7602b54bb - <unknown>
      17:     0x7ff76014d4d6 - <unknown>
      18:     0x7ff7600a8750 - <unknown>
      19:     0x7ff7607d61cb - <unknown>
      20:     0x7ff7602b6317 - <unknown>
      21:     0x7ff7609600bc - <unknown>
      22:     0x7ffa5c14117e - BaseThreadInitThunk
      23:     0x7ffa5dfe42db - RtlUserThreadStart
    

    Termusic version is: 0.7.5 https://github.com/Sinono3/souvlaki/blob/master/src/platform/windows/mod.rs#L50

    opened by brian6932 6
  • Strange error

    Strange error

    Screenshot from 2022-10-18 at 13_00_27 828105390 Everything works normal until, the photos of the songs begin to be changed and then pauses and does not let any action, I have to use Kill to close.In the end I get the error I show in the photograph

    opened by CRAG666 5
  • Installation instructions issue?

    Installation instructions issue?

    Hi, wondering if it's possible that there are some requirements missing from the README, or something else. Pretty new to Rust development so I don't know how to approach the problem when the error message doesn't turn up any google results.

    I've got a fresh installation of the 1.64.0 toolchain, running on up to date MacBook. Compilation of all the deps succeeds. Then during the final step (compiling termusic v0.7.3), I get the following.

    I'm excited to try this tool, and would appreciate any pointers you might have.

    error[E0432]: unresolved import `crate::DefaultStreamConfigError`
     --> /Users/tyler/.asdf/installs/rust/1.64.0/registry/src/github.com-1ecc6299db9ec823/termusic-0.7.3/src/player/rusty_backend/cpal/host/coreaudio/mod.rs:8:5
      |
    8 | use crate::DefaultStreamConfigError;
      |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no `DefaultStreamConfigError` in the root
    
    error[E0432]: unresolved imports `crate::BuildStreamError`, `crate::SupportedStreamConfigsError`
     --> /Users/tyler/.asdf/installs/rust/1.64.0/registry/src/github.com-1ecc6299db9ec823/termusic-0.7.3/src/player/rusty_backend/cpal/host/coreaudio/mod.rs:9:13
      |
    9 | use crate::{BuildStreamError, SupportedStreamConfigsError};
      |             ^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^ no `SupportedStreamConfigsError` in the root
      |             |
      |             no `BuildStreamError` in the root
    
    error[E0432]: unresolved imports `crate::BackendSpecificError`, `crate::SampleFormat`, `crate::StreamConfig`
      --> /Users/tyler/.asdf/installs/rust/1.64.0/registry/src/github.com-1ecc6299db9ec823/termusic-0.7.3/src/player/rusty_backend/cpal/host/coreaudio/mod.rs:11:13
       |
    11 | use crate::{BackendSpecificError, SampleFormat, StreamConfig};
       |             ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^^^^^^^^^ no `StreamConfig` in the root
       |             |                     |
       |             |                     no `SampleFormat` in the root
       |             no `BackendSpecificError` in the root
    
    error[E0432]: unresolved import `crate::traits`
      --> /Users/tyler/.asdf/installs/rust/1.64.0/registry/src/github.com-1ecc6299db9ec823/termusic-0.7.3/src/player/rusty_backend/cpal/host/coreaudio/macos/mod.rs:23:12
       |
    23 | use crate::traits::{DeviceTrait, HostTrait, StreamTrait};
       |            ^^^^^^
       |            |
       |            unresolved import
       |            help: a similar path exists: `crate::player::rusty_backend::cpal::traits`
    
    error[E0432]: unresolved imports `crate::BackendSpecificError`, `crate::BufferSize`, `crate::BuildStreamError`, `crate::ChannelCount`, `crate::Data`, `crate::DefaultStreamConfigError`, `crate::DeviceNameError`, `crate::DevicesError`, `crate::InputCallbackInfo`, `crate::OutputCallbackInfo`, `crate::PauseStreamError`, `crate::PlayStreamError`, `crate::SampleFormat`, `crate::SampleRate`, `crate::StreamConfig`, `crate::StreamError`, `crate::SupportedBufferSize`, `crate::SupportedStreamConfig`, `crate::SupportedStreamConfigRange`, `crate::SupportedStreamConfigsError`
      --> /Users/tyler/.asdf/installs/rust/1.64.0/registry/src/github.com-1ecc6299db9ec823/termusic-0.7.3/src/player/rusty_backend/cpal/host/coreaudio/macos/mod.rs:25:5
       |
    25 |     BackendSpecificError, BufferSize, BuildStreamError, ChannelCount, Data,
       |     ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^ no `Data` in the root
       |     |                     |           |                 |
       |     |                     |           |                 no `ChannelCount` in the root
       |     |                     |           no `BuildStreamError` in the root
       |     |                     no `BufferSize` in the root
       |     no `BackendSpecificError` in the root
    26 |     DefaultStreamConfigError, DeviceNameError, DevicesError, InputCallbackInfo, OutputCallbackInfo,
       |     ^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^ no `OutputCallbackInfo` in the root
       |     |                         |                |             |
       |     |                         |                |             no `InputCallbackInfo` in the root
       |     |                         |                no `DevicesError` in the root
       |     |                         no `DeviceNameError` in the root
       |     no `DefaultStreamConfigError` in the root
    27 |     PauseStreamError, PlayStreamError, SampleFormat, SampleRate, StreamConfig, StreamError,
       |     ^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^^^^^^^^
    28 |     SupportedBufferSize, SupportedStreamConfig, SupportedStreamConfigRange,
       |     ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^
    29 |     SupportedStreamConfigsError,
       |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
    error[E0432]: unresolved imports `crate::BackendSpecificError`, `crate::DevicesError`, `crate::SupportedStreamConfigRange`
      --> /Users/tyler/.asdf/installs/rust/1.64.0/registry/src/github.com-1ecc6299db9ec823/termusic-0.7.3/src/player/rusty_backend/cpal/host/coreaudio/macos/enumerate.rs:11:13
       |
    11 | use crate::{BackendSpecificError, DevicesError, SupportedStreamConfigRange};
       |             ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^ no `SupportedStreamConfigRange` in the root
       |             |                     |
       |             |                     no `DevicesError` in the root
       |             no `BackendSpecificError` in the root
    
    error[E0412]: cannot find type `HostUnavailable` in the crate root
      --> /Users/tyler/.asdf/installs/rust/1.64.0/registry/src/github.com-1ecc6299db9ec823/termusic-0.7.3/src/player/rusty_backend/cpal/host/coreaudio/macos/mod.rs:53:41
       |
    53 |     pub fn new() -> Result<Self, crate::HostUnavailable> {
       |                                         ^^^^^^^^^^^^^^^ not found in the crate root
       |
    help: consider importing this struct
       |
    4  | use crate::player::rusty_backend::cpal::HostUnavailable;
       |
    help: if you import `HostUnavailable`, refer to it directly
       |
    53 -     pub fn new() -> Result<Self, crate::HostUnavailable> {
    53 +     pub fn new() -> Result<Self, HostUnavailable> {
       |
    
    error[E0422]: cannot find struct, variant or union type `InputStreamTimestamp` in the crate root
       --> /Users/tyler/.asdf/installs/rust/1.64.0/registry/src/github.com-1ecc6299db9ec823/termusic-0.7.3/src/player/rusty_backend/cpal/host/coreaudio/macos/mod.rs:683:36
        |
    683 |             let timestamp = crate::InputStreamTimestamp { callback, capture };
        |                                    ^^^^^^^^^^^^^^^^^^^^ not found in the crate root
        |
    help: consider importing this struct
        |
    4   | use crate::player::rusty_backend::cpal::InputStreamTimestamp;
        |
    help: if you import `InputStreamTimestamp`, refer to it directly
        |
    683 -             let timestamp = crate::InputStreamTimestamp { callback, capture };
    683 +             let timestamp = InputStreamTimestamp { callback, capture };
        |
    
    error[E0422]: cannot find struct, variant or union type `OutputStreamTimestamp` in the crate root
       --> /Users/tyler/.asdf/installs/rust/1.64.0/registry/src/github.com-1ecc6299db9ec823/termusic-0.7.3/src/player/rusty_backend/cpal/host/coreaudio/macos/mod.rs:775:36
        |
    775 |             let timestamp = crate::OutputStreamTimestamp { callback, playback };
        |                                    ^^^^^^^^^^^^^^^^^^^^^ not found in the crate root
        |
    help: consider importing this struct
        |
    4   | use crate::player::rusty_backend::cpal::OutputStreamTimestamp;
        |
    help: if you import `OutputStreamTimestamp`, refer to it directly
        |
    775 -             let timestamp = crate::OutputStreamTimestamp { callback, playback };
    775 +             let timestamp = OutputStreamTimestamp { callback, playback };
        |
    
    error[E0412]: cannot find type `StreamInstant` in the crate root
      --> /Users/tyler/.asdf/installs/rust/1.64.0/registry/src/github.com-1ecc6299db9ec823/termusic-0.7.3/src/player/rusty_backend/cpal/host/coreaudio/mod.rs:73:20
       |
    73 | ) -> Result<crate::StreamInstant, BackendSpecificError> {
       |                    ^^^^^^^^^^^^^ not found in the crate root
       |
    help: consider importing this struct
       |
    3  | use crate::player::rusty_backend::cpal::StreamInstant;
       |
    help: if you import `StreamInstant`, refer to it directly
       |
    73 - ) -> Result<crate::StreamInstant, BackendSpecificError> {
    73 + ) -> Result<StreamInstant, BackendSpecificError> {
    A used type name is not in scope.
    
    Erroneous code examples:
    
    

    impl Something {} // error: type name Something is not in scope

    A used type name is not in scope.

    Erroneous code examples:

    impl Something {} // error: type name `Something` is not in scope
    
    // or:
    
    trait Foo {
        fn bar(N); // error: type name `N` is not in scope
    }
    
    // or:
    
    fn foo(x: T) {} // type name `T` is not in scope
    

    To fix this error, please verify you didn't misspell the type name, you did declare it or imported it into the scope. Examples: |

    error[E0433]: failed to resolve: could not find StreamInstant in the crate root --> /Users/tyler/.asdf/installs/rust/1.64.0/registry/src/github.com-1ecc6299db9ec823/termusic-0.7.3/src/player/rusty_backend/cpal/host/coreaudio/mod.rs:80:15 | 80 | Ok(crate::StreamInstant::new(secs as i64, subsec_nanos as u32)) | ^^^^^^^^^^^^^ not found in the crate root | help: consider importing this struct | 3 | use crate::player::rusty_backend::cpal::StreamInstant; | help: if you import StreamInstant, refer to it directly | 80 - Ok(crate::StreamInstant::new(secs as i64, subsec_nanos as u32)) 80 + Ok(StreamInstant::new(secs as i64, subsec_nanos as u32)) |

    error[E0412]: cannot find type SampleRate in the crate root --> /Users/tyler/.asdf/installs/rust/1.64.0/registry/src/github.com-1ecc6299db9ec823/termusic-0.7.3/src/player/rusty_backend/cpal/host/coreaudio/mod.rs:84:51 | 84 | fn frames_to_duration(frames: usize, rate: crate::SampleRate) -> std::time::Duration { | ^^^^^^^^^^ not found in the crate root | help: consider importing this struct | 3 | use crate::player::rusty_backend::cpal::SampleRate; | help: if you import SampleRate, refer to it directly | 84 - fn frames_to_duration(frames: usize, rate: crate::SampleRate) -> std::time::Duration { 84 + fn frames_to_duration(frames: usize, rate: SampleRate) -> std::time::Duration { |

    Some errors have detailed explanations: E0412, E0422, E0432, E0433. For more information about an error, try rustc --explain E0412. error: could not compile termusic due to 12 previous errors error: failed to compile termusic v0.7.3, intermediate artifacts can be found at /var/folders/6k/w8ysm2_x1_j2vym7y6cnb_hm0000z8/T/cargo-installjySvkQ

    
    
    opened by tylergannon 6
Releases(v0.7.7)
Owner
null
Small, compact music player written with Rust.

trill Small, compact music player based on rodio. Usage Run the program with --help to see the available options. To just play a sound file: trill -p

Will 3 Nov 25, 2022
A next-generation music player and manager

ouverture A next-generation music player and manager Very much at Work-In-Planning stage now Planned features GUI (localizable) Backend (something lik

Michael B 9 Nov 17, 2022
MRVN is a Discord music player bot.

MRVN is a Discord music player bot. It has a few neat features: Supports a wide array of sites, including Youtube, Soundcloud, Twitch and many mo

Tom Barham 17 Jan 1, 2023
The definitive e-book reader music player (Kobo, Kindle)

Introduction E-ink devices have traditionally been only for reading... well no more! Buck is a fully-fledged music player for e-ink devices (tested fu

BillK 11 Oct 28, 2022
Rust-crate with functions and helpers for working with music / audio, inspired by computer music languages.

music-math This crate contains common functions and helpers for working with music / audio in Rust. Most of these are inspired by similar functions fo

Mads Kjeldgaard 3 Apr 10, 2024
Polaris is a music streaming application, designed to let you enjoy your music collection from any computer or mobile device.

Polaris is a music streaming application, designed to let you enjoy your music collection from any computer or mobile device. Polaris works by streami

Antoine Gersant 1k Jan 9, 2023
A video player for your terminal that generates a standalone executable that plays your video.

Szmelc Player Szmelc Player is a program that converts any video you give it to a standalone executable that plays the video in the terminal. It uses

null 1 Jan 9, 2022
A simple GUI audio player written in Rust with egui. Inspired by foobar2000.

Music Player A simple GUI music player inspired by foobar2000 written in Rust using egui. The goal of this project is to learn about making gui/ nativ

Ryan Blecher 5 Sep 16, 2022
A music theory guide written in Rust.

Rust Music Theory A library and executable that provides programmatic implementation of the basis of the music theory. Table of Contents Overview Usag

Ozan Kaşıkçı 551 Dec 21, 2022
musify is a simple discord bot to play music within a voice channel, written in the rust programming language.

musify-rs musify is a simple discord bot to play music within a voice channel, written in the rust programming language. Features A simple song queue

NV6 5 Aug 14, 2022
Small music theory library with MIDI capabilities written in Rust

mumuse Small music theory library with MIDI capabilities written in Rust (wip). Examples Creating notes and transpositions // Declare Note from &str l

Alexis LOUIS 4 Jul 27, 2022
Tool for solving music harmonics written in rust.

Harmonized Tool for solving harmonics tasks Installation steps Requirements Make shure you have installed rust cargo If not: Download and run rust ins

Dmitry Miasnenko 0 Jan 28, 2022
Tools for working with MIDI files - written by All the Music LLC for musicians.

Tools for Generating and Working with MIDI Files NOTICE: This repo is under construction and is not ready for use. Once it is ready, and the other rep

null 9 Nov 17, 2022
Rust Audio Player Daemon

Rust Audio Player Daemon Cause mpd was annoying What rapd trys to do Rapd is not a spotify client, or an advanced music player. Its an audio/music dae

ash 3 Nov 1, 2022
Arexibo is an Rust Linux Xibo player

Arexibo is an alternate Digital Signage Player for Xibo, implemented in Rust with the GTK GUI components, for Linux platforms.

Georg Brandl 2 Dec 6, 2022
Template project for the The Bombercrab Challenge game, a stub Rust WASM player

The Bombercrab Challenge (Player Template) Welcome to the 2022 Tokyo Game Hack bombercrab challenge! If you're based in Tokyo and planning to attend i

Tonari, Inc 10 Sep 4, 2022
A simple CLI audio player with strange features.

legacylisten legacylisten is a simple CLI audio player I wrote because no existing one fulfilled my needs. The main feature is that you can change how

Matthias Kaak 3 Jun 8, 2022
VR media player for linux

VR media player for linux Very early development access version. I'll drop more notes here once it's ready for more publicity. Some details: Uses wgpu

null 4 Oct 7, 2022
Very simple, efficient, task oriented, low cognitive, Midi player and jukebox for midi instruments

Midi and Virtual Book jukebox Player A cross-platform MIDI and virtual book jukebox player. It only includes the necessary functionalities to play MID

Barrel Organ Discovery 4 Jun 29, 2023