Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- import sys
- import signal
- import jack
- # ============================================================
- # Einstellungen
- # ============================================================
- CLIENT_NAME = "PC-to-CC"
- CC_NUMBER = 20
- # Program Change -> CC value
- PC_MAPPING = {
- 0: 1,
- 1: 8,
- 2: 16,
- 3: 24,
- 4: 32,
- 5: 40,
- 6: 48,
- 7: 56,
- 8: 64,
- 9: 72,
- 10: 80,
- 11: 88,
- 12: 96,
- 13: 104,
- 14: 112,
- 15: 128,
- }
- # ============================================================
- # JACK Client erzeugen
- # ============================================================
- client = jack.Client(CLIENT_NAME)
- midi_in = client.midi_inports.register("MIDI-In")
- midi_out = client.midi_outports.register("MIDI-Out")
- # ============================================================
- # MIDI-Verarbeitung
- # ============================================================
- @client.set_process_callback
- def process(frames):
- # JACK MIDI-Ausgabepuffer für diesen Zyklus leeren
- midi_out.clear_buffer()
- # Eingehende MIDI-Events lesen
- for offset, data in midi_in.incoming_midi_events():
- data = bytes(data)
- # Program Change = 0xC0 ... 0xCF
- if len(data) >= 2 and (data[0] & 0xF0) == 0xC0:
- channel = data[0] & 0x0F
- program = data[1]
- # Ist dieser PC gemappt?
- if program not in PC_MAPPING:
- continue
- cc_value = PC_MAPPING[program]
- # Control Change = 0xB0 ... 0xBF
- cc_message = bytes([
- 0xB0 | channel,
- CC_NUMBER,
- cc_value
- ])
- midi_out.write_midi_event(
- offset,
- cc_message
- )
- # ============================================================
- # JACK Shutdown
- # ============================================================
- @client.set_shutdown_callback
- def shutdown(status, reason):
- print()
- print("JACK wurde beendet.")
- sys.exit(0)
- # ============================================================
- # Start
- # ============================================================
- print()
- print("================================")
- print(" PC-to-CC")
- print("================================")
- print()
- print()
- print("JACK Client:")
- print(" PC-to-CC")
- print()
- print("MIDI Ports:")
- print(" PC-to-CC:MIDI-In")
- print(" PC-to-CC:MIDI-Out")
- print()
- print("Ctrl+C zum Beenden.")
- print()
- try:
- client.activate()
- except jack.JackError as e:
- print("Fehler beim Starten von JACK:")
- print(e)
- sys.exit(1)
- try:
- signal.pause()
- except KeyboardInterrupt:
- print()
- print("Beende PC-to-CC ...")
- finally:
- client.deactivate()
- client.close()
Advertisement
Add Comment
Please, Sign In to add comment