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 $$