Yamaha Reface sysex utility
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 $$