venerdì 14 maggio 2021

Esp32 Page Tuner Elgato Clone

Visto il precedente post volevo fare qualcosa di ancora piu' semplice e meno costoso

Ho provato ad usare come controller una ESP32...la prima idea era quella di usare la libreria BleKeyboard con dei tasti fisici per i controlli ma alla fine avevo bisogno di un po' di saldature...volevo qualcosa di ancora piu' semplice...ho quindi usato i pin touch della Esp32 che necessitano solo del contatto di un dito per essere usati come interrutori






Nell'esempio i pin Touch4 e Touch5 sono associati al tasto spazio e Freccia a sinistra per abilitare la funzione Play e Rewind su Youtube e VLC

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

#include <BleKeyboard.h>
#define interval 1000

BleKeyboard bleKeyboard;
int threshold = 40;
bool touch4detected = false;
bool touch5detected = false;
long previousMills = 0; 
void gotTouch5(){ 
 if (millis()-previousMills > interval)
    {
    touch5detected = true;
    previousMills = millis();
    }
}
void gotTouch4(){ 
 if (millis()-previousMills > interval)
    {
    touch4detected = true;
    previousMills = millis();
    }
}
void setup() {
  bleKeyboard.begin();
  delay(1000);
  while (!bleKeyboard.isConnected()) {
    Serial.println("in attesa");
  }
  
  Serial.begin(115200);
  delay(1000);
  
  touchAttachInterrupt(T4, gotTouch4, threshold);
  touchAttachInterrupt(T5, gotTouch5, threshold);
}
void loop(){
if(touch4detected){
  touch4detected = false;
  Serial.println("Play"); 
  bleKeyboard.print(" ");
  }
if(touch5detected){
  touch5detected = false;
  Serial.println("Rewind"); 
  bleKeyboard.write(KEY_LEFT_ARROW );
  }
}

venerdì 7 maggio 2021

Soliflusso

Un esempio di soliflusso nei prati della Consuma. 



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


Eth0 su LuckFox Pico Mini A

 Le schede Luckfox Pico Mini A (a differenza delle sorelle maggiori) non hanno un connettore RJ45 e nonostante i pin da saldare non sembrano...