75 lines
2.2 KiB
Python
75 lines
2.2 KiB
Python
"""
|
|
Main module for MIDI-to-Hue application.
|
|
Ties together the config, MIDI controller, Hue controller, and mapper.
|
|
"""
|
|
import sys
|
|
import time
|
|
from config import ConfigManager
|
|
from hue_controller import HueController
|
|
from midi_controller import MidiController, DeviceMappingManager
|
|
from mapper import MidiToHueMapper
|
|
|
|
def main():
|
|
"""Main application entry point."""
|
|
# Load configuration
|
|
config_manager = ConfigManager()
|
|
|
|
# Initialize Hue controller
|
|
try:
|
|
hue_controller = HueController(
|
|
config_manager.get_bridge_ip(),
|
|
config_manager.get_update_interval_sec()
|
|
)
|
|
hue_controller.list_lights()
|
|
except Exception as e:
|
|
print(f"Failed to initialize Hue controller: {e}")
|
|
return 1
|
|
|
|
# Initialize MIDI controller
|
|
midi_controller = MidiController(config_manager.get_midi_device_index())
|
|
midi_controller.list_devices()
|
|
|
|
# Setup device mappings
|
|
device_mappings = {
|
|
"traktor_kontrol_s2": {
|
|
"note_on/1/3": 'left_deck_1',
|
|
"note_on/1/4": 'left_deck_2',
|
|
"note_on/1/5": 'left_deck_3',
|
|
"note_on/1/6": 'left_deck_4',
|
|
"note_on/1/7": 'left_deck_5',
|
|
"note_on/1/8": 'left_deck_6',
|
|
"note_on/1/9": 'left_deck_7',
|
|
"note_on/1/10": 'left_deck_8',
|
|
"control_change/5/1": 'left_volume_slider',
|
|
"control_change/6/1": 'right_volume_slider',
|
|
}
|
|
}
|
|
device_mapper = DeviceMappingManager(device_mappings)
|
|
device_mapper.set_active_device("traktor_kontrol_s2")
|
|
|
|
# Bind the device mapper to the MIDI controller
|
|
midi_controller.get_input_name = device_mapper.get_input_name
|
|
|
|
# Create MIDI-to-Hue mapper with configuration
|
|
mapper = MidiToHueMapper(
|
|
hue_controller,
|
|
midi_controller,
|
|
config_manager.get_mappings()
|
|
)
|
|
|
|
# Open MIDI port and process messages
|
|
if not midi_controller.open():
|
|
print("Failed to open MIDI port.")
|
|
return 1
|
|
|
|
try:
|
|
midi_controller.process_messages()
|
|
except KeyboardInterrupt:
|
|
print("\nExiting program...")
|
|
finally:
|
|
midi_controller.close()
|
|
|
|
return 0
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|