lebaston100 / MIDItoOBS

(Pre obs-ws 5!!) A python script to use one or multiple midi input device(s) to control OBS-Studio functions without wasting keyboard hotkeys (including some sort of macro support) from anywhere in the network. "Waiting for a nativ implementation since 2017."
https://github.com/lebaston100/MIDItoOBS
MIT License
188 stars 36 forks source link

GUI interface #15

Open cpyarger opened 4 years ago

cpyarger commented 4 years ago

This seems to be a great plugin, But configuration would be much easier with a GUI,

lebaston100 commented 4 years ago

I know, i've been doing some research on how i could accomplish this, but i'm not a frontend dev, so building a python gui would have to be done by someone else. But i'm thinking about/planning something that can do the same thing (even more) and has a GUI. But i have no ETA on that.

cpyarger commented 4 years ago

I am going to take a look into what needs to be done for this. It has been a long time since I have done any python programming though, so it will probably be slow going.

lebaston100 commented 4 years ago

I'm not expecting anything from anyone, but if someone volunteers for it i happily take the offer.

cpyarger commented 4 years ago

https://github.com/cpyarger/Midi2OBS-Configurator is what I have so far. I am having some issues.

cpyarger commented 4 years ago

if you are able to look over it and make any changes you think will help that would be much appreciated. Currently, I have it set up so that it will detect midi values, Those get tossed into a table. only once, and are filtered by note or CC when listening (i was unable to figure out how to query for both existing notes and CCs without the filtering based on the dropdown. I do apologize for the lack of commenting in the code.

lebaston100 commented 4 years ago

It's starting to look like something. That's the point where i have zero knowledge. Have never used qt before. Also no apologizing for not commenting, i'm guilty here too. So somethings i see "missing" that MIDItoOBS can do is having multiple devices and macro support (or basically binding multiple actions onto a single midi input action). I guess you would have to write out some basic description on how everything should look and feel. Maybe having the list in the main windows but then having a popup window for editing with only the options that are needed for the action. A way to refresh all the lists that the scrpt pulls from obs(manual or automatic). These are just some ideas i got while looking at it.

cpyarger commented 4 years ago

Currently, I am leaving Multi-Device support hanging until I finish getting the interface done and have it working. with a single device. I decided to use the MIDO callback function for handling messages as they come in, unfortunately, that breaks multi-device support as the messages don't contain a device ID.

Macro support will be worked on after Multi-Device is working.

With my current iteration of the code, you can see where I am starting to head towards the software. I plan to integrate both halves of MidiToOBS into the GUI application. If a command does not exist in the application, it will be added. If it is not fully setup, for example, a fader connected to SetVolume without having a volume chosen, any incoming MIDI messages are ignored. If that line is fully setup you will see it controlling OBS.

Before multi-device is working, I plan to add a MIDI feedback option. I want to see my faders move when I adjust the volume in OBS, and want to see my buttons showing which scene is actually active.

I have moved away from making raw WebSocket calls and have started using https://github.com/Elektordi/obs-websocket-py Most of the work already exists there, and it already has the ability for me to register callback hooks for me to get started on feedback,

lebaston100 commented 4 years ago

Awesome. So Multi-device functionality is basically provided by creating a new instance of the DeviceHandler class for every controller and then binding it to the same callback, but handing over the device id on creation. But only the main.py does it like that, for the setup it's still the other way.

If you want you can make this a totally independent application that has nothing to do with this one. That way you are not limited by my version.

I might have mentioned this somewhere already but i would have device feedback implemented if i had the hardware to test with.

I on my part started building a new "Version" of MIDItoOBS from scratch in nodejs that can intregrate in a already existing gui platform. Keeping it vague because i don't have a timeframe for it and don't want anybody waiting for it. It won't make the old version obsolet but will rather be another system for more advanced users. For that i'm also using a wrapper.