Pubblicato: martedì 27 giugno 2023
- di
Emiliano Grilli
categoria: Utility.
tags: | bash | utility | synthesizers | alsa | yamaha | sysex |
Questa utility bash può essere utilizzata su sitemi linux (io l'ho
testata solo sulla mia debian stable) per ricevere delle
patch dai sintetizzatori della serie
Reface della Yamaha.
Una patch, o preset è sostanzialmente una particolare configurazione
di tutti i parametri del sintetizzatore, risultando a tutti gli
effetti un "suono" che può essere salvato e successivamente richiamato.
La comunicazione con i sintetizzatori avviene mediante messaggi
system
exclusive o "sysex"; ad esempio nello script la
variabile DUMP_CMD contiene il comando per richiedere un dump
(ovvero una trasmissione dal synth al computer)
Dei quattro modelli Reface solo la DX (tributo alla sintesi FM e al
DX7, il più famoso synth FM Yamaha) ha la capacità di immagazzinare e
richiamare più di una patch nella sua memoria interna, che ne può
contenere 32 divise in 4 banchi da 8. Gli altri modelli sono:
- la CS, che emula un synth analogico
- la YC, che emula vari tipi di organo elettrico
- la CS, che emula piani elettrici e clavinet
Questa utility è in grado di salvare le patch anche da questi modelli,
ma naturalmente i controlli fisici come fader manopole etc... una
volta ripristinato un suono salvato in precedenza potrebbero non
rispecchiare i parametri attuali del synth.
L'unica dipendenza perché questo script possa funzionare è l'utility
amidi, comando standard di
ALSA che in debian è contenuto nel
pacchetto alsa-utils
#!/bin/bash
REFACEPORT=$(amidi -l | grep -i reface | cut -f 3 -d " ")
REFACEMODEL=$(amidi -l | grep -i reface | cut -f 6 -d " ")
if [ -z "$REFACEPORT" ]
then echo "Reface not found, exiting. " && exit
else echo "Reface $REFACEMODEL found on port: $REFACEPORT"
fi
echo "Insert the name of the preset to save:"
read PRESET_NAME
PRESET_NAME=$PRESET_NAME.syx
echo "saving your patch to: $PRESET_NAME"
case $REFACEMODEL in
CS)
DUMP_CMD='f0 43 20 7f 1c 03 0e 0f 00 f7'
;;
DX)
DUMP_CMD='f0 43 20 7f 1c 05 0e 0f 00 f7'
;;
YC)
DUMP_CMD='f0 43 20 7f 1c 06 0e 0f 00 f7'
;;
CP)
DUMP_CMD='f0 43 20 7f 1c 04 0e 0f 00 f7'
;;
*)
esac
# echo $DUMP_CMD && exit
DUMPREQUEST_COMMAND="amidi -p $REFACEPORT -S $DUMP_CMD"
RETRIEVE_COMMAND="amidi -p $REFACEPORT -r $PRESET_NAME"
$RETRIEVE_COMMAND &
$DUMPREQUEST_COMMAND
sleep 4
killall -9 amidi
kill $$