The following warnings occurred:
Warning [2] count(): Parameter must be an array or an object that implements Countable - Line: 906 - File: showthread.php PHP 7.2.34 (Linux)
File Line Function
/showthread.php 906 errorHandler->error



Thank you for your donation!


Cloudsmith graciously provides open-source package management and distribution for our project.


Alternative renderers and metadata
#1
[2020-06-03: Updates to Airplay and Squeezelite bullets]
[2020-06-09: Update to Spotify bullet; remove topical reference to SpaceX launch.]

Those with long memories may recall my little side project two years ago to display the output of currentsong.txt on an  Odroid Show2. http://moodeaudio.org/forum/showthread.php?tid=211&pid=1563#pid1563.

The thread started by @mancio61's post about Airplay metadata reminded me of this project---I could use it easily to monitor whether the shairport-sync metadata reader is still unreliable as it was when Tim dropped it from moOde. [NOTE- the second part of Tim's reply holds true regardless.]

Once I had that thought, I figured I should review the metadata situation with all the alternative renderers:
  • Bluetooth - nothing to see here. Nada, zilch, nichts, rien, niente. Move along.

  • Airplay - looks to be straightforward to update currentsong.txt from the metadata reader as discussed in the referenced thread.

    Update: The shairport-sync-metadata-reader seems to be working for grabbing Artist/Album/Track/Genre from the stream in a human-readable form as well as tokenized status info not so readable. The metadata items may be updated asynchronously so one may have to buffer until all the values are current.

  • Spotify - should be possible but doesn't look straightforward. The maintainers of the librespot repo seem unwilling to make a firm decision about metadata [1].  I know, on the other hand, the jivelite addon to piCorePlayer shows metadata in a local display and pCP uses librespot. Trouble is, librespot is coded in Rust, jivelite is coded in Lua/C, and they apparently communicate via shared memory. I'm progressing v-e-r-y slowly through the code and haven't had any aha moments yet. Maybe someone has found better documentation than is in the repo?
    Update: looks like I mispoke. The piCorePlayer is fed by a LMS server and the Spotify service is handled by the 3rd-party "Spotty" plugin for LMS. Same reverse-engineering problem, just different location.
  • Squeezelite - undecided. I've looked through the configuration settings for my LMS server and for the squeezelite renderer and haven't found a magic bullet. At the same time, I see LMS slips an Icy-Metadata tag into its stream to the player once in a while. Might this be the tip of an iceburg or is it just a bit of flotsam?

    Update: Thanks to @mancio61's recent posts here I've uncovered a Logitech Media Server Telnet interface even more detailed than MPD's. The documentation is buried two layers down in the help screen within the LMS executable (!). The commands appear also to be the basis of the HTTP API documented at http://tutoriels.domotique-store.fr/cont...-http.html. It's my judgment that the Telnet interface would be the better choice to integrate into a player which displays metadata for the currently playing track and possibly it's status: play/pause/stop.

  • UPnP/DLNA - this one is a slam dunk. upmpdcli already feeds MPD all it needs and currentsong.txt is automatically updated using existing moOde mechanism.
 
Regards,
Kent

[1] the subject keeps coming up in the issues log. The response seems to be, put it in librespotd, but the librespotd repo hasn't be touched since it was created two years ago. Curiously, the companion librespot-java repo explicitly proclaims "this implementation provides a useful API to request metadata". After all, if I have the SpotifyURI for the current track (along with authentication credentials), I can directly query the Spotify API for the metadata; the local client should do it for me.
Reply


Messages In This Thread
Alternative renderers and metadata - by TheOldPresbyope - 05-31-2020, 03:04 PM

Forum Jump: