Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Apr 09 21:23

    brunchboy on main

    Remove no-longer needed environ… (compare)

  • Apr 07 02:45

    brunchboy on main

    Force browsers to load updated … (compare)

  • Apr 07 02:23

    github-actions[bot] on v7.0.1-SNAPSHOT

    (compare)

  • Apr 07 02:22

    brunchboy on main

    No longer throw exceptions when… (compare)

  • Apr 05 14:13
    CKunhardt closed #133
  • Apr 05 14:13
    CKunhardt commented #133
  • Apr 05 04:48
    brunchboy commented #133
  • Mar 26 19:45
    dependabot[bot] labeled #134
  • Mar 26 19:45
    dependabot[bot] opened #134
  • Mar 26 19:45

    dependabot[bot] on npm_and_yarn

    Bump minimist from 1.2.5 to 1.2… (compare)

  • Mar 26 10:27
    dependabot[bot] labeled #43
  • Mar 26 10:27
    dependabot[bot] opened #43
  • Mar 26 10:27

    dependabot[bot] on npm_and_yarn

    Bump minimist from 1.2.5 to 1.2… (compare)

  • Mar 21 00:13

    brunchboy on main

    Add thread dump instructions fo… (compare)

  • Mar 18 04:05

    brunchboy on main

    Add Zulip chat links [skip ci] (compare)

  • Mar 18 03:56

    brunchboy on v0.6.3-SNAPSHOT

    (compare)

  • Mar 18 03:55

    brunchboy on v0.7.0-SNAPSHOT

    (compare)

  • Mar 18 03:55

    brunchboy on v7.0.0-SNAPSHOT

    (compare)

  • Mar 17 23:01

    brunchboy on main

    Update chat links to the specif… (compare)

  • Mar 17 22:30

    brunchboy on main

    Update chat links to the specif… (compare)

sergioherculano
@sergioherculano

@brunchboy Thanks for the input, I will check gain the packet detail information you prepared, anyway looking what I got from RZX so far it seems to be different values what means it will be a big work to analyze and have some results.

What I could recognize is that in the side of RZX they are using 6 Ports (49434, 49435, 49436, 49437, 49438 and 49439) and in the side of Rekordbox (49123, 49124, 49125, 49126, 49127, and 49128) the first RZX port communicate with the first of Rekordbox and son on.

Other thing is that the packets starts with 2 different patters:
https://drive.google.com/file/d/1KpHGKSU7a-ttrNpDyXU1_Laod1iK7voL/view?usp=sharing

https://drive.google.com/file/d/1KxhKckbVFf6cbUtflcYqJGuaARgQE-lK/view?usp=sharing

What is similar what you figured out in Pro DJ Link.

Let see what I can find :)

Sérgio

James Elliott
@brunchboy
That’s exciting! Best of luck, and if you have any theories that need help thinking about, or feel stuck about something, people here might be able to bounce ideas around.
sergioherculano
@sergioherculano

First and very simple to conclude, the first part represents the direction of communication flow:

192.168.110.1 -> 192.168.110.254: https://drive.google.com/file/d/1KpHGKSU7a-ttrNpDyXU1_Laod1iK7voL/view?usp=sharing

192.168.110.254 -> 192.168.110.1 : https://drive.google.com/file/d/1KxhKckbVFf6cbUtflcYqJGuaARgQE-lK/view?usp=sharing

The IP Address 192.168.110.254 is the USBLAN IP of RZX Controller. Now I am asking myself what hell is this IP 192.168.110.1 (can be Rekordbox or Something else).

Sérgio

Army
@Army-dev
hey, i didnt know anything about networking. but i'm already working on a project, which reads out the information from rekordbox into osc/midi signals. https://www.reddit.com/r/vjing/comments/jl92r3/i_dont_have_money_for_showkontrol_so_i_programmed/
sergioherculano
@sergioherculano
Hi @Army-dev , great work how did you implemented that ? I am interested . Thanks
Kevinnns
@Kevinnns
@Army-dev that looks damn awesome!
James Elliott
@brunchboy
Interesting @Army-dev, you are examining the memory of the running rekordbox program to do this? Does that work cross platform? How does it cope with new releases? And where is the source code? A very intriguing approach!
Army
@Army-dev

Interesting @Army-dev, you are examining the memory of the running rekordbox program to do this? Does that work cross platform? How does it cope with new releases? And where is the source code? A very intriguing approach!

Development is still in progress, it basically reading out the information from the memory, it works like a "game cheat", and i think it will works on cross platforms too??? i never touchd a computer with MacOS in my life :D. I gonna make it open source. if there is a new update to rekordbox i have to find the values again i think, but i didnt tryed this yet because i have a cracked rekordbox lol. (or just dont update until i relase the config file for it) I need time/motivation to finish this project to make a stable relase :) i'll update you guys

James Elliott
@brunchboy
Sounds good! My approach is to do all development in the open on GitHub even before anything works, but I know that’s not what everyone likes. Thanks for sharing what you have!
blackcoffeerider
@blackcoffeerider
happy new year everyone
sergioherculano
@sergioherculano

Happy New Year Everyone.

I found another application in GitHub that is also reading memory from Rekordbox to get the information https://github.com/Kethsar/RekordboxReader.

Returning to my point I tried to analyze the USBLan inspection of my DDJ-RZX using WireShark but not found any data that can help to get the information we need, so I decided to make another experience using Python to get information about the current track that is being played from Kuvo and it worked, them using other fields fields from Rekordbox Playlist I was able to have several information such as Track Name, Artist, BPM, track duration, start time, key, energy level and so on. I do not know how this will help me so far but let see :)

James Elliott
@brunchboy
Happy new year! Let’s hope this one is much better than the last. It is fun to see all this exploration happening.
sergioherculano
@sergioherculano
Yes, I just found a nice analysis of Rekordbox, https://rekord.cloud/blog/technical-inspection-of-rekordbox-6-and-its-new-internals and I agree that try to keep Rekordbox as a closed system is the worst thing Pioneer can do, if they open it more solutions will be developed for sure. So let`s continue our analysis and investigation :)
James Elliott
@brunchboy
That is a nice article, I was glad to see they linked to my analysis of the data files. :smile:
sergioherculano
@sergioherculano
With some ideas and using some kind of tricks was possible to grab information of tracks that are being played in Rekordbox, just started this week to implement it let's see where this will go image.png
Army
@Army-dev

With some ideas and using some kind of tricks was possible to grab information of tracks that are being played in Rekordbox, just started this week to implement it let's see where this will go image.png

Good Job!, U used memory reading?

James Elliott
@brunchboy
@Kevinnns has been talking to me privately about this, but I should share that we’re working on a cool new concept, that can be built entirely on the existing BLT platform. It uses a trigger as well as a tiny Show file to give you a GUI like the one below for selecting on which beats a MIDI event (or OSC message, or whatever) gets sent:
BeatMode.png
You can edit an arbitrary pattern on the bottom, or set it in one step using one of the larger buttons; whichever beats (and larger button, if one is applicable) are currently being sent are visibly active in the GUI.
Also, you can set up recognized tracks in another show file that you know benefit from certain beat patterns to set that pattern automatically when they start playing.
Kevinnns
@Kevinnns
Yep, cool for all the work on it already James! I hope it can benefit others at well.
To give an idea why we're having that discussion: With the current Lightning application I'm using, I'm unable to send MIDI clock or an different value to get the speed/step synced to the beat grid
So to work a round that I've been using BLT with the Beat Expression to send an OSC command to go to the next step in a certain chase
Then I started noticing that some tracks have a vibe where you'd like to change the chase/step only on the 1st and 3th beat for instance and others every beat. So instead of creating multiple chases that listen to different OSC commands to go through the steps I asked James if it was possible to do something on the BLT side to switch that up. For now we've been running with 2 Triggers and activated/deactivated the preferred trigger. But what James is now showing will work so much better and easier
sergioherculano
@sergioherculano

With some ideas and using some kind of tricks was possible to grab information of tracks that are being played in Rekordbox, just started this week to implement it let's see where this will go image.png

Good Job!, U used memory reading?

Hi Thanks, I am not using memory reading, first because I am not familiar with development reading memory pointers :), second because I guess reading memory it can be something that will requires a lot of maintenance if Pioneer change something in Rekordbox, what I mean it can be totally dependent of the version of the sofware, maybe I am wrong but since I do not know how to implement such code I started to look ways to capture the Rekordbox screens and apply OCR on top of it, and using Python and some OCR classes I was able to read all information and convert it in a way I am able to read. Right now is just a concept but I am able to read the screen and get all information. I am also in contact with this SCS that has a nice Show Control Application (https://www.showcuesystems.com/cms/), they provide me a 30 days Professional Plus license for testing. My goal now is with the information I got from Rekorbox start a CUE in Show Control System via MTC or OSC to keep videos and lights in sync with the music I am playing. right now I got a nice results with Resolume, it means, I can have a video effect for Intro, another for Drop, other for Breaks and Outros and so on, we are progressing slowly. Basically I could Achieve the same result as demonstrated in this ShowKontrol video with my approach https://vimeo.com/331869833?1&ref=fb-share&fbclid=IwAR0p-XV1nLgHZ9ntt4cOK3A6I_pkF9cw0Hx_h-eXXfBIYGUbvAxBvea-W9c, I will continue with the development and making some other tests, soon I am going to create a real project in Visual Studio and I am going to publish it in GitHub, right now I have just a piece of codes that I am working on the concept.

James Elliott
@brunchboy
So this is something that the DJ would need to cooperate with, you couldn’t run it on a front-of-house network computer like Beat Link Trigger, right? (It would still be hugely useful in scenarios where the DJ is involved, just curious.)
Army
@Army-dev

So this is something that the DJ would need to cooperate with, you couldn’t run it on a front-of-house network computer like Beat Link Trigger, right? (It would still be hugely useful in scenarios where the DJ is involved, just curious.)

Yes, this is the "main" problem for me/or with those methods. But maybe you can do it on cdj2000nxs2 and higher? I dont know if the DJ playing from cdj with usb, what you can see in rekordbox in performance mode. Soo yes Beat Link Trigger is still amazing :)

James Elliott
@brunchboy
If the DJ is playing from the CDJ with USB, it doesn’t interacat with rekordbox in performance mode. Otherwise Beat Link Trigger could as well.
sergioherculano
@sergioherculano

So this is something that the DJ would need to cooperate with, you couldn’t run it on a front-of-house network computer like Beat Link Trigger, right? (It would still be hugely useful in scenarios where the DJ is involved, just curious.)

In the development I am experimenting it can run in other computer in the newtwork, that's how I am working, Rekordbox is running in a MAC and, getting screenshots and sending it for a shared area that my Windows laptop have access to translate the information. I do not know if this experiment will be successful but let's see :)

James Elliott
@brunchboy
The DJ would have to cooperate to run something to take and share those screen shots though. Unless you are providing the computer that runs rekordbox, which is less common than when you are providing the CDJs and mixer and they just show up with a USB.
James Elliott
@brunchboy
I’ve added the new Beat Mapper show to the Master branch of the online user guide: https://blt-guide.deepsymmetry.org/beat-link-trigger/integration_beatpattern
It’s a cool thing I built based on some great ideas that @Kevinnns had for controlling his chases. @drummerclint I bet you would find this useful too.
I still have to document the fancier version that you can map to a physical MIDI controller, but that is also included at the end, and you can probably figure it out from the basic instructions I’ve put in as a starting point.
I’ll merge this back in to the user guide for the current release once it’s finished, so people are more likely to find it online.
Clint Alves
@drummerclint

I’ve added the new Beat Mapper show to the Master branch of the online user guide: https://blt-guide.deepsymmetry.org/beat-link-trigger/integration_beatpattern

that looks fun!

James Elliott
@brunchboy
Thanks, Clint! All right, I have finally finished documenting all the MIDI-mapping code. It always takes a lot longer to try to clearly explain how code works than it does to write it in the first place.
Brian Stark
@bdstark

Hello and first thanks for all the work that has gone into the various packages to tie all these things together over the years! A ton of good stuff anb the protocol analysis is incredibly detailed and useful. I do Go development full time for video control systems, and dabble in lighting on the side. I'm going to try to condense this into a short(ish) message that hopefully makes sense, but happy to provide more as needed.

Setup: 2x XDL1000MK2, DJM900NXS2, RB-DMX1, RB 6.4.2 (paid w/ creative)
Mood: Incredibly frustrated w/ Pioneer who seems to have abandoned the XDJ (which were not cheap and have all the functionality wanted), and the RB-DMX1 "support" has been an expensive kick in the nuts. I know I am not alone in any on this, but I am tired of paying monthly for unusable features that were promised years ago in software that at the time was unlocked by already having payed thousands for the decks, and is seemingly fixed now only by replacing the XDJs with CDJ3000 for only more thousands...

I like the Afterglow programmatic lighting approach but suffer from a lack of artistic ability to create the lighting effects myself. The phrase system used in rekordbox performance mode provides enough for general use, as well as a built UI for editing on a per-track basis, and interfacing with the absurdly expensive RB-DMX1. Running XDJs in HID mode controlling RB in performance mode is a shame, and a touch laggy - it just isn't quite as good as native XDJ playback and requires a laptop right there so the DJ looks like an amateur.

My theory: With the new Pro DJ Link lighting mode in now available, it seems that a CDJ3000 sends phrase analysis information in part of the extra 76 bytes in the status packets, which also implies that it is included in the export (though for this theory a Crate Digger approach is better). All the information is "readily" available (mostly due to your projects, no thanks to Pioneer) for a RB lighting session in link mode to work without a physical CDJ3000 (and indeed if Pioneer chose to support people who merely spent thousands already they could easily implement the same). Creating a virtual CDJ3000 (or perhaps multiple), it could track the physical XDJ beat information (and thus timecode from the beat grid analysis) and map that to the information in the phrase analysis provided through Crate Digger. I think some information for on-air would need to come from the DJM, but is also down the road anyways - to start only a single virtual CDJ should be required that played one really long track, running the length of the set.

Based on your experiences, does this sound possible? Not asking for anything to be done, I am happy to start down that path myself, though I would start with Evan's Go package. This is a really good use case for Go because it could run headless and in (Docker) containers, where Go really accelerates. I have not used Java in years and am nowhere near as competent, and generally disfavor anything using the JVM, harkening back to the days of the Yahoo toolbar if you catch my meaning.

James Elliott
@brunchboy

Hello @bdstark and welcome! You ask some interesting questions, and I will have to ponder them a bit and answer in more depth when I’m not at work, but thanks for the kind words, and at a quick glance what you are proposing sounds quite feasible and reasonable. I don’t know much about the phrase analysis data because my own hardware doesn’t send any of it, but what you say about the CDJ-3000 is interesting. Providing phrase analysis information by tracking the beats and looking it up in the analyzed data sounds like a very useful service, I’d be interested in adding it to my own library based on what you figure out in yours.

And I don’t disagree that Java in the browser was a disastrous implementation—and something I don’t miss despite using it for some crazy UI in my home music server, back before Web 2.0 became a better answer. It is a much better platform for long-running server code, especially with the advent of the fantastic Clojure language and community, but I’d rather you stick in a language and platform you like, and continue spreading these discoveries to a broader platform of developers.

James Elliott
@brunchboy
Today was a long, hard day of work, so I don’t have much to add tonight, other than to say I don’t see why one would need to emulate a CDJ-3000 at all, but maybe that is just because I don’t know how the lighting mode works. What exactly does it send, and where and when? How is it configured? Presumably those are the only things that need to be emulated, and properly interpreted from the exported track data?
Brian Stark
@bdstark
The way I think it work with Rekordbox in lighting pro link mode is that RB determines what deck is on air (this works for any prolink deck), and if the deck sends out phrase information (only CDJ3000 right now as I understand) while it is on-air (and probably with some timing delays during a mix, just like lighting in RB performance mode) translated the phrase information to DMX and sends it via the RB-DMX1.
This is a stand-alone RB instance, not the same one that would be in export mode for playback (or it could be, but not at the same time).
Again, this is my theory based on tests, but still without a 3000 to fully test. However RB in prolink lighting does see the mixer and decks, and determines which is on air with my current setup.
Brian Stark
@bdstark
Mood, bank, ambient, color, and strobe can all be set to auto - just like in performance mode. Phrase is manual only - there is no auto option. That I assume the CDJ3000 would send based on what beat it is on. Whether it sends that continuously or just the first beat needs to be determined (assuming the theory holds).
James Elliott
@brunchboy
If rekordbox is involved, there is no need for the deck to send out phrase information, rekordbox could load it and just react to the current beat information and other player status. But that would not urge people to spend money on new hardware, which is probably why they did it this way. So it would be perhaps even better to write something that does what rekordbox and the CDJ-3000 do, without the need for either of them. Send the DMX directly, as well, using Open Lighting Architecture, without the need for an RB-DMX1.
Brian Stark
@bdstark

Oh absolutely - using the phrase information could drive many different lighting systems. The only reason I would like to use Rekordbox is

  1. RB has an editor built right in RB to do the color matching, head sync, and effects for many different light styles, so much of the artistic pieces (where I struggle) are done. It's not great and its repetitive, but its done and creates a consistent feel.
  2. I have already paid the pioneer tax with the RB-DMX1 (a mistake)
    Ultimately, I actually take the output of the RB-DMX1, send it via ArtNet to the lighting system, and merge it in to an ultimate DMX output. RB doesn't control all things (gobos, etc...), so its far from ideal to being with. However it provides decent enough lighting effects for the majority of tracks after analysis, and the analysis will likely improve. Longer term I would love to use a similar approach outside of the RB ecosystem other than the phrase information - this is how I stumbled on these projects because Afterglow seems to be close to how I thought it could be approached - lighting as functions that get layered and built up.

Lighting as functions still requires the artistic ability to design the look and feel of a show, which is again where I struggle. Things like which colors to use, how the moving heads move, strobes, etc.. all needs to be "designed". That's the only advantage (in my situation) that RB brings to the table - it makes those decisions for me based on assigning lights to different groups. The PAR1-PAR4 groups are assigned to appropriate lights, and RB synchronizes them to look decent together - so it is very simple to configure quickly.

And I agree - Pioneer could have implemented it this way and eliminated the need, but chose to use it as a feature to drive CDJ3000 adoption. I think they are wrong here - people who can get 6 CDJ3000 decks in their rider have no need for automated lighting, they have lighting artist creating a show for them. Clubs that have top of the line Pioneer equipment already have a lighting artist - they need to create unique shows every week, not simple automated shows that are the same. People who want the lighting automation are the wedding or event DJs, smaller bars with a dance floor area, or home DJs where repetition isn't an issue. Its odd because they allow the lowest end tier - no controller and just playing direct from Rekordbox in performance mode to work well. And the highest end tier - CDJ3000 buyers coupled with the highest end mixers - also works. They just totally cut out the prosumer area - those who will spend $5K on stuff, or at least told them to spend less to get a better experience.

Brian Stark
@bdstark
My one non-cynical thought supporting Pioneer in the way they implemented Rekordbox ProLink Lighting mode - the computer that it runs on does not need the music library or track analysis information since it gets sent from the CDJ. It has its configuration of lights and its configuration to map the phrases from the CDJs to its own configuration. The addition of ProLink Bridge supports this - Pioneer is using it to license the phrasing system to lighting control system developers, which looks to be a direct copy of the TCSupply ShowKntrol anyways (direct meaning re-licensed back to Pioneer or outright purchase of the codebase).
James Elliott
@brunchboy
Interesting! And yes, their marketing baffles me sometimes as well.
joostvanhooijdonk
@joostvanhooijdonk

Hi everyone, I am a very happy user of Beat Link Trigger, using it to program all my lighting and visuals, I find it very usefull to program your show aspects :) Lately I found that the RAM and CPU usage by Beat Link Trigger is becoming straining. When I start out playing there is no problem, but it increases and after about an hour it usage about 4GB of RAM and 80% op my CPU. I think it has something to do with the way I setup my variables. I'm no good at programming in Clojure :S
The way I set up my system is:

In the track loaded I define some style paramaters
And in each cue

joostvanhooijdonk
@joostvanhooijdonk

Sorry, about that.. The way I have set it up:
In the Show's 'Shared Expression' I have defined a function 'total':
(defn total[vars text]
(def out
[ [host port (str lpre type lposttext) text] ]
)
)

In each track's "Playing Expression" a variable is defined:
(def stylevars
[ [6 0.875 4.78 1 effective-tempo] ]
)

And in each cue the function 'total' is called making use of that variable:
(total (get stylevars 1)
"text example")

Then the output of the function is used to send an OSC output:
(doseq [output out]
(osc/osc-send (osc/osc-client (get output 0) (get output 1)) (get output 2) (get output 3)))

I was wondering if anybody would know why the RAM is filling up? And perhaps a solution? I think it has something to that variables are defined each time, but I dont another to do this :)

James Elliott
@brunchboy
Hello, @joostvanhooijdonk, I’m sorry to hear you’ve run into a memory leak! I fear it’s unlikely to be something that can be completely resolved by looking at a few snippets of code here, although I already do see two significant mistakes in what you have shared, fixing one of which may help a lot. One quick tip for sharing code first, though: If you put three back-ticks and the word “clojure” with no spaces on the first line of what you are pasting in, then three back-ticks by themselves, no spaces again, as the last line, you get a very nicely formatted, syntax-highlighted view of it. That makes it much easier for people to read and understand. For example:
(def stylevars
  [ [6 0.875 4.78 1 effective-tempo] ]
)