4db7165797
- Restructured project into /app, /server, /client with run.py entry point - WSServer (QWebSocketServer) with log_signal, start/stop, client tracking - HTTP server serves /client on port 8080 - Vanilla JS client: faders, toggles, transport, drag-to-arrange, lock/save layout - Start Tablet button + floating Tablet log window in app UI - Preset broadcast on load/switch, DAW state relay, hardware sync via widget_update - Widget colors synced from app palette, toggle state fixed (sends 0/127 correctly) - Layout saved per preset UUID back to presets.json Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
27 lines
764 B
Python
27 lines
764 B
Python
import rtmidi
|
|
from midi_receiver import midi_receiver
|
|
|
|
|
|
MIDI_CH = 0
|
|
TRANSPORT_MIDI_CH = 0
|
|
|
|
midi_out = rtmidi.MidiOut()
|
|
transport_midi_out = rtmidi.MidiOut()
|
|
|
|
available_ports = midi_out.get_ports()
|
|
print("Available MIDI ports:", available_ports)
|
|
|
|
|
|
def send_cc(cc_number, value, channel=None):
|
|
ch = (channel - 1) if channel is not None else MIDI_CH
|
|
msg = [0xB0 | ch, cc_number, value]
|
|
if midi_out.is_port_open():
|
|
midi_out.send_message(msg)
|
|
midi_receiver.midi_out_signal.emit(msg)
|
|
|
|
|
|
def send_transport_cc(cc_number, value):
|
|
msg = [0xB0 | TRANSPORT_MIDI_CH, cc_number, value]
|
|
if transport_midi_out.is_port_open():
|
|
transport_midi_out.send_message(msg)
|
|
midi_receiver.midi_out_signal.emit(msg) |