iamdb / hifi.rs Goto Github PK
View Code? Open in Web Editor NEWa high resolution Qobuz streamer built in Rust
License: GNU General Public License v3.0
a high resolution Qobuz streamer built in Rust
License: GNU General Public License v3.0
Tab separated output only does pre-selected fields. The purpose of this is to allow the user to pipe the output into another app for formatting.
Would be useful to also allow the user to provide their own formatting string "{{album.title}}-{{artist.name}}"
with tokens that can be parsed and used instead of piping to another program.
URL: https://play.qobuz.com/playlist/11398919
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', /home/runner/work/hifi.rs/hifi.rs/hifirs/src/player.rs:630:61
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Aborted (core dumped)
When using the mpris interface, like through playerctl, the commands seem to work just fine, except for next track. Next track works in all other contexts, but here it hangs when requesting the next url.
No error is thrown is thrown. It just waits for the returning url and never receives it.
I am using Pipewire and other applications like mocp and castero can play sounds. hifi-rs opens and works except for starting to play tracks.
I have the following gstreamer packages installed:
gstreamer1.0-alsa/stable-security,now 1.22.0-3+deb12u2
arm64 [installed]
gstreamer1.0-pipewire/stable-backports,now 1.0.7-1~bpo
12+1 arm64 [installed]
gstreamer1.0-plugins-base/stable-security,now 1.22.0-3
+deb12u2 arm64 [installed,automatic]
libgstreamer-plugins-base1.0-0/stable-security,now 1.2
2.0-3+deb12u2 arm64 [installed,automatic]
libgstreamer1.0-0/stable,stable,stable,stable,stable,n
ow 1.22.0-2 arm64 [installed]
tap-plugins/stable,stable,stable,stable,stable,now 1.0
.0-1 arm64 [installed,automatic]
This what the terminal outputs when trying to start playback of a tack:
debian@debian:$ ./hifi-rs --disable-tui open$ ./hifi-rs --disable-tui --web open
q
debian@debian:
thread 'tokio-runtime-worker' panicked at /__w/hifi.rs
/hifi.rs/hifirs/src/websocket.rs:159:81:
: GStreamer { message: "Element failed to change its s
tate" }
note: run with RUST_BACKTRACE=1
environment variable
to display a backtrace
thread 'tokio-runtime-worker' panicked at /__w/hifi.rs
/hifi.rs/hifirs/src/websocket.rs:160:70:
: GStreamer { message: "Element failed to change its s
tate" }
Do you have an idea what can possibly be the culprit? Thanks!
Just a suggestion, rename this to qobuz-tui or other qobuz-something. It would be easier to remember. What is the purpose of hifi-rs (hifi rust?)?
Hi, I just found this repo. Thank you for your efforts to make Qobuz working on Linux.
Unfortunately, I can't get it to work:
./hifi-rs stream-album huquowkjgyhpb
Error: PlayerError { error: TrackURL }
Username/Password are correct, since hifi-rs my-playlists -o tsv
is working.
However, hifi-rs my-playlists
is not working:
./hifi-rs my-playlists
thread 'main' panicked at 'database failure: RowNotFound', /home/runner/work/hifi.rs/hifi.rs/hifirs/src/sql/db.rs:198:18
Also, could you please provide an example of a URI for the play command?
This command is failing
hifi-rs play --uri https://play.qobuz.com/album/bkzs3314dv4ab
with output
failed to retrieve a track url
Could the project potentially be expanded also to have TIDAL Support?
Pretty normal thing for me to do is find something I like in a playlist etc and want to share it or look into it
The TUI seems to prevent any normal copy actions, I can't figure out a way to grab the current track details
A browser plugin that would intercept qobuz web player play button presses and instead trigger this app to play the album/track/playlist
I have a feeling this is doable, but I'm not quite sure how
I'm thinking along the lines of:
custom protocol handler (not sure how to do this in Wayland, but I recall doing it in older desktops) that fires up the player
some JS injected by the extension that will convert the play event into hitting the custom protocol URL
pretty sure you must be aware, but just in case - there's no binaries attached to 0.2.5
eg https://play.qobuz.com/artist/609181
there is a play button on the web player, but if I paste the URL it doesn't play. Is there any way to work around this?
The new UI is great, but I still like to use the web player to find stuff
When I do find somerthing, I have to kill hifi-rs and relaunch to play the URI
Woudl be nice if it was possible to paste a URI in to the UI somewhere directly - maybe the search box, or maybe just recieve URI from stdin somehow and automatically start playing it?
Tracks with a length over 10 minutes are missing the first digit, i.e. 11:20 becomes 1:20 in the playlist.
This can be observed when playing this album.
When playing an album, eg https://play.qobuz.com/album/p67slf8mf4abc
The tracks play in the correct album order,
however the playlist box seems to have a random order
I wondered if this was a deliberate choice. If not then please regard this as a bug. It would be nice to see the playlist in the order it will actually play.
As the title says, hifi.rs is stopping playback after each track in my playlist, requiring my to select the terminal window it's running from and hit space to start the next song.
I started with "hifi-rs my-playlists" selected the playlist I wanted, then selected 'play'.
The playlist's tracks are visible in the now-playing tab, when a song ends another track is moved to the current track info panel, but playback of the new track will not start without input.
Edit: after manually starting a handful of tracks (10 of 268), I just had one where it was able to start automatically. So apparently it's inconsistent.
Would love the ability to que up song/album/playlist, adding it to the Now Playing list. For instance by moving selection to an item and pressing Q. Adding as playlist could be a similarly implemented.
not critical but definitely a nice feature that the web player does have is scrobbling
seems there is a rust scrobbler
https://docs.rs/rustfm-scrobble/latest/rustfm_scrobble/struct.Scrobbler.html
I don't know the first thing about rust or I'd be up fro having a go at adding it
Hello iamdb,
Firstly, I wanted to express my appreciation for the work you've put into creating the Qobuz terminal music player. It's been a fantastic addition to my Linux setup, allowing me to enjoy music seamlessly from the command line.
However, I've encountered a recurring issue that I'd like to bring to your attention. Whenever I attempt to play a song from an album, regardless of which album it is, the playback works perfectly fine until it reaches the end of the song. At that point, the player fails to transition to the next song. Neither the "next" nor "previous" commands seem to function, leaving the playback in a stuck state.
Even after attempting to restart the program, the issue persists. The only workaround I've found is to manually select a new album or playlist for playback, which interrupts the listening experience.
I'm not sure if this is a known issue or if there's something specific on my end causing this behavior. Any guidance or potential fixes you could provide would be greatly appreciated.
Once again, thank you for your dedication to this project, and I look forward to your response.
Best regards,
The install process seems foolproof, but for some reason isn't working for me. I download version 0.1.4, extract the tar, right click the file, and click execute. Nothing seems to happen after that. Am I missing a step?
I know we have the l
key to jump forwards
just wondering how hard it would be to support mouse click seeking?
if it's not too hard, would be a nice feature
Hi again David,
Any plan to implement notification of the current track? I know hifi-rs is minimal, it's just that I like notifications :-)
I see there is a notifications.rs in player/. Is that supposed to work? Is it WIP? Or completely unrelated?
Instead of using a broadcaster for the player state and the url service, create a single message bus to handle app messages, state changes, actions.
Implement or port features from python-qobuz to here. I think python-qobuz is legacy and possibly dont work anymore with today the API of Qobuz, but check and pick up useful ideas and parts from it.
Hey! I installed this (extracted the tar, copied the binary to my PATH and gave execute permissions), but I dont know, how use this? :D What are first steps that I have to do?
I just ran hifi-rs config username, hifi-rs config password and then hifi-rs play, but hifi-rs play or search or anything else doesn't work.
What causes database errors?
Where this store its configuration?
Thanks so much for this! This is a big favor for Qobuz on Linux.
Hey,
when starting the player, although having set username and password, I get the following error:
023-09-06T10:43:04.264626Z ERROR hifirs_qobuz_api::client::api: no app_id
I have discovered that the database's config table did not contain any rows. After having inserted my username and password manually into the table using the sqlite3 command line tool, the player works just fine. Hence, I suggest that the username
and password
sub-options of config
might not work correctly.
This happened with both the pre-compiled binary from Github and my self-compiled binary, both being version 0.3.1.
Currently, the player just stops and everything is dropped. Instead, threads should be killed gracefully and the db flushed before exit.
For some reason, when I do enter URL - it loads the item, but doesn't play
I just enter the URL again and it plays
I have read that Qobuz supports RG metadata and I wonder if this is possible to implement? It would be really good to have since Qobuz itself does not let me enable this using at least their web version. Strange that they do not let the user do this.
Trying to build the cursive branch on Fedora 38
Getting this issue
cargo install --path ./hifirs/
Installing hifi-rs v0.1.4 (/home/joseph/Projects/github/hifi.rs/hifirs)
Updating crates.io index
Downloaded scopeguard v1.1.0
Downloaded rkyv_derive v0.7.42
... loads of downloaded lines ...
error: linker `cc` not found
|
= note: No such file or directory (os error 2)
error: could not compile `futures-core` (build script) due to previous error
warning: build failed, waiting for other jobs to finish...
error: could not compile `quote` (build script) due to previous error
error: could not compile `libc` (build script) due to previous error
error: could not compile `proc-macro2` (build script) due to previous error
error: could not compile `memchr` (build script) due to previous error
error: could not compile `serde` (build script) due to previous error
error: could not compile `parking_lot_core` (build script) due to previous error
error: failed to compile `hifi-rs v0.1.4 (/home/joseph/Projects/github/hifi.rs/hifirs)`, intermediate artifacts can be found at `/home/joseph/Projects/github/hifi.rs/target`
Info that might be useful?
git remote -v
origin [email protected]:iamdb/hifi.rs.git (fetch)
origin [email protected]:iamdb/hifi.rs.git (push)
git status
On branch cursive
Your branch is up to date with 'origin/cursive'.
nothing to commit, working tree clean
cargo --version
cargo 1.70.0 (ec8a8a0ca 2023-04-25)
rustc --version
rustc 1.70.0 (90c541806 2023-05-31)
I'm wondering if this is to do with playlists containing songs with different bitdepth/rate
There's the classic tic artefacts that imply digital signal issues, only at the start of the song
Is there some kind of cross fade happening that's not handling mixed bitrates?
FYI I noticed it on this playlist
I've just got around to hooking up rescrobbled
However its failing when playling a playlist due to the meta data for album being missing
I can see this with my trusty loop:
while true; do playerctl metadata --format "Now playing: {{ artist }} - {{ album }} - {{ title }}"; sleep 60;echo; echo; echo; done
that I use for being able to copy/paste whats playing - the album is now missing.
This is when playing a playlist. When playing an album, the meta data is there
Is this a limitation of the Qobuz API, or a bug?
I've seen this a few times now, will start to add them to this ticket as I find them
Play fine via qobuz web, but fail silently in hifirs
Not an issue :)
Just wanted to say thanks for making me able to enjoy this album with flawless gapless
https://play.qobuz.com/album/pxjrx6jww28cb
This is the kind of album that is torture to listen to via the web player
Hi. I would love to use this with my Raspberry Pi 4 + DAC. Is it possible to add a armv7 build of this?
abstract some repetitive functions throughout the player
So I'm finding the new UI is great, the search is very usable
For playlist though, I get to the playlist screen and I'm not sure how to actually play it. If it play the first track it seems to only do that - it doesn't queue the full playlist
There is a <play>
at the top of the list, but clicking this doesn't seem to do anything
I've tried with smaller playlists to see if its just a "massive playlists are too big" kind of issue, but that doesn't seem to be the case.
Is this a PEBKAC or is there a real bug here?
How this works? Does this use reversed the internal, private API of the Qobuz official web client? So does this work exactly the same as librespot?
"Qobuz only supports Linux through the browser and has no officially supported API."?
Hi there - thanks a lot for hifi-rs. It fills a useful gap.
I seem to have a problem in that hifi-rs playing track/artist does not seem to be reported correctly to the system (via dbus I understand?). Or may be I am confused and hifi-rs is not "reporting" the current track (although I can see that my DE is aware that something is playing and I can control with either playerctl or the little gizmo/controller included in many DEs. hifi-rs seems to be sending the album cover to MPRIS when it starts up (again as I can see in the DE small GUI controller), but no information about the track.
Thanks for clarifying.
The API of Qobuz was previously public. At some point it was closed and nowadays only a few people can get docs and keys to it by request. However, after a quick glance, the API seems very similar to what it was years ago. Information about this could be documented in this issue.
Here's what I found:
Let me know if there's a way I can give you some debug output etc
But 0.2.4 just does not play
I am asking because I want to be sure that the artists get their money.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.