Visualizzazione post con etichetta Midi. Mostra tutti i post
Visualizzazione post con etichetta Midi. Mostra tutti i post

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


mercoledì 5 ottobre 2016

AKAI LPK25 con Linux

Il blog rinasce in una nuova veste abbondando l'elettronica ed interessandosi di tutto un po' con piu' attenzione alla musica

In questo post viene descritto come interfacciare una LPK25, un midi controller a basso costo con una estensione di due ottave (l'altezza e' modificabile con un Octave +/-)


Il dispositivo su Ubuntu viene immediatamente riconosciuto come dispositivo MIDI over USB

Per poterci suonare, essendo una tastiera priva di suoni, si deve utilizzare un sintetizzatore software (fluidsynth con interfaccia grafica QSynth) e da un programma che connette la tastiera al sintetizzatore (in questo caso vmpk). Tutti questi programmi si possono installare mediante apt-get.

Prima di iniziare a suonare ci sono un po' di impostazioni da fare. Si parte da QSynth entrando in setup (pulsante in basso a sinistra) abilitando l'input Midi sul primo tab


Nel tab Audio si setta il driver Alsa


e poi dove e' inserito il file dei suoni nel tab Soundfonts

Si avvia QSynth e ci si sposta su Virtual MIDI Piano Keyboard e dal menu Edit/Connections e si seleziona come Input MIDI la LPK25



















giovedì 20 agosto 2015

Midi over Usb con Arduino

Arduino non puo' diventare un vero e proprio dispositivo Midi a meno che non si faccia una modifica al firmware (nel qual caso poi non diventi poi piu' programmabile) ma puo' comunque inviare stringhe MIDI via seriale che sono poi convertite, via software, da programmi Serial->Midi.

Questa prova e' stata fatta su Mac ma in linea di principio e' ripetibile anche su Windows (con altri software) ma io non ci sono riuscito





(da importare la libreria Arduino Midi Library, codice modificato dal primo esempio)
-------------------------------------------------
#include <MIDI.h>

MIDI_CREATE_DEFAULT_INSTANCE();

#define LED 13      

void setup()
{
    pinMode(LED, OUTPUT);
    MIDI.begin(1);         
    Serial.begin(115200);
}

void loop()
{
        digitalWrite(LED,HIGH);
        MIDI.sendNoteOn(42,127,1);  // Send a Note (pitch 42, velo 127 on channel 1)
        delay(1000);        // Wait for a second
        MIDI.sendNoteOff(42,0,1);   // Stop the note
        digitalWrite(LED,LOW);
}
-------------------------------------------------

Poi si va in Applicazioni/Utility e si carica Configurazioni Midi Audio, Mostra Studio Midi Driver IAC e si attiva il driver

Per la conversione del segnale seriale derivante da Arduino in segnale Midi si puo' usare Hairless-MidiSerial. Il funzionamento e' quanto mai semplice. A sinistra si imposta la porta seriale dell'Arduino e sulla destra gli input ed output Midi (nel mio caso era solo un input in quanto Arduino spedisce solo dati)
Come destinatario del segnale Midi, non avendo altro a disposizione, ho provato Virtual Midi Piano Keyboard
Tramite questa catena e' possibile far suonare ad Arduino il pianoforte Midi




E' ovviamente noioso ma basta inserire un po' di pulsanti e riprogrammare Arduino per rendere tutto piu' interattivo

Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...