"Se ci sono due o più modi di fare una cosa,
e uno di questi modi può condurre a una catastrofe,
allora qualcuno la farà in quel modo.

(Edward Murphy)

Convertire da MIDI a WAV

Mar, 29/09/2009 - 00:00 -- arturu

Senza ombra di dubbio l'operazione più snervante per me è convertire file MIDI in audio e poi scriverli su un cd. Il problema non si pone quando è un solo file ma quando devo passare un'intera compilation su cd... Da poco ho trovato una soluzione quasi magica a questo problema. Allora come sistema operativo uso Kubuntu 7.10 e timidity++ come server midi. Tramite la shell il comando con cui si converte un file MIDI in formato WAV-RIFF, adatto per l'incisione di un CD, è il seguente:

timidity -Ow -s 44100 file_midi -o file_wav

successivamente tramite shell o un programma grafico si possono trasferire i file su un cd vuoto. In questo modo la conversione dei file midi deve essere fatta sempre ad uno ad uno, cosa molto tediosa, possiamo fare in modo che vengano convertiti tutti i file MIDI presenti in una determinata cartella e trasferiti su cd in modo automatizzato. Per risolvere questo problema si può utilizzare uno script adatto allo scopo. Di seguito uno script commentato in ogni parte.

#!/bin/sh
##
## midi2cd MIDI_FILE...
##
#
# Modificare questa variabile per indicare le coordinate del
# masterizzatore.
#
DEV="0,0,0"
#
# Se si tratta di un masterizzatore ATAPI che non è riconosciuto
# da Cdrdao, conviene assegnare la stringa "--driver generic-mmc".
#
CD_DRIVER=""
#
# I file MIDI vengono forniti come argomenti della riga di comando.
#
MIDI_LIST="$@"
#
# Collocazione dei file temporanei.
#
TEMPORARY=`tempfile`
rm -f $TEMPORARY
mkdir $TEMPORARY
TOC="$TEMPORARY/TOC"
#
# Variabile usata per numerare sequenzialmente le tracce.
#
N="0"
#
# File correnti.
#
MIDI=""
WAV=""
#
# Inizia il file TOC di Cdrdao.
#
echo CD_DA > $TOC
#
# Si convertono i file MIDI.
#
for MIDI in $MIDI_LIST
do
#
# Incrementa N.
#
N=$(($N+1))
#
# Definisce il nome da dare al file WAV: usa il numero sequenziale
# e gli aggiunge l'estensione.
#
WAV="$TEMPORARY/$N.wav"
#
# Converte il file MIDI.
#
timidity -Ow -s 44100 $MIDI -o $WAV
#
# Aggiunge le informazioni necessarie nel file TOC di Cdrdao.
#
echo // Track $N >> $TOC
echo TRACK AUDIO >> $TOC
echo NO PRE_EMPHASIS >> $TOC
echo TWO_CHANNEL_AUDIO >> $TOC
echo AUDIOFILE \"$WAV\" 0 >> $TOC
#
done
#
# Incide il CD.
#
cdrdao write \
--overburn \
-v 2 \
--buffers 128 \
--speed 4 \
--device $DEV \
$CD_DRIVER \
$TOC

lo script seguente si potrebbe chiamare midi2cd ed eseguendolo in una qualsiasi cartella (es: midi2cd *.mid) converterà in automatico i file midi in audio e li scriverà su cd. Nell'utilizzare questo script bisogna considerare alcuni punti:

  • i file midi verranno processati in ordine alfabetico;
  • la qualità dei file audio che si ottengono dipende molto dalle librerie di suoni che si utilizzano, quindi sarebbe opportuno, se si desidera una qualità audio superiore utilizzare librerie adatte e non quelle di default (molto leggere);
  • il totale di minuti da convertire, bisogna rispettare le capacità di un cd;
  • lo script deve avere i permessi necessari per essere eseguito, dipende da sistema a sistema, ad es su kubuntu funziona da utente normale.

Volendo si possono apportare delle migliorie, sarebbe utile che lo script riconosca in automatico il materizzatore.

Ciao, alla prossima...