Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • 02:35
    teknopaul commented #31
  • 02:25
    teknopaul commented #31
  • 02:03
    teknopaul commented #31
  • 01:45
    teknopaul commented #31
  • Jan 18 05:51

    brunchboy on guide-0.6.3

    Start documenting Beat Pattern … Clarify how the set expression … Explain how the beat pattern UI… and 10 more (compare)

  • Jan 18 05:44

    brunchboy on master

    Update dependencies. Continue explaining the MIDI-re… Continue explaining the MIDI-re… and 5 more (compare)

  • Jan 17 21:03
    brunchboy commented #31
  • Jan 17 21:03
    brunchboy commented #31
  • Jan 17 06:04
    teknopaul commented #31
  • Jan 17 01:36
    brunchboy commented #31
  • Jan 17 01:35
    brunchboy commented #31
  • Jan 17 01:33
    brunchboy commented #31
  • Jan 17 01:19
    teknopaul opened #31
  • Jan 14 04:36

    brunchboy on master

    Document the beat pattern MIDI … Start explaining the MIDI-relat… (compare)

  • Jan 13 04:40

    brunchboy on master

    Explain how the beat pattern UI… Add MIDI mapped show, to be doc… (compare)

  • Jan 12 07:15

    brunchboy on master

    Clarify how the set expression … (compare)

  • Jan 12 06:53

    brunchboy on v0.7.0-SNAPSHOT

    (compare)

  • Jan 12 06:53

    brunchboy on master

    Start documenting Beat Pattern … (compare)

  • Dec 28 2020 23:23

    brunchboy on guide-0.5.3

    (compare)

  • Dec 28 2020 23:19

    brunchboy on v0.6.3-SNAPSHOT

    (compare)

Pim W
@PimW_gitlab
2020-Sep-21 20:40:31 INFO [org.deepsymmetry.beatlink.data.CrateDigger:91] - CrateDigger starting because MetadataFinder[running:true, passive:false, loadedTracks:{}, mountedMediaSlots:[], mountedMediaDetails:[], metadataCacheFiles:{}] has.
2020-Sep-21 20:40:31 INFO [org.deepsymmetry.beatlink.data.MetadataFinder:354] - Recording rekordbox collection mount.
2020-Sep-21 20:40:31 INFO [org.deepsymmetry.beatlink.data.MetadataFinder:947] - Reporting media mounted in SlotReference[player:17, slot:COLLECTION]
2020-Sep-21 20:40:31 INFO [org.deepsymmetry.beatlink.data.MetadataFinder:351] - Processing device found, number:33, name:"XDJ-XZ".
2020-Sep-21 20:40:31 WARN [org.deepsymmetry.beatlink.CdjStatus:607] - Received CDJ status packet with reported payload length of 292 and actual payload length of 256
2020-Sep-21 20:40:31 INFO [beat-carabiner.core:261] - Realigning to beat 15 by 0.6210299999999993
2020-Sep-21 20:40:31 INFO [beat-carabiner.core:261] - Realigning to beat 17 by 0.6282999999999994
2020-Sep-21 20:40:31 INFO [beat-carabiner.core:261] - Realigning to beat 18 by 0.991658000000001
2020-Sep-21 20:40:32 INFO [org.deepsymmetry.beatlink.dbserver.ConnectionManager:308] - Player 3 doesn't answer rekordbox port queries, connection refused, not yet ready?
2020-Sep-21 20:40:32 INFO [beat-carabiner.core:261] - Realigning to beat 19 by 0.9991209999999988
2020-Sep-21 20:40:32 INFO [beat-carabiner.core:261] - Realigning to beat 20 by 0.9989230000000013
2020-Sep-21 20:40:33 INFO [beat-carabiner.core:261] - Realigning to beat 23 by 0.9998889999999996
2020-Sep-21 20:40:34 INFO [org.deepsymmetry.beatlink.dbserver.ConnectionManager:308] - Player 3 doesn't answer rekordbox port queries, connection refused, not yet ready?
2020-Sep-21 20:40:34 INFO [beat-carabiner.core:261] - Realigning to beat 24 by 0.9990389999999998
2020-Sep-21 20:40:37 INFO [org.deepsymmetry.beatlink.dbserver.ConnectionManager:308] - Player 3 doesn't answer rekordbox port queries, connection refused, not yet ready?
2020-Sep-21 20:40:37 INFO [org.deepsymmetry.beatlink.dbserver.ConnectionManager:323] - Player 3 never responded with a valid rekordbox dbserver port. Won't attempt to request metadata.
2020-Sep-21 20:40:41 INFO [beat-carabiner.core:261] - Realigning to beat 40 by 0.9998689999999968
ava -jar /home/pi/Downloads/open-beat-control-0.1.1-Preview.jar --bridge --latency 1
2020-Sep-21 20:41:29 INFO [open-beat-control.logs:86] - Open Beat Control version 0.1.1-SNAPSHOT-2-0x9cc7 built Sat Sep 12 23:21:06 UTC 2020
2020-Sep-21 20:41:30 INFO [open-beat-control.logs:87] - Java version 11.0.7, OpenJDK Server VM, Raspbian
2020-Sep-21 20:41:30 INFO [open-beat-control.logs:88] - Operating system version Linux 4.19.118-v7l+
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by clojure.lang.InjectedInvoker/0x6fbabc28 (file:/home/pi/Downloads/open-beat-control-0.1.1-Preview.jar) to method sun.nio.ch.DatagramSocketAdaptor.bind(java.net.SocketAddress)
WARNING: Please consider reporting this to the maintainers of clojure.lang.InjectedInvoker/0x6fbabc28
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
2020-Sep-21 20:41:30 INFO [open-beat-control.core:193] - Running OSC server on port 17002
2020-Sep-21 20:41:30 INFO [open-beat-control.core:206] - Waiting for Pro DJ Link devices...
2020-Sep-21 20:41:30 INFO [open-beat-control.core:165] - Trying to connect to Carabiner daemon on port 17000 with latency 1
2020-Sep-21 20:41:30 INFO [org.deepsymmetry.libcarabiner.Runner:261] - Starting Carabiner 1.1.4 on port tcp://127.0.0.1:17000
2020-Sep-21 20:41:31 INFO [open-beat-control.core:216] - Pro DJ Link Device Found: DeviceAnnouncement[device:17, name:rekordbox, address:192.168.2.9]
2020-Sep-21 20:41:31 INFO [org.deepsymmetry.beatlink.VirtualCdj:883] - Found matching network interface eth0 (eth0), will use address /192.168.2.20/24 [/192.168.2.255]
2020-Sep-21 20:41:31 INFO [open-beat-control.core:216] - Pro DJ Link Device Found: DeviceAnnouncement[device:3, name:DJS-1000, address:192.168.2.4]
2020-Sep-21 20:41:31 INFO [beat-carabiner.core:324] - Connected to Carabiner daemon, version: 1.1.4
2020-Sep-21 20:41:37 INFO [open-beat-control.core:135] - Virtual CDJ running as Player 5
2020-Sep-21 20:41:37 INFO [open-beat-control.core:216] - Pro DJ Link Device Found: DeviceAnnouncement[device:1, name:XDJ-XZ, address:192.168.2.3]
2020-Sep-21 20:41:37 INFO [open-beat-control.core:216] - Pro DJ Link Device Found: DeviceAnnouncement[device:2, name:XDJ-XZ, address:192.168.2.3]
2020-Sep-21 20:41:37 INFO [open-beat-control.core:216] - Pro DJ Link Device Found: DeviceAnnouncement[device:33, name:XDJ-XZ, address:192.168.2.3]
2020-Sep-21 20:41:37 WARN [org.deepsymmetry.beatlink.VirtualCdj:2574] - Ignoring mixer device number assignment offer; we are not claiming a device number!
2020-Sep-21 20:41:37 WARN [org.deepsymmetry.beatlink.VirtualCdj:2574] - Ignoring mixer device number assignment offer; we are not claiming a device number!
2020-Sep-21 20:41:37 INFO [org.deepsymmetry.beatlink.dbserver.ConnectionManager:308] - Player 3 doesn't answer rekordbox port queries, connection refused, not yet ready?
2020-Sep-21 20:41:37 WARN [org.deepsymmetry.beatlink.VirtualCdj:2574] - Ignoring mixer device number assignment offer; we are not claiming a device number!
2020-Sep-21 20:41:37 WARN [org.deepsymmetry.beatlink.CdjStatus:607] - Received CDJ status packet with reported payload length of 292 and actual payload length of 256
2020-Sep-21 20:41:37 INFO [org.deepsymmetry.beatlink.data.MetadataFinder:351] - Processing device found, number:2, name:"XDJ-XZ".
2020-Sep-21 20:41:37 INFO [org.deepsymmetry.beatlink.data.MetadataFinder:351] - Processing device found, number:17, name:"rekordbox".
2020-Sep-21 20:41:37 INFO [org.deepsymmetry.beatlink.data.MetadataFinder:354] - Recording rekordbox collection mount.
2020-Sep-21 20:41:37 INFO [org.deepsymmetry.beatlink.data.MetadataFinder:947] - Reporting media mounted in SlotReference[player:17, slot:COLLECTION]
2020-Sep-21 20:41:37 INFO [org.deepsymmetry.beatlink.data.CrateDigger:91] - CrateDigger starting because MetadataFinder[running:true, passive:false, loadedTracks:{}, mountedMediaSlots:[SlotReference[player:17, slot:COLLECTION]], mountedMediaDetails:[], metadataCacheFiles:{}] has.
2020-Sep-21 20:41:37 INFO [org.deepsymmetry.beatlink.data.MetadataFinder:351] - Processing device found, number:1, name:"XDJ-XZ".
2020-Sep-21 20:41:37 INFO [org.deepsymmetry.beatlink.data.MetadataFinder:351] - Processing device found, number:33, name:"XDJ-XZ".
2020-Sep-21 20:41:37 INFO [org.deepsymmetry.beatlink.data.MetadataFinder:351] - Processing device found, number:3, name:"DJS-1000".
2020-Sep-21 20:41:37 WARN [org.deepsymmetry.beatlink.Util:283] - Do not know any Pro DJ Link packets received on port 50002 with type 0x10.
2020-Sep-21 20:41:37 WARN [org.deepsymmetry.beatlink.VirtualCdj:397] - Ignoring unrecognized packet sent to update port.
2020-Sep-21 20:41:37 INFO [beat-carabiner.core:261] - Realigning to beat 11 by 0.3260290000000001
2020-Sep-21 20:41:37 INFO [beat-carabiner.core:261] - Realigning to beat 13 by 0.3328939999999996
2020-Sep-21 20:41:38 INFO [beat-carabiner.core:261] - Realigning to beat 14 by 0.9889690000000009
2020-Sep-21 20:41:38 INFO [org.deepsymmetry.beatlink.dbserver.ConnectionManager:308] - Player 3 doesn't answer rekordbox port queries, connection refused, not yet ready?
2020-Sep-21 20:41:40 INFO [org.deepsymmetry.beatlink.dbserver.ConnectionManager:308] - Player 3 doesn't answer rekordbox port queries, connection refused, not yet ready?
2020-Sep-21 20:41:43 INFO [org.deepsymmetry.beatlink.dbserver.ConnectionManager:308] - Player 3 doesn't answer rekordbox port queries, connection refused, not yet ready?
2020-Sep-21 20:41:43 INFO [org.deepsymmetry.beatlink.dbserver.ConnectionManager:323] - Player 3 never responded with a valid rekordbox dbserver port. Won't attempt to request metadata.
2020-Sep-21 20:41:45 INFO [beat-carabiner.core:261] - Realigning to beat 30 by 0.9998220000000018
supersport05
@supersport05
Hi @brunchboy I'd like to drop what I'm working on here, i'm sure someone can knock me loose on this...i'm just a little stumped how to code what i'm thinking. I'm sure it's relatively simple....How can I share my code?
I'll just drop my changes in here....for reference i've included the example code and everything i have after it...
<!--
This is an example of how you can explicitly pull out information for specific players,
but generally you will want to use the loop approach below to get all players found on
the network.
    <p>
      Player 1: {{players.1.track.title}}{{players.1.track.artist}}.
      <img src="artwork/1?icons=true" width="80" height="80">
    </p>
    <p>
      Player 2: {{players.2.track.title}}{{players.2.track.artist}}.
      <img src="artwork/2?icons=true" width="80" height="80">
    </p>
-->



    {% for number player in players|sort %}
      <p>

<!--          if (players{{number}}.is-tempo-master == true) {   -->


          <img id="art-{{number}}" src="artwork/{{number}}?icons=true" width="80" height="80" align="left">
          <script>animateImage('art-{{number}}', 1000);</script>
          <span id="title-{{number}}" style="font-size:30px" style="font-family:Titillium Web">{{master.track.title}}</span>
          <br>  
          <span id="artist-{{number}}" style="font-size:20px" style="font-family:Titillium Web">{{master.track.artist}}.</span>
          <br><br>

<!--          }-->


      </p>    
    {% endfor %}
  </body>
</html>
supersport05
@supersport05

I've left the part i'm struggling with in here commented out. I have a statement

if (players{{number}}.is-tempo-master == true) {

thinking that i want this thing to loop through players (i only have 2, but hey, why not loop through all) and determine if it's the master, then i want it to show the coverart and track title, artist name. and when i switch to the next track, it would update all three without me having to rerun it.

I realize i've written this wrong, but i left it in to give direction of what i'm attempting to do. the formatting and HTML stuff I consider good-to-go

I have never been successful in ONLY showing the master track and not showing the non-master tracks information. that's as close as I can get so far. I also attempted to use something like this:

{% if players{{number}}.is-temp-master == true %}

But it flat out ignores this...just shows everything still

James Elliott
@brunchboy
Thanks for sharing your attempt! I’d be happy to try helping sort it out. First a little important background to help you understand what is going on and how to think about the code, and then I will see if I can get it running with my XDJ using your desired layout and result.
There are multiple stages going on, and you need to think about them separately. The first stage is when the browser (or OBS plugin) makes the request for the page to the server embedded in BLT. At that point the template is rendered, and the Selmer expressions are evaluated. So if we could figure out the right way to get your {% if … %} Selmer expresson written, it could control which player information got written to the page.
But the problem is, that happens only one time! So once the page is delivered to the browser (or OBS plugin), it’s done. If later a different player becomes the tempo master, that doesn’t matter. The page is rendered, the browser has it, these templates don’t matter any more. They didn’t get sent to the browser, they only executed inside BLT, and the results got sent to the browser, and the results don’t change over time. You would need to reload the page to get different results.
That is why in my example, after setting up the page, I have a bunch of JavaScript code to update the information on the page when it changes. That code is sent to the browser, and runs in the browser (or OBS plugin), and it makes requests back to BLT for new information many times per second, and updates the page appropriately.
James Elliott
@brunchboy
So trying to determine which player is the master, and render only that player, using Selmer template code is not going to work for you even if you figure out the syntax. It’s just not an approach that can work for something that is going to change over time, unless you configure the whole page to be refreshed periodically (so the browser/plugin will reload the whole thing), and as I mentioned earlier, that leads to too much flicker.
Also, the syntax you had is wrong. I think the right syntax might be {% if players.number.is-tempo-master %} but it’s not worth nailing down because we don’t want to do it that way.
James Elliott
@brunchboy
If what you want to do is render information about whichever player happens to be tempo master, you don’t need to use the players variable at all! I created a master variable for that purpose, see Table 1 in the Variables section of the User Guide: https://blt-guide.deepsymmetry.org/beat-link-trigger/obsoverlay#variables
So no loop, no worry about it getting out of date when the master player changes, just render a single set of information using master.track.title for example. And wait, I just noticed that you already figured that out @supersport05 so you just need to eliminate the number loop entirely.
I’ll take a crack at that here, and then make sure to properly integrate it into my JavaScript code that will update it after the page has already rendered.
James Elliott
@brunchboy
Ah, here’s one subtlety; since we don’t have a loop, we don’t have the loop counter number available any more for requesting the album art. But that is not a problem, because the master variable has as number property which reports the channel number of the current master player, so we can ask for its art using the URL "artwork/{{master.number}}".
Ok, yes, there are some changes and simplifications that need to be made to the JavaScript code, working on those now.
James Elliott
@brunchboy
I’m getting rid of all the code related to formatting playback timecode, and for parameterizing page elements by channel number, since you are only showing simple track information for a single player.
James Elliott
@brunchboy
Ok, @supersport05 this seems to be working: https://gist.github.com/brunchboy/223f99e39d832e0ca94c09eab3b04134
Does that Titillium Web font work for you? Is it one that’s installed on your computer? I would expect you’d need to add a URL for the browser and plugin to know where to download it from otherwise.
(And remember on that GitHub Gist page, when you are done reading my simplified version of the OBS Overlay template, hit the Raw button if you want to save it using your web browser. Or, the Gist interface has a Download ZIP button above that which you can use as well.)
James Elliott
@brunchboy
I spoke a wee bit too soon. This is mostly working, but the code to reload the artwork is not, that is getting stuck showing the artwork of whatever player was the master when the page first loaded.
The way I originally wrote it assumed it was going to be tied to a single player. Looking into writing a different version now.
I’ll have to do something like I did in the updateState function, to fetch the current JSON information from BLT so we can find the current tempo master, and load the appropriate image there. Working on it…
James Elliott
@brunchboy
Ok, I have updated the gist linked above. The current (second) revision gets the artwork right as well. Please let me know if it works for you!
I tried downloading the ZIP using the Gist button for that and pointing BLT at the resulting folder as its OBS Overlay template folder, and it’s working for me.
And @PimW_gitlab thanks for sharing the logs, you are right there don’t seem to be any significant differences between them that give me any hints as to what might be going wrong. I am also baffled because there are precious few differences between the 0.1.0 release and the 0.1.1 snapshot. But one thing I did notice is that you are not running the 0.1.0 release, you are still running an old 0.1.0 snapshot, is there a reason for that?
I still hope to find some back burner time to see if I can reproduce this problem here, which is the only hope for me being able to dig into it.
James Elliott
@brunchboy
(And finally, before I head to bed tonight, if you want to send more code for me to look at in the future @supersport05 — or anyone, really — the best way to do that is using a GitHub Gist like I did above. It’s easier to read and download there, doesn’t clutter the channel, and can track revisions; if you look at the Revisions tab on the one I linked above, you can see the changes I made between the two versions to get the artwork updating properly as a nice color-coded context diff thanks to GitHub.)
densma1
@densma1
@brunchboy
i'm interested in this overlay. how do you use this overlay.html with BLT? how is it able to connect to overlay server?
supersport05
@supersport05
@brunchboy Works like a charm! thanks so much for the help. . I knew I was close...but also knew I needed help. Thank you for the help....and all the work before I ever got here :D
James Elliott
@brunchboy
Yes, you were very much on the right track @supersport05, there are just so many layers to worry about and integrate properly. Thanks for letting me know! I think I will start a Wiki page with alternate overlay examples, may I include yours?
And @densma1 the OBS overlay server is embedded inside current preview/snapshot builds of Beat Link Trigger, it has not yet been part of any frozen release. You can read about it in the development branch of the user guide: https://blt-guide.deepsymmetry.org/beat-link-trigger/obsoverlay
James Elliott
@brunchboy
And looking over that today, I see I need to revise it to emphasize the JSON/JavaScript approach, because since I first wrote it we have learned that trying to refresh the whole page results in too much flicker in the OBS browser plugin, so the only way to get good looking results is to use JavaScript and the JSON URL to update the overlay, like my current template does.
densma1
@densma1
@brunchboy yes i have been running that version. not sure how to replace default template with this overlay. I will look at the guide if its has directions
James Elliott
@brunchboy
It does, and there were discussions a bit back on this channel.
Please always look at the guide, I spend many hours carefully writing it. :smile:
densma1
@densma1
sounds good
supersport05
@supersport05

Yes, you were very much on the right track @supersport05, there are just so many layers to worry about and integrate properly. Thanks for letting me know! I think I will start a Wiki page with alternate overlay examples, may I include yours?

@brunchboy Sure if you like, feel free. I reckon it'll likely be a rather commonly requested layout tbh thanks again :D

densma1
@densma1
got it working . thx
James Elliott
@brunchboy
Yay!
That’s great! :tada:
James Elliott
@brunchboy
All right, I have tweaked the user guide to give more emphasis to the JSON/JavaScript approach to updating the OBS overlay content, since that is what turns out to look best.
I also added a wiki page to collect other templates, starting with the one we came up with today.
David Ng
@nudge
Good news everyone! I've started reverse engineering the link cue and link preview protocols between CDJ-3000 and supported mixers. Audio seems to be sent over UDP 50004 in uncompressed format: signed 16-bit PCM, little endian, 48000Hz, stereo
James Elliott
@brunchboy
That’s awesome, @nudge! I have no idea if or when I will be able to get my hands on any 3000s. Can you capture all the details and update the protocol analysis document to reflect them?
James Elliott
@brunchboy
Sorry it took a while to respond, I was taking a break from my computers.
David Ng
@nudge
will do, i'll create some PRs when its a bit more complete. There's a bit of device handoff and timing/synchronization details it iron out. Will do some prototyping and see where it ends up!
James Elliott
@brunchboy
Excellent, thank you so much!