Ajuda per als baixos del diatònic: diatonicbaixos

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

Introducció

La Maria està aprenent el diatònic. Es tracta d'un programa per ajudar a posar els baixos de l'acordió diatònic G/C, sistema Marimon. El programa consta del binari pròpiament dit (diatonibaixos), i del script que arrenca el binari (diatonicbaixos.sh) i que s'encarrega de què funcioni tota la sessió (jack2, fluidsynth, change_tempo_smf, jack-smf-player, klick, i el que calgui).

Tot i que el programa està pensat per a diatònic amb 4 baixos, es podria reprogramar per a d'altres sistemes, i fins i tot es podria fer un programa similar per a la mà dreta.

El programa és un client de JACK (sistemes GNU/Linux), i és un Time Master, de manera que el programa s'encarrega de controlar el transport, i que els altres clients connectats, com el jack-smf-player i el klick segueixen el Time Master.

Així doncs, per tal de què el programa sigui un play-along, necessitaré tenir el fitxer midi de la cançó, i tocar-la mentre es van mostrant les posicions dels botons (en verd significa tancar; en vermell significa obrir). També hi ha botons en cian, que mostren les posicions anticipades dels futurs botons que s'hauran de tocar.

No cal dir que per fer sonar la cançó es necessita un software de síntesi, en aquest cas fluidsynth, però es podria haver utilitzat qualsevol altre software de síntesi.

Els fitxers midi que es faran sonar s'hauran de sequenciar. En aquest cas s'utilitza jsequencer2lily: Seqüenciador: jsequencer2lily

Desenvolupament

carpeta ~/projectes/diatonicbaixos

Es tracta d'un software play-along: mentre sona la cançó es mostra la posició dels botons que s'han d'apretar per a la mà esquerra. Un dels requisits importants és que es pugui definir el tempo (més ràpid o més lent).

La manera d'invocar el programa és:

diatonicbaixos [-d] [-t tempo] midifile

De totes maneres si vull escoltar la cançó per sobre només té sentit invocar el script diatonicbaixos.sh.

El programa també detecta quan s'han de tocar dos baixos alhora, veure el fitxer de configuració. El límit de moment està en dos baixos a l'hora.

L'opció -d (display) significa que visualitzo amb antelació el següent baix que s'haurà de tocar, de color blau cel.

El programa mostra el compàs i el temps de compàs. Es pot integrar fàcilment amb el metrònom klick.

fitxer de configuració

El fitxer de configuració té el mateix nom que el fitxer midi, només que amb extensió .txt. Per exemple, si vull fer sonar la cançó midi/modista_balaguer.midi, el fitxer de configuració serà midi/modista_balaguer.txt. És a dir, han d'estar en la mateixa carpeta.

fitxer modista_balaguer.txt:

Time Signature: 3/4
Tempo: 80
Number of bars: 16
#1
1 g1 t
2 g2 t
2.5 r
3 g2 t
3.5 r
#2
4 d1 o
5 d2 o
5.5 r
6 d2 o
6.5 r
#3
7 a1 o
8 d2 o
8.5 r
9 d2 o
9.5 r
...

Les tres primeres línies estan definides per a la capçalera (ritme, tempo i número de compassos). L'opció -t no és obligatòria. Si no poso l'opció -t, s'agafa el valor del fitxer de configuració (i jack-smf-player també agafarà el valor intern del SMF). Per tant, si vull que soni bé, aquests dos valors hauran d'estar en concordància. Per evitar problemes, es recomana utilitzar l'opció -t, i així no tindré problemes de sincronització.

Després de la capçalera ja bé la seqüència dels baixos, que s'explica ella sola. Com es veu, es pot definir amb decimals el número del temps, per definir les corxees o semicorxees. g1 significa el baix, i g2 significa l'acord. t significa tancar, i o significa obrir. per tant, g1 t i g1 o es correspondran a dues tecles diferents, que està codificat en el codi. També es defineixen els silencis, i d'aquesta manera podem fer èmfasi en els baixos que són més llargs i d'altres que són més curts.

Si es vol tocar dos baixos alhora n'hi ha prou en definir-los amb el mateix temps. Per ex:

7 a1 o
7 d2 o

que sonaran al mateix temps en el temps 7.

ncurses

Per programar el component gràfic s'havia pensat en la llibreria SDL. Finalment s'ha utiltizat la llibreria ncurses, que també permet colors i compleix perfectament els objectius.

Com que és la primera vegada que programava amb ncurses, he seguit el tutorial:

jack-smf-player. projecte change_tempo_smf

jack-smf-player forma part de jack-smf-utils:

És el programa que s'utilitza per fer playback del fitxer midi. Amb l'opció -n faig que sigui un esclau del transport del JACK

/usr/local/bin/jack-smf-player -q -n -a fluidsynth:midi $ARGFILE &

El tempo amb què es toca un SMF està definit dins del fitxer. Si vull canviar el tempo, hauré de modificar els bytes necessaris dins el fitxer binari que és el SMF. Està explicat a:

change_tempo_smf és una petita utiltiat que només té aquest objectiu, i que s'integra en el script diatonicbaixos.sh.

script diatonicbaixos.sh

invocació:

$ ./diatonicbaixos.sh midi/modista_balaguer.midi
$ ./diatonicbaixos.sh -t 60 midi/modista_balaguer.midi
$ ./diatonicbaixos.sh -m -t 60 -d midi/modista_balaguer.midi

El script que ho fa corre tot queda de la següent manera:

#!/bin/bash
# ./diatonicbaixos.sh midi/modista_balaguer.midi
# ./diatonicbaixos.sh -t 60 midi/modista_balaguer.midi
# ./diatonicbaixos.sh -m -t 60 -d midi/modista_balaguer.midi
# ./diatonicbaixos.sh -h

TEMP=`getopt -o hdmt: -n 'diatonicbaixos' -- "$@"`

if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi

# Note the quotes around `$TEMP': they are essential!
eval set -- "$TEMP"

clear
echo "Diatonic Baixos"
echo "(c) Joan Quintana Compte (joanillo)"
echo "Gener 2014"

ARG=
ARGTEMPO=
ARGFILE=
HELP=
KLICK=

while true; do
	case "$1" in
	-h ) 
		HELP="yes";
		ARG="$ARG -h "; shift;;
	-d )
		ARG="$ARG -d "; shift;;
	-m )
		KLICK="yes"; shift;;
	-t )
		ARG="$ARG -t $2"; ARGTEMPO="$2"; shift 2 ;;
	* ) break ;;
	esac
done

ARGFILE="$2"
ARG="$ARG $ARGFILE"
#echo $ARG

if [ "$HELP" == 'yes' ]; then
	echo "diatonicbaixos.sh. Bash script option:"
	echo "-h help"
	echo "-m: use klick metronome"
	echo "-t tempo"
	echo
	echo "Examples"
	echo "diatonicbaixos.sh midi/modista_balaguer.midi"
	echo "diatonicbaixos.sh -t 60 midi/modista_balaguer.midi"
	echo "diatonicbaixos.sh -m -t 60 -d midi/modista_balaguer.midi"
	echo "---------------"
	echo
fi

if [ "$ARGTEMPO" != '' ]; then
	./change_tempo_smf -q -t $ARGTEMPO $ARGFILE #change_tempo_smf retorna 1 si hi ha hagut un canvi de tempo
	#this way you can see that environment variable $? which receive the last 1 byte of return value of main()
	if [ $? -eq "1" ]; then
		#echo "Canvi tempo"
		NOU_TEMPO="1"
	fi
	sleep 1
fi

#echo $NOU_TEMPO

if [ -z `pidof -s jackd` ]; then
  /usr/bin/jackd -dalsa -dhw:0,0 -r44100 -p256 -n2 -Xseq & #targeta interna
  #/usr/bin/jackd -t 2000 -dalsa -dhw:3,0 -r44100 -p256 -n2 -Xseq & #targeta externa
  sleep 6
fi

if [ -z `pidof -s fluidsynth` ]; then
  #/usr/bin/fluidsynth -i -s -l -j -a jack -m jack -l -f fluidsynth.cfg /usr/share/sounds/sf2/Unison.sf2 &
  /usr/bin/fluidsynth -i -s -l -j -a jack -m jack -l /home/joan/projectes/soundfont_castagnari/castagnari.sf2 &
  sleep 4
fi

#arrenco el jack-smf-player, si no està arrencat
#si hi ha canvi de tempo, primer l'he de matar i tornar-lo a arrencar
if [ -z `pidof -s jack-smf-player` ]; then
	/usr/local/bin/jack-smf-player -q -n -a fluidsynth:midi $ARGFILE &
	sleep 2
elif [ ! -z $NOU_TEMPO ]; then
	killall jack-smf-player
	sleep 1
	/usr/local/bin/jack-smf-player -q -n -a fluidsynth:midi $ARGFILE &
	sleep 2	
fi

if [ "$KLICK" == 'yes' ]; then
	#arrenco el klick, si no està arrencat
	#si hi ha canvi de tempo, primer l'he de matar i tornar-lo a arrencar
	if [ -z `pidof -s klick` ]; then
		/usr/bin/klick -t -P -s 1 -e $ARGTEMPO &
		sleep 1
	elif [ ! -z $NOU_TEMPO ]; then
		killall -q klick
		sleep 1
		/usr/bin/klick -t -P -s 1 -e $ARGTEMPO &
		sleep 1	
	fi
else
	killall -q klick
fi

#echo $ARG
./diatonicbaixos $ARG

Veiem que jack-smf-player haurà d'arrencar si no estava arrencat, o si s'ha detectat un canvi de tempo.

Descàrrega / Download


creat per Joan Quintana Compte, gener 2014

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
Institut Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines