Project Updates #2
Replies: 1 comment
-
I started working on the application a week and a half ago. I'm making slow progress as I'm entirely self-taught and learning a new framework takes time. At this moment I have the UDP server written and have successfully sent Ping and Pong packets as well as other data between the server and an ESP32. I have currently been testing different Midi libraries and so far have been able to rip and stream the midi packet commands from a midi file I just need to hook them to my UDP server. I still have to reconstruct the entire packet handling on the ESP32 client-side and design the entire GUI and media controller server-side. Basically everything... I've spent a good amount of time dissecting Moppy2 and some features are heavily "Inspired" by it mostly client-side but also some of the architecture Server side. For the UDP server, I am using Multicast similar to Moppy except all the packets are raw midi packets sent over a network with the exception of the Ping/Discover msg. I might try to use a sys exclusive msg for this purpose but for now, it's just a simple "Ping" sent as a UTF-8 encoded string for testing. When a ping command is sent to the multicast group each device responds with a Unicast "Pong" back to the Ip address of the Pings source address (The server). My current plan is to replace the pong with all the data relating to the current client device's state such as Name, ID, Instrument Type, Note Min/Max, Supported controls (Pitchbend, Aftertouch), and the configuration of the client distributors). The distributors are similar to Moppys Mappers where the distributor's route which channels are accepted by the client, how the channels are routed (Round robbin, Stright through), and each channels group of notes (ex. floppy drives 4-8). I might have a separate ping packet and device update packet though. When the server receives a pong from a new client the address and associated data are added to an internal database/array something. This list then will be displayed on the right-hand side of the GUI as connected devices. The user can then reconfigure the attributes and distributors of the devices in the GUI which will send a unicast packet to the device's associated IP with the updated parameters. The Esp32 saves the config to its filesystem. This creates a Multicast channel where the only data being sent is raw midi packets and all configuration of devices is done unicast directly to each client. (I have the Multicast and Unicast working together currently just none of the handling logic) Due to the fact that all the Multicast packets are raw midi, and each device handles its own distribution of notes it greatly simplifies the communication protocol. This basically separates the Server into two parts a Midi player and a Configuration tool and each can be used without the other. For example, a raspberry pi could easily be used as a server without an interface or configuration tool for a school display. Each device saves its own config so you set up the devices beforehand and then all the pi has to do is read a playlist of midi files with an existing library, get the midi data, and send it to a multicast group. I started with wifi coms but I plan to add serial and din as the project matures. If a user is using Din they can also add line midi controllers for live performance without the need of a server at all. The devices act as plain midi instruments with config still handled by the server application. Plus you can mix and match with some devices playing backing tracks while performers control other instruments. I still have a lot of work to do but I should have a bit of free time this summer where I can hopefully start ticking things off but as I said I'm learning as I'm going so it's taking a bit of time along with all my other projects and schooling going on. Also here is my youtube channel https://www.youtube.com/c/DJthefirst |
Beta Was this translation helpful? Give feedback.
-
👋 Welcome!
We’re using Discussions as a place to connect with other members of our community. We hope that you:
build together 💪.
To get started, comment below with an introduction of yourself and tell us about what you do with this community.
Beta Was this translation helpful? Give feedback.
All reactions