venerdì 7 maggio 2021

Elgato controller clone

Per automatizzare Audacity mentre cerco di registrare la chitarra stavo pensando di costruirmi con Arduino una consolle di controllo tipo quello di Elgato quando mi e' venuta in mente una soluzione piu' semplice: utilizzare un controller midi per interagire con Audacity tramite xdotool , un software che simula l'interazione utente con una applicazione X e tramite la libreria Python https://pypi.org/project/python-rtmidi/



In estrema sintesi da rtmidi si riceve un codice del tasto midi premuto sul controller e con xdotool si invia la corrispondente sequenza di caratteri per generare un evento di Audacity

================================================================

import sys
import rtmidi
import threading
import os

def print_message(midi, port):
    if midi.isNoteOn():
        #print '%s: ON: ' % port, midi.getMidiNoteName(midi.getNoteNumber()), midi.getVelocity()
        print midi.getNoteNumber() 
        if (midi.getNoteNumber() == 60):
        print "Play/Stop"
        os.system("xdotool search --onlyvisible --class 'Audacity' windowfocus key 'space'")
        if (midi.getNoteNumber() == 61):
        print "Play/Stop Cursor"
        os.system("xdotool search --onlyvisible --class 'Audacity' windowfocus key 'x'")
        if (midi.getNoteNumber() == 62):
        print "Track start"
        os.system("xdotool search --onlyvisible --class 'Audacity' windowfocus key 'J'")
       
        if (midi.getNoteNumber() == 64):
        print "Record"
        os.system("xdotool search --onlyvisible --class 'Audacity' windowfocus key 'shift+R'")
        if (midi.getNoteNumber() == 65):
        print "Pause"
        os.system("xdotool search --onlyvisible --class 'Audacity' windowfocus key 'p'")
class Collector(threading.Thread):
    def __init__(self, device, port):
        threading.Thread.__init__(self)
        self.setDaemon(True)
        self.port = port
        self.portName = device.getPortName(port)
        self.device = device
        self.quit = False
    def run(self):
        self.device.openPort(self.port)
        self.device.ignoreTypes(True, False, True)
        while True:
            if self.quit:
                return
            msg = self.device.getMessage()
            if msg:
                print_message(msg, self.portName)

dev = rtmidi.RtMidiIn()
collectors = []
for i in range(dev.getPortCount()):
    device = rtmidi.RtMidiIn()
    print 'OPENING',dev.getPortName(i)
    collector = Collector(device, i)
    collector.start()
    collectors.append(collector)

print 'HIT ENTER TO EXIT'
sys.stdin.read(1)
for c in collectors:
    c.quit = True


Nessun commento:

Posta un commento

ESP32-2432S028R e LVGL

La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...