Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Sep 30 16:13
    Hallucyn8 opened #53
  • Sep 04 21:08
    moemoeq commented #37
  • Sep 04 21:08
    moemoeq commented #37
  • Aug 25 12:38
    brunchboy edited #52
  • Aug 20 19:03
    brunchboy opened #130
  • Aug 20 19:03
    brunchboy labeled #130
  • Jun 24 20:40

    brunchboy on main

    Update Antora components. (compare)

  • Jun 24 20:31

    dependabot[bot] on npm_and_yarn

    (compare)

  • Jun 24 20:31

    brunchboy on main

    Bump handlebars from 4.7.6 to 4… Merge pull request #127 from De… (compare)

  • Jun 24 20:31
    brunchboy closed #127
  • Jun 24 20:30

    dependabot[bot] on npm_and_yarn

    (compare)

  • Jun 24 20:30

    brunchboy on main

    Bump lodash from 4.17.19 to 4.1… Merge pull request #128 from De… (compare)

  • Jun 24 20:30
    brunchboy closed #128
  • Jun 24 20:30

    dependabot[bot] on npm_and_yarn

    (compare)

  • Jun 24 20:29

    brunchboy on main

    Bump normalize-url from 4.5.0 t… Merge pull request #129 from De… (compare)

  • Jun 24 20:29
    brunchboy closed #129
  • Jun 24 04:22

    brunchboy on main

    Fix broken external API doc lin… (compare)

  • Jun 24 04:18

    brunchboy on main

    Fix broken external link in use… Remove newly login-protected ex… (compare)

  • Jun 24 04:18

    brunchboy on guide-0.6.3

    Remove newly login-protected ex… Fix broken external link in use… Fix broken external API doc lin… (compare)

  • Jun 24 04:18

    brunchboy on guide-0.6.2

    Fix broken external API doc lin… Fix broken external link in use… (compare)

James Elliott
@brunchboy
Hello, @razmih12, and welcome! Unfortunately, CDJ-2000s don’t support sync, so you are going to be limited in what you can achieve, as you have discovered. Also unfortunately, I don’t have access to any of those players to try things and help write code. However, it sounds like you might already be close. When you say that you got it working with one CDJ, can you give me details about how you did that? I don’t think the newer Ableton Link feature can work, because that follows the master player, and there won’t be one with non-nexus players. So, were you using a trigger that was sending MIDI clock?
If that is what you are doing, I think you can get it to work. All you need to do is set the trigger to follow “Any Player”, and it will follow the tempo of whichever player is playing. When both are playing, it has to pick one, and I think it might just pick the lowest-numbered player. But since you are beat matching then, it should hopefully not matter. And once you stop one of them, it will be only following the other.
So, in summary, I suggest you try using a single trigger, configured to follow Any Player, and send MIDI Clock. See if that works well enough for you.
razmih12
@razmih12
@brunchboy Hello! Yes, I will upgrade to nexus2 next year. I did the link procedure as I was reading in here: https://djtechtools.com/amp/2017/07/19/decoding-pioneer-pro-link-connect-cdjs-ableton-link/
I use an RME Fireface 800 to send the link to Ableton.
I tried your version with "any player" but when I preview a track quickly in cue and if it's not in the same tempo as the other player is playing, I get quick changes between the two tempos, and obviously the Ableton did it too, sadly...
So I'll just have to wait till I buy the nexus2. Thank you for your quick reply!
daffron
@daffron

It seems Im unable to open beat link trigger, once it connects it appears on the taskbar, but has no UI

I tried uninstalling and reinstalling but seems to have remembered my old settings - where are these saved?

James Elliott
@brunchboy
That’s strange. It uses the Java Preferences API, and so it depends on your OS. Since you mentioned the task bar it sounds like you might be in Windows, and I believe that means it uses the registry, but I’m not a Windows developer so I’m not precisely certain. If I recall correctly, it organizes its settings under the key org.deepsymmetry.beat_link_trigger (yes, just confirmed that).
You can google how Java preferences work on Windows. If you can figure out where temporary directories are created, you may be able to find the log files (or check on a different machine to find the file path). I wonder if it stored window positions that are off-screen now? But it is supposed to detect that. Maybe I should add a command-line argument to clear the settings. But I would like to figure out what is going wrong in your situation.
RJBooty
@RJBooty
Hi, sorry if this has been asked before but I can't see any results for it.
When using Traktor/DVS and CDJs, the tempo information (tempo slider) is detected by BLT but Ableton/Link doesn't recognise any changes. If I use a CDJ normally (no DVS) everything is as expected. Is there something i've missed? Any pointers much appreciatef
James Elliott
@brunchboy
Hello, @RJBooty! This is the first I have heard anyone asking about this, but unfortunately I don’t really understand what you are trying to accomplish. Beat Link Trigger works with DJ Link Pro, and nearly all features of that protocol require you to be playing a track on the CDJ that has been analyzed in rekordbox to identify where the beats are, and so on. If you are using DVS, none of that is true right? So I would not expect anything to work.
However, Traktor itself can use Ableton Link these days, and so I would recommend you just use that directly, and ignore Beat Link Trigger. The fact that you happen to be using CDJs to control Traktor is irrelevant in this case, you’re not using the rekordbox ecosystem, so BLT is not helpful.
RJBooty
@RJBooty
Hi @brunchboy , thanks for the reply!
It totally makes sense that BLT requires the CDJ to play a track, I guess in this case the 'track' is actually a timecode signal/file.
Though Traktor can indeed use Ableton Link, it isn't possible (as far as I can work out) to make traktor the Master tempo for Link. Which means you can't use tempo faders on CDJs/Turntables running Traktor DVS, as they are locked to the Ableton Link tempo.
I was hoping that there might be a workaround with BLT, as currently (if I use a CDJ in normal mode/not DVS Traktor) BLT acts as the master tempo and Live is the slave.
James Elliott
@brunchboy
Yes, if you are playing a rekordbox-analyzed track, you can use BLT to control an Ableton Link session tempo, or you can allow Ableton Link to be master and control the tempo of the CDJs. That was quite a breakthrough in coding! But when you are just using DVS, I am not going to be able to do anything for you. I think that it is possible to have Traktor be the Ableton Link tempo master, but you will want to ask that on a Traktor forum for details. I have not been using it much since I moved to the rekordbox world.
RJBooty
@RJBooty
I understand that a track has to have been analyzed in Rekordbox and that that's how BLT works, but as mentioned, didn't know if there were any other 'workarounds' for my approach.
If it's any help/insight, I am actually only really using 2 turntables with Traktor DVS, the CDJ doesn't need to be DVS, the issue is having Traktor as the master
James Elliott
@brunchboy
I think that is possible, but I am not the right person to ask for details I’m afraid.
RJBooty
@RJBooty
No worries at all, I appreciate it's not really that BLT related, but thought it worth asking!
Thanks for the replies, and of course for BLT! (Using it in a separate project, as it was meant for, and it's fantastic!)
James Elliott
@brunchboy
Understood! I hope you can get things working the way you want. I may poke around a bit when I have a chance, but don’t wait around for me to. :smile:
And thank you for the kind words, I always love hearing from people who are using these projects.
RJBooty
@RJBooty
Please let me know if you do get the chance!
Weirdly, have just come across this...(I have next to no understanding of code/programming, but maybe you can make more sense of it!)
https://andyland.info/wordpress/?p=6310
James Elliott
@brunchboy
Oh, sad news, that article says I am wrong, and for some reason Native Instruments have chosen not to allow Traktor decks to update the tempo of the Ableton Link session. So that’s something you’ll need to take up with them. But I’m afraid they are having such problems with profitability and layoffs, that it’s not likely to be a development priority for them any time soon. :worried:
Maybe someday that author will figure out how to release a portable version of their program that runs on any Mac, and ideally code-sign and notarize it so it runs without complaint (but that requires paying for an Apple developer program annual membership, so they may not. I do, in order to allow Beat Link Trigger to run without complications, but it’s a bit eccentric that I spend $105/year on that.)
James Elliott
@brunchboy
If you have a Mac and you’re willing to trust an unsigned, non-notarized Mac binary (I wouldn’t recommend that personally) you could try following his instructions on how to reset the quarantine bit to run it. But going from MIDI clock to Ableton Link is a bit icky in the first place, Link is so much better than MIDI clock. Are there any other DVS programs you could use that have better Ableton Link support? I wonder if Mixxx does these days?
James Elliott
@brunchboy
Ironically, before I got sucked into figuring out how to integrate with the rekordbox beat grid, I built a way for my lighting software to tie into the Traktor beat/bar grid: https://afterglow-guide.deepsymmetry.org/afterglow/mapping_sync.html#syncing-to-traktor-beat-phase
RJBooty
@RJBooty

Standard NI being a pain!
Yeah not sure i'd use that Binary, I have other ways of sending MIDI clock and it's just nowhere near as good, as you say, as link.
It's only really traktor I use as I bought it many moons ago. I'll have a dive into some other DVS.
Might be a silly question, but would Rekordbox DJ/DVS work with BLT? The Rekordbox information won't be coming from a CDJ, but from the Rekordbox App on the Mac (I guess what i'm asking is if it's routable, somehow)

Afterglow looks interesting and a potential solution so I'll dig into it, and as it's to do with lighting might be super helpful for what we're doing.

If it's of any interest to you/others, this whole project is to gain (pretty much just) timing information from the CJDs/Turntables from Traktor/DVS system, send out (synced) CV information from Live and (synced) video from Resolume, to modular video eurorack system, final output to a projector and a TV wall. Currently, using BLT as it was meant to be used is perfect (albeit only using it for bpm information at the moment) so big thanks! Hopefully further down the line we'll look at using more of the triggers/BLT system to create something almost entirely automated

James Elliott
@brunchboy
Unfortunately when rekordbox is operating in performance mode it does not participate in a DJ Link network so it won’t communicate with BLT. It’s only CDJs and XDJs (stand-alone and now XZ) that provide the packets we need to work with.
Afterglow is probably too experimental to be worth investing a lot of time into unless you are keen on building a really unique algorithmic light show using Artnet and DMX. :smile:
RJBooty
@RJBooty
I don't suppose there's any discussion of further developing BLT to work with Rekordbox in performance mode?
(if one can even call it further development, pretty much an entirely different feature! haha)
James Elliott
@brunchboy
Sorry, you misunderstood. That’s simply not technically possible. Rekordbox is the limitation: it does not participate in a network in that mode.
So you need to lobby Pioneer to change rekordbox. But they seem to basically have it split into two different words that don’t speak to each other, and they have had no interest in supporting outside compatibility. We had to figure everything out on our own.
James Elliott
@brunchboy
(They also seem to be afraid of cannibalizing sales of their expensive “club-level” gear if they were to allow too many features to work with their entry-level offerings.)
RJBooty
@RJBooty
Ah my mistake. Thank you for clarifying
James Elliott
@brunchboy
No worries, I’m just sorry I didn’t have better news to share.
Maddix
@nmaddix
Hi @brunchboy, hope all is well. Quick question here... is the only way to generate OSC messages through clojure expressions? Is there a comprehensive guide on this somewhere? I'm finding the search feature to not be too helpful finding examples in the docs. They're sprinkled in there but searching for osc doesn't really find them, and searching for osc-send doesn't work due to the way it searches
Kevinnns
@Kevinnns

@nmaddix Don't know if this helps... but what I've done to communicate with Lightjams! is the following:

In Lightjams!:
Enabled OSC
Set the port and network adapter

Created a mapping /magic/0 this is mapped to "channel 0" in lightjams

Also I've mapped OSC channel 0 to a function inside Lightjams to do a step in a chase (turning lights on/off)

In BLT:
Main Screen:
Triggers -> Global Setup Expression:
(swap! globals assoc :lightjams (osc/osc-client "x.x.x.x" port))

Triggers -> Global Shutdown Expression:
(osc/osc-close (:lightjams @globals))

To send a command per beat to Lightjam, in BLT:
Triggers -> New Trigger

On that new trigger:
Edit Beat Expression:
(when (#{1 3} beat-within-bar)
(osc/osc-send (:lightjams @globals) "/magic/0" 1)
(Thread/sleep 40)
(osc/osc-send (:lightjams @globals) "/magic/0" 0))

Note: With lightjams it's a bit easier, as I don't have to dive into the documentation of a vendor to figure out how OSC needs to be called to execute what function. That's what got us with a "hardware" DMX table like the Hog4.
Note 2: Yes, there is a sleep in there, otherwise the OSC commands follow too quickly and Lightjams doesn't register the 1, so it'll do nothing. It depends on the destination if suchs things are needed
Note 3: The code could be way more clean, but it's what I could do :')

Maddix
@nmaddix
Awesome thank you. Yes I think this covers it, and it matches what I thought I understood about it already
Kevinnns
@Kevinnns
I do think the documentation from vendors is pretty lacking in how to properly call their devices leveraging OSC. Gave me quite some frustration here and there
James Elliott
@brunchboy
Thanks for jumping in while I slept, @Kevinnns! The only thing I would add is I strongly recommend wrapping your sleep and the send which follows inside a (future …) because otherwise they tie up the thread that is processing expressions, and can delay other things that need to happen, as I discuss in this section: https://blt-guide.deepsymmetry.org/beat-link-trigger/0.6.2/expressions#with-great-power-comes-great-responsibility
The search is limited, but it’s a lot better than nothing. If anyone knows of something other than Lunr that can be embedded inside an Antora documentation site to offer offline search, I will happily investigate it. It may also be time to index only the latest release.
James Elliott
@brunchboy
And more broadly, the OSC library I embedded is documented here: https://github.com/rosejn/osc-clj
If you don’t want to use Clojure, you can use any JVM language you like, compile your own library into a Jar file, load it as a local library as described in https://blt-guide.deepsymmetry.org/beat-link-trigger/0.6.2/importinglibraries#local-libraries and call that in your expressions.
Kevinnns
@Kevinnns
@brunchboy good one, thanks! I knew it was a dirty solution ;).
James Elliott
@brunchboy
A dirty solution that works is a triumph though! :grinning:
Kevinnns
@Kevinnns

I was thinking @brunchboy could you in a few simple examples try and explain how I would be able to activate/de-active different Beat Expressions based on triggers from the show interface?

I'm trying to wrap my head around how I'm going to created/trigger "normal chases" and also deactivate them when done with a certain part of a track.
Second thing I'm trying to think of if it would sense to define some global OSC commands in a :Thing making it able to switch to a different chase/color. Since it seems Lightjams works with OSC value's and remember those values when you don't send a 0 to disable them.

I'm even thinking (but correct me when I'm wrong) it would be even better to define global Expressions/Triggers or something that I call from the show interface. For example:
Where would I define OSCColorRed, OSCColorBlue and then define what OSC commands should be send to do that in there. In that case my current believe is that I can just do a search/replace in 1 place for those OSC commands if I were to switch between Lightjams and the Hog, or anything else.

Or is my head making a wrong turn here?
I don't know if I'm explaining myself correct here, seeing my head goes derp about this, it's hard to explain what I'm trying to think :P
James Elliott
@brunchboy
That sounds like a promising line of thought. Full details will have to wait until I am at a real computer, but it sounds like you want to create a library of shared functions (I think that’s what I called them when I added them a release or two ago), and call those from your show triggers.
Kevinnns
@Kevinnns
I think that sums it up in proper wording yes, thank you for that :')
James Elliott
@brunchboy
If you can show me the code you use for lightjams vs. the hog, we might be able to parameterize things so you only need to change a setting in one place.