Twitching into the void

(6/21/2020)

I began to stream my 3D graphics of live online chess games . I am hoping to have a live stream with live music generated from the game positions, live commentary from a strong human, with my visuals as a backdrop. I started working with Scot and Zura on this, and we ran some test sessions over Jitsi. I was able to composite in OBS on my desktop, running my 3D visuals from my laptop.

One big concern is latency. Jitsi and other chat apps seem to be pretty good there, but lacking in fidelity. Scot and I eventually found that CCRMA's jacktrip provided great quality sound, no immediately noticable latency. Running jack on a mac can be a challenge, though.

Another issue concerned the use of OSC and OSCGroups to communicate chess data, where multiple clients behind the same router proved problematic. After talking with Tim Perkis about it, he suggested I look into NATS. I was taken with NATS' publish/subscribe paradigm, and simplicity. All communications are mediated by a NATS server, which i run in the cloud, so everyone has lousy latency of at least 1/10 sec. Since it is chess, and I am shooting at games at FIDE time control (40/90,sd30+30)

 There is a single time control for all major FIDE events: 
 90 minutes for the first 40 moves followed by 30 minutes 
 for the rest of the game with 
 an addition of 30 seconds per move starting from move one.
 --  https://handbook.fide.com/chapter/C07

I use this to justify a ruling of "good enough, and pretty good at that" on NATS. I won't go over it here, but it made me rethink how to structure the software I was working on. I have one big python app that does everything, but it can be broken up in to independent parts. I had good luck interfacing Stockfish with the NATS asyncio Python client. Other modules planned include pgn playback, live pgn monitoring, 2D display, adaptive displays, OSC bridging, NATS object for Max/Pd, etc.

Retooling around NATS is an opportunity to rewrite almost everything, so I am looking at games engines for 2D and 3D display, and finding the learning curves steep if fascinating.

Most recently I was able to get MIDI I/O on the Windows box near my synthesizer, and have the moves from the live game triggering roughly the same algorithm I was using in my monolithic Python app ( based on : https://www.jonathanwstokes.com/blog/2011/02/14/chess-music ). With lots of reverb (Strymon BigSky clouds)! All my own music so no copyright issues.

So the last few days I have streamed on Twitch, I've been using "live" feeds from the TCEC Superfinal 18, Stockfish v. LeelaChessZero. Big excitement but no viewers! My own Emptysburg Address, SAD!