Roon Extension: Community DJ

A bunch of us over on the unofficial Roon Discord have been coping with the current lockdown/quarantine situation by coordinating group music listening parties. We’ve been doing lunchtime album discovery and then evening DJ sessions where one of us will play music for the rest of the group. We’ve been using a dodgy little Discord music bot and suffering the low-fidelity 128kbit streaming quality available via Discord voice chat. The social part is great, the quality part is not. So… we wrote a new Roon Extension to solve our problem.

Screen Shot 2020-04-21 at 4.20.32 PM
RCDJ is an extension for the popular Roon music player. It allows Roon users to synchronize their music playback with other Roon users over the Internet. One user is designated as the DJ. Whatever tracks the DJ user plays on their system will be syncronized to all the subscriber users on their local Roon servers.

This extension does not sync any actual music files or data. All songs played must be independently available to all the participating users

This only works if the users have common local libraries or – more likely – subscribe to the same streaming services like Tidal or Qobuz. In practice, this works really well as long as everyone playing along has the same subscriptions.

Each Roon Core running this extension will connect to a central DJserver which coordinates the playback for all the participating users. In the extension settings, each roon core subscribes to a “channel” as either a DJ or Listener. When the DJ for a channel plays a song, all the listener users in that channel will begin playback of that same song if they have it available. In the event that the song is not available, a listener will either be met with silence or with a random selection depending on if they have Roon Radio enabled for that zone. When the DJ’s next song begins, playback will resume for the listener. Anyone can create their own channel and an unlimited number of people can join that channel as long as they know the channel name.

You can run this, create your own private channel, and share your music with any of your friends who are also using Roon. You can run this extension and join us on Discord and hang out in our DJ channels. You can even run a private DJ server for yourself and your friends if you want to stay completely private.

This extension can be installed using Roon Extension Manager v0.11.5 if you’re using that (which I highly recommend!). It can also be installed “by hand” if you want. More details, documentation, and setup instructions can be found on the GitHub repository for the project:

config

This is a brand-new extension. Right now it works great, but it’s light on bells and whistles. We’re actively developing it and have some big plans for what else the extension should do. Please feel free to join us on Discord to share tunes and talk tech.

8 Likes

Wooha!, Awesome, Thanks @nugget! and Congrats!

Yes Indeed! Congrats nugget! I’ll still have to use the horrible Discord bot to host my lunchtime sessions.

1 Like

:stuck_out_tongue_closed_eyes: :upside_down_face: :stuck_out_tongue_closed_eyes:

Sounds great but I don’t find the install instructions in the GitHub…? I’ve done a few Docker pulls but never cloned git.

Love to join in, please advise

1 Like

Assuming you have a working node and npm installed on your host, it’s simply a matter of:

git clone https://github.com/nugget/roon-community-dj.git
cd roon-community-dj
npm install
node roon-community-dj.js

Once the extension is running, go to Settings / Extensions in your Roon app. Select your playback Zone, choose a channel name to join, and set your nickname.

I’ve got a pull request for the Roon Extension Manager all ready to go, so as soon as @Jan_Koudijs has a chance to merge, it will be a lot easier for people to get going.

Edit: this Extension is now available via the Roon Extension Manager and that is definitely the simplest way to get it running if you’re already using it.

1 Like

Cloning into ‘roon-community-dj’…

git@github.com: Permission denied (publickey).

fatal: Could not read from remote repository.

Please make sure you have the correct access rights

and the repository exists.

1 Like

URL updated to https:// in my post. Sorry about that.

1 Like

Last night was definitely fun.
looking forward to today’s mix! :slight_smile:

Check this out:

3 Likes

wow. what a great idea! i’ve been using Roon 3 years for my weekly DJ residency. it’s a legit DJ suite if mixing isn’t needed. i’ve long felt Roon should further explore it’s usefulness as a DJ tool. very much looking forward to tuning in.

2 Likes

The non technical game-over type problems you hit with any kind of DJ like apps in something like Roon are:

  1. Streaming services wont allow overlapped playback - for licensing reasons.
  2. Streaming service wont allow any function that could be orientated towards public playback - for licensing reasons.
  3. Any kind of manipulation of the audio (beyond basic tone control and playback adaptation) are also likely to be prohibited for licensing reasons.

This means that if Roon even wanted to support DJ style use, then in practice they could only do so for you local library. If you are restricted to your local library then you may as well just use NI tractor on your phone/tablet or a grown DJ app (tractor/serato etc) on your laptop with a full controller setup.

The best Roon could ever under typical licensing restrictions is I guess what you have done - a shared queue with roughly syncd playback.

This is separate from the technical effort / cost around implementing and/or licensing suitable speed/pitch processing like that used in Ableton live and NI Traktor for eg (Elastic Audio). Then add some basic beat analysis (having done this myself in the past - this is also a major exercise in itself) etc for auto cue and sync etc. Of course basic old school vinyl like pitch control would suit us old school DJs, but still - I wonder if Roon could even handle variable rate re-sampling that allowed for continuous speed control, nudging etc for even an old school approach without some major changes to itself DSP pipeline which seem unable to deal with real time parameters.

I think you went a bit extreme?

I think the idea here is to share and enjoy music with one another, specially during this times.

Can someone point me to instructions as to how to install the extension manager please?

.sjb

Please checkout the Installation page of the Wiki. If you have questions it is best to post them in the Extension Manager thread.

2 Likes

wow! very nice idea and clever functionality!
thank you! how do you recognice if a user actualy have that song just playing by the DJ?
filename-comparison?