Stagelinq protocol API availability? (Part 2)

@erikrichardlarson on my primego I set both mixer faders at 100% and set the crossfader to channel 2. It reports:

[10:17:49] [LOG] /Engine/Deck1/ExternalMixerVolume => {"type":0,"value":0}
[10:17:49] [LOG] /Engine/Deck2/ExternalMixerVolume => {"type":0,"value":1}
[10:17:49] [LOG] /Mixer/CrossfaderPosition => {"type":0,"value":1.2599999904632568}

When sliding the crossfader all the way to the left (channel 1) it reports:

[10:17:51] [LOG] /Mixer/CrossfaderPosition => {"type":0,"value":0.009999999776482582}
[10:17:51] [LOG] /Engine/Deck1/ExternalMixerVolume => {"type":0,"value":1}
[10:17:51] [LOG] /Engine/Deck2/ExternalMixerVolume => {"type":0,"value":0}
[10:17:51] [LOG] /Mixer/CrossfaderPosition => {"type":0,"value":0}

And the mid-way point:

[10:20:17] [LOG] /Engine/Deck1/ExternalMixerVolume => {"type":0,"value":1}
[10:20:17] [LOG] /Engine/Deck2/ExternalMixerVolume => {"type":0,"value":1}
[10:20:17] [LOG] /Mixer/CrossfaderPosition => {"type":0,"value":0.6499999761581421}

Hope this helps?

I also pushed a small fix (fixed issue when there is no album art) and the ability to disable the filetransfer service (--disableFileTransfer).

We moved the bug discussion to Github:

Thanks! If you’ve got some Prime gear to try it on, let me know how it goes!

1 Like

I tried it out with 2xSC5000+X1800 combination and it only displays the currently playing track information and channel fader status from either one of the players but not both, depending on which player the app detected first when it started.

Ah, yes, the way it is written (currently) is that it tries to connect to the first device endpoint it can find that provides a StateMap service. If you turn off that device, it will connect to the next device and just continue on until it either finds a StateMap endpoint or no more devices exist.

I’ll see about adding better instrumentation to map out supported StateMap values for each device. With that information, I could probably figure out which devices provide which StateMap attributes. (I’m assuming the players know what song is loaded and playing, but only the mixer device knows the fader positions?)

To support more than the all-in-one Prime controllers, I’d definitely need to rewrite this so it can connect to multiple devices at once rather than just connecting to the first thing it can find.

@kkirjala - Here’s a new version with a “probe” command added.

You can run it like this:

./denonctl probe --log.level debug

It should try to connect to each device advertising a StateMap and subscribe to all 206 possible state values (that we know of according to what is present in the Go stagelinq library). It will then wait 5 seconds for a response to all of the statemap probes and dump anything it gets back as a debug log message.

It will be interesting to see what devices offer StateMap in your setup and what subscription values are valid. This should aid in figuring out how to “stitch” together multiple devices into one view in order to [hopefully] provide the “Now Playing” functionality for multiple devices one day.

You can paste the output here (it’ll be long) or you can email it to me (mhite@hotmail.com).

This is just a thought, but would it be a totally stupid idea to try to contact someone at Denon / inMusic and try to get them to release the official API specification? I mean, the more third-party software there is that can interact with the Denon Prime series equipment the more devices they’re going to sell, and not doing the same that Pioneer has done (keeping the ProDJ Link API spec secret) would bring Denon a competitive advantage.

Has anyone tried to reach out to the right people at inMusic to initiate a discussion?

2 Likes

Hey @erikrichardlarson,

Would you happen to be able to provide instructions to build the electron app for Unbox? I’ve got some time on my hands, I’d like to take a crack at some issues / features.

I’ve got my build environment ready, just need to know what you’re actually running to turn the code into an electron app.

Thanks!

I think this is a great idea, I’ll reach out to someone and report back what I can find out.

Yeah no problem, are you on Mac or Windows?

Im on mac, I can do builds on either M1 or Intel mac.

Nice Mac has been easier for me, you can run electron-builder --mac --x64 and electron-builder --mac --arm64 for Intel and M1 respectively. You might need to rebuild the native dependencies before building the app, you can do that with: GitHub - electron/electron-rebuild: Package to rebuild native Node.js modules against the currently installed Electron version

Just let me know if you run into any issues.

Cool! I was able to get it to build, but it looks like maybe im missing a style dependency? See the screenshot:

Other than the style it works :laughing:

Haha oh yeah will send you the styles

I reached out to the Director of Engineering at inMusic, we’ll see if he gets back to me haha

3 Likes

does anyone tried to hack these ?
[14:36:00] [INFO] port: 34067 => TimeSynchronization [14:36:00] [INFO] port: 37943 => BeatInfo Thanks

Just wanted to let those following this thread know that I’ve been making nice progress with my “now playing” app efforts. Check out a sneak peak here:

You can find the documentation and a link to join the alpha program on the same web site.

3 Likes

Hey,some more good news…Myself and honusz, we just mangaged to crack BeatInfo on the Stage LinQ protocol…so it may be that guys will be relesing someting in sort time… anyway that s an update for now…if you interested you can check for more info on BeatInfo proof of concept · Discussion #12 · MarByteBeep/StageLinq · GitHub … Dzelionis

2 Likes

nice … when I have more spare time I will also try to sniff a bit at the protocol :wink:

I wanted to throw my hat in the ring for another “Now Playing” app. My app is called “Now Playing 2” and it’s in final beta testing (2.1.0-rc.1). I’ve been working on Now Playing for almost 2 years.

Specific Denon features with Now Playing 2:

  • Works with two SC5000s using both A&B layers, Prime 4, and Prime Go.
  • It pulls album art and metadata from USB stick in your Denon DJ
  • Customizable mixing style modes. (Meaning: optionally consider your fader positions & play time to determine “currently playing” track)

Other features

  • Mac + Windows
  • Auto-config for streamers using separate two computers (ie: no need to know hostnames)
  • Auto-detects other software (ProDJ-Link, Rekordbox, Traktor, Serato, etc.)
  • Beatport Link metadata support
  • 5 built in themes - customizable in the app
  • Album art from your media files (with fallback to Discogs)
  • Automatic track title cleaning (like removing Camelot keys, etc)
  • Playlist export (for uploading tracklists to things like 1001tracklists / mixcloud)
  • Twitch / Discord bot built-in
  • Create your own themes with just HTML.

Behind the scenes it’s using MarByteBeep’s Typescript library which is based off IceDream’s Go library. Shoutout to @mhite (who referenced my first Now Playing app in his app), Evan Perkhiser (friend of mine who wrote ProLink-Connect), and @erikrichardlarson who I was inspired by and fully respect his Unbox app (we possibly inspired each other).

Full disclosure: The “free” version of my app is 100% fully functional and ever expires. The “pro” version unlocks Twitch/Discord bots and the ability to edit the themes or create your own.

I’m a partnered Twitch streamer myself.

(ah, i can’t post links so the website is … nowplaying2 dot com)

2 Likes

Been using your V2 since around 0.15 and was the only one that worked for me. StageLinQ has a few quirks by falling asleep or being temperamental but I managed to get it working and enjoy using it.

Thanks for the help Triode over on Discord.

1 Like