It is one of the option. I know there are others made by fellow roonies that are still being actively developed. You can look the ones by @Mike_Plugge.
Thank you so much for your fast answer. I will definitely a socket.io implementation is great. It is the same than for volumio. I understand you are in Singapore like me. Timezone is easier.
I will keep you posted of my progress.
I would try to do something like this: https://youtu.be/ybQrpgSK1yM
I am a roon beginner so I hope it makes sense.
Awesome. You should be able to do what youāve done apart from connecting to Spotify.
If you want to connect to third party player, you can try the other repository (https://github.com/st0g1e/roon-extension-thirdparty-player) where you can play it through Audirvana. I created it when I was trying to see the difference in sound between the two.
Where are you at in Singapore? maybe we can meetup sometimes. I know of another Roon regular @wizardofoz who have helped me from Roon in general to networking.
Always happy to meet up with local roon users here in the small red-dot and there are quite a few I knowā¦from different places, including French, Belgian, English, Aussie, and locals too of course.
Well that would be awesome, I feel we have a few common passions and I need to get up to speed on Roon, I guess it is a terrific software. Today, I use volumio and snapcast for the multiroom, all well integrated into Neeo. But a lot of neeo users are strong fan of Roon so I need to widen my horizons :-).
And by the way I feel half French half Singaporean, French origins but in Singapore since 10 years.
Iāve been here 30 yearsā¦half my life, coffee, diy and HIFI amount to most of my other hobbies and Formula 1. Maybe we can start a roon WhatsApp Singapore group.
Iām not 100% sure of exactly how this extension works (nor how to install it without extension manager on a QNAP), but I wanted to ask if it might be usable to run an http command to update an icecast metadata? I use icecasst to play to a couple of radios in my house that are not Roon ready, and it would be greaty to be able to update metadata to show a now playing text. I have a simple url that should work with curl or whatever - can this extension run it itself on track change? Many thanks.
Are you streaming into Roon via icecast as a radio stream or out of Roon via icecast to send roon audio to a streaming radio endpoint?
If out of Roon:
I dont know this extension, but if you are trying to get now playing metadata out of Roon, then you would need to subscribe to zone change events via the Roon API. I doubt that a command only solution such as this would be have a websocket back channel mode for picking up events. This means writing a new extension from scratch (not hard if you know basic javascript and node programming).
If Into Roon - I guess shoutcast for metadata insertion?
If Iām understanding your question correctly, youād like to show the information on whatās playing in Roon to icecast and that you have an http url command to update the icecast with.
I donāt use QNAP so I donāt know about its extension manager. You can install it using command line. The step by step is at the bottom of that page.
Once you have it running, you can take a look at player.js starting at line 22
socket.on(āzonesā, function(msg){
if ( inRangeSlider == false ) {
zones = msg;
updateZone();
}
});
This gets call everytime there is a change in the zone metadata (including track seek information which changes every second).
You should call your url to update the icecast here.
Thank you very much for the very speedy and informative reply - I will try thatā¦!
Is there a way to trigger it less often, ie not every second but just on track change?
Thanks again - Iāve got reasonably far in that I have the extension sitting happily in a docker container, Roon likes it, I can access it online; and Iām busily trying to edit player.js at your suggestion.
However I wanted to install axios to do the HTTP request, which seems to break the extension. I can reinstall it, but then it breaks axios. Is this conflict resolvable? My Javascript is pretty weak, which is why I wanted to stick to axios to solve this.
The notification frequency can be more than 1 per second if for example you have more than one zone running, every change on any of the zone will trigger the notification.
We canāt control the update frequency. But if you want to, you can limit it to only notify you on a track change on apps.js.
At line 64 where it says
io.emit(āzonesā, zones)
Before calling this, you can check whether the track has changed or not.
But be careful as it may break other clients that uses it.
As for axios, I did a quick google and see that it seems that it uses node.js as well. Could it be that they are using the same port?
You can try changing the port by going to apps.js and on line 74 change the webport value. And restarting the extension.
Just want to say a quick thanks for this! Iāve long wanted an easy way to get a true sharing link from Roon. After spending an hour or so figuring out how this extension works, I was able to make a few simple changes to the browser and player files to send the album or song to Songwhip, which produces a multi-platform streaming/purchasing link for it that I can then share. Iām looking forward to tinkering more. Thanks, @St0g1e !
Awesome.
Are you sending the song information to the websiteās search page?
I looked at the api and they only have one where we have the url to the song already.
Could you please share your work @AlanTS as I have too been looking for a way to get information OUT of Roon since their own āshareā function is so limited.
Your work might save me from reinventing the wheel or worse, end up with a square wheel. Thanks i.a.!
Happy to share! In htmls/player.js. Iāve commented out the original lines, and replaced them with a line that adds a āshareā link out to songwhip.
for ( var i in data['list'] ) {
html += "<div class=\"gallery\">\n";
html += "<a href=\'javascript:void(0);\' onclick=\"showList(\'" + data.list[i].item_key + "\', \'" + zone_id + "\', 1, 5);\">";
if ( data.list[i].image_key == null ) {
html += "<img src=\'images/roonIcon.png\'/>\n";
} else {
html += "<img src=\'" + topUrl + "/roonAPI/getIcon?image_key=" + data.list[i].image_key + "\'/>\n";
}
<!-- revised the block below to add songwhip link. It appears as an asterisk before the artist/track/album -->
html += "</a>\n";
html += "<div class=\"desc\">" + " - <a href=\"" + "https://songwhip.com/create?q=" + encodeURIComponent(data.list[i].title) + "\">*</a>" + data.list[i].title + "</div>\n";
html += "</div>\n";
}
Yep, Iām not using the API at all, just sending an html-encoded request to the search URL. Itās pretty brute-force and doesnāt work for every use case, but itās solid enough for what I want to do most of the time.
thanks for this great extension it helped me a lot to control my Sonos devices via Apple Shortcuts. To fulfill my needs I just need a http request to group/ungroup zones and one for transport the music from one zone to another. Iām not a programmer so I donāt know anything how to code something (Iām happy that I can handle the http requests correct ).
Is there a way to add these commands to the http API? I know that these commands can be used because the home-assistant roon extension can do them. But for me it would be nicer to have a http request instead of using this home automation software which is too much for my needs.
This would help me to handle my Sonos ungrouping problems (if I use these commands in http extension, the Soro app for Sonos (iOS shortcuts for Sonos), and the Apple Shortcuts appā¦ I should have bought Bluesoundā¦ ) and I (and everyone else) would be able to create some Multiroom presets.