[LinuxFocus-icon]
LinuxFocus article number 259
http://linuxfocus.org

[Photo of the Author]
Guido Socher (homepage)

L'autore:

Guido ama Linux non solo per il divertimento che dà la ricerca delle grandi potenzialità di questo sistema, ma anche per le persone coinvolte nella sua progettazione.



Tradotto in Italiano da:
Alessandro Pellizzari <alex/at/neko.it>

Midi con alsa

[Illustration]

Premessa:

Il Midi é un formato di file che non contiene suoni digitali campionati, ma piuttosto una descrizione di come fare il suono. È simile a un foglio con delle note, in cui ogni nota è una rappresentazione simbolica di un tono. I file Midi sono quindi molto piccoli rispetto, per esempio, ai file wav.

Per convertire un file midi in suono avrete bisogno di un sintetizzatore midi. È un dispositivo hardware o software che usa un certo numero di campioni sonori di strumenti musicali (per esempio il piano) per generare i toni. Questi campioni sonori sono conosciuti come "soundfont".

Questo articolo spiega come usare Alsa (advanced linux sound architecture, architettura sonora avanzata per linux) come interfaccia sintetizzatore midi.

_________________ _________________ _________________

 

Introduzione

Solo pochi anni fa potevate trovare famose schede sonore come la "Gravis UltraSound" o la "SoundBlaster Gold" in qualsiasi negozio di computer. Entrambe le schede avevano un sintetizzatore midi hardware incorporato. Sfortunatamente non troverete più tali schede in commercio. E anche se le trovaste non riuscireste a installarle sul PC perché usano il bus ISA. I computer moderni usano bus PCI e spesso hanno un chip sonoro integrato nel chipset della scheda madre. Difficilmente uno qualsiasi di questi chipset supporta la sintesi midi. Se guardate la lista delle schede supportate da alsa probabilmente vi chiederete quale comprare. La scelta, sfortunatamente, è più facile di quanto sembri. Ad oggi c'è solo una scheda in commercio che supporta la sintesi midi: la Soundblaster live.

Se non possedete una scheda Soundblaster live potete emulare la sintesi midi via software, e vi spiegherò come fare.  

Cosa vi serve

Alsa è attualmente in una fase di transizione. La versione stabile 0.5 è ormai vecchia, e la 0.9 è ancora in sviluppo. Se volete usare applicazioni midi con alsa avrete bisogno della versione 0.5 perché per la 0.9 ci sono pochissime applicazioni e l'interfaccia tra le due versioni è incompatibile (nota: i souni PCM, i file wav e le applicazioni basate su suoni campionati non hanno problemi con la 0.9. Sto parlando del midi.)
I pacchetti per la 0.5 sono: Infomazioni su come compilare alsa si possono trovare nell'alsa howto (vedi riferimenti). Principalmente dovrete lanciare

tar jxvf alsa-driver-0.5.12a.tar.bz2
cd alsa-driver-0.5.12a
./configure --with-sequencer=yes --with-oss=yes --with-isapnp=no
make
make install
./snddevices

per i driver, e "./configure;make;make install" per il resto.

Dopo l'installazione potete caricare il modulo nel kernel. Per la soundblaster live (chip emu10k1) la procedura è:

modprobe snd-card-emu10k1
modprobe snd-synth-emu10k1
modprobe snd-seq-midi
modprobe snd-pcm-oss
modprobe snd-mixer-oss
modprobe snd-seq-oss

Per le altre schede semplicemente cambiate le prime due righe con il modulo per la vostra scheda (per esempio snd-card-via686a per le schede integrate basate su chipset via 686). Mandrake e Suse supportano alsa e potete procedere all'auto-rilevazione e alla configurazione con i tool della distribuzione (harddrake e yast2). Se non avete la minima idea di quale chip state usando lanciate "lspci -v" (il comando lspci fa parte di un pacchetto chiamato pciutils).

È giunta l'ora di provare se il suono funziona. Lanciate il programma
alsamixer
e premete "m" per togliere il mute al volume master (principale) e pcm, e poi usate i tasti cursore per cambiare il volume. Premete Esc per uscire da alsamixer quando avete finto.

[alsamixer]

Per salvare le impostazioni in /etc/asound.conf lanciate il comando

/usr/sbin/alsactl store

Ora lanciate

play flute.wav

e dovreste sentire qualche suono. Altrimenti andate a vedere /proc/asound e controllate /proc/asound/devices e /proc/asound/oss-devices. Dovrebbero esserci un "mixer" e un "digital audio" (i miei file).

Questo test serviva a controllare il funzionamento dell'emulazione oss pcm e del suono in generale. Più avanti spiegherò cosa aggiungere in /etc/modules.conf per fare tutto automaticamente, ma il prossimo passo è far funzionare il midi.

 

midi

Se avete una scheda con un sintetizzatore interno (sound blaster live) allora avete bisogno di caricare il "soundfont" (i campioni sonori) nel chip della scheda audio. Se non avete una scheda così potete installare timidity (vedete i riferimenti per l'url dove scaricarlo) e usarlo come sintetizzatore midi alsa. I programmi che si basano su alsa non noteranno la differenza.

Caricare il soundfont

Controllate di avere il programma sfxload (/bin/sfxload) installato. Altrimenti installatelo. Fa parte di un pacchetto chiamato awesfx (controllate nei CD della vostra distribuzione o http://mitglied.lycos.de/iwai/awedrv.html). Quindi copiate il file 8MBGMSFX.SF2 dal vostro CD dei driver della Soundblaster Live (/mnt/cdrom/AUDIO/Common/SFBANK/8MBGMSFX.SF2) in /etc/midi/8MBGMSFX.SF2. Per caricare il soundfont usate il comando:

/bin/sfxload /etc/midi/8MBGMSFX.SF2

Un buon programma di test è pmidi (vedi riferimenti). Lanciate
pmidi -l
Che dovrebbe produrre questo output:

Port Client name Port name
64:0 External MIDI 0 MIDI 0-0
65:0 Emu10k1 WaveTable Emu10k1 Port 0
65:1 Emu10k1 WaveTable Emu10k1 Port 1
65:2 Emu10k1 WaveTable Emu10k1 Port 2
65:3 Emu10k1 WaveTable Emu10k1 Port 3

Ora lanciate

pmidi -p 65:0 test.mid

e dovreste sentire il suono. Fico!

Usare Timidity come sintetizzatore software

Scaricate TiMidity++-2.11.3.tar.gz (vedete i riferimenti alla fine dell'articolo), scompattatelo (tar zxvf TiMidity++-2.11.3.tar.gz) e modificate il file common.makefile.in togliendo il commento alla linea CFLAGS del gcc per il pentium:

CFLAGS = -O3 -mpentium -march=pentium -fomit-frame-pointer \
-funroll-all-loops -malign-double -ffast-math

Ora potete configurare timidity con molte interfacce grafiche, ma principalmente siamo interessati all'opzione "--enable-alsaseq". In ogni caso non fa male abilitare alcune opzioni per la GUI:

./configure --enable-ncurses --enable-xaw --enable-spectrogram --enable-xaw=dynamic --enable-audio=oss,alsa --enable-alsaseq --prefix=/usr/local/timidity-2.11.3
make
make install

Questo installa timidity in /usr/local/timidity-2.11.3/bin per non sovrascrivere una versione già presente della vostra distribuzione. Installiamo timidity dai sorgenti perché non ho visto nessuna distribuzione dove l'interfaccia alsaseq fosse abilitata.
Con timidity avrete bisogno anche dei soundfonts. Questa volta si chiamano "instrument files". Un buon set di strumenti è abbastanza grande (circa 10 Mb). Il modo più veloce per procurarselo é di installare timidity++ dalla vostra distribuzione (CDrom) e copiare i file da lì (per esempio timidity++-2.11.3-1.i386.rpm per redhat 7.3). Per copiare i files da /usr/share/timidity/instruments a /usr/local/timidity-2.11.3/share/timidity/instruments lanciate:

cd /usr
find share/timidity -print | cpio -dump /usr/local/timidity-2.11.3

Ora siamo pronti per provare timidity come root:

/usr/local/timidity-2.11.3/bin/timidity -iA -B2,8 -Os -EFreverb=0
TiMidity starting in ALSA server mode
set SCHED_FIFO
Opening sequencer port: 128:0 128:1

then pmidi -l:

Port Client name Port name
128:0 Client-128 TiMidity port 0
128:1 Client-128 TiMidity port 1

Voila, abbiamo 2 porte con il sintetizzatore TiMidity.
Ora lanciate

pmidi -p 128:0 test.mid

e dovreste sentire il suono midi.  

/etc/modules.conf

Per il caricamento e la configurazione automatica dei moduli al boot aggiungete queste righe a /etc/modules.conf, se avete una soundblaster live:

alias char-major-116 snd
alias char-major-14 soundcore
alias snd-card-0 snd-card-emu10k1
alias sound-slot-0 snd-card-0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
alias midi snd-synth-emu10k1
below snd-seq-oss snd-synth-emu10k1
post-install snd-synth-emu10k1 /bin/sfxload /etc/midi/8MBGMSFX.SF2 ; alsactl restore
# togliete il commento se volete salvare il volume allo spegnimento:
#pre-remove snd-synth-emu10k1 alsactl store

Per una scheda diversa con un sintetizzatore midi, per esempio con un via686 interno:

alias char-major-116 snd
alias char-major-14 soundcore
alias snd-card-0 snd-card-via686a
alias sound-slot-0 snd-card-0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-12 snd-pcm-oss
# ripristina il mixer originale:
post-install snd-card-via686a alsactl restore
# togliete il commento per salvare il volume allo spegnimento:
#pre-remove snd-synth-emu10k1 alsactl store

Per lanciare automaticamente timidity all'avvio vi suggerisco di aggiungere la seguente riga a /etc/init.d/alsasound (questo script viene installato con i driver ma non è attivo. Per attivarlo usate il comando chkconfig) (NdT: chkconfig non è presente in tutte le distribuzioni. In generale è sufficiente creare un link da rcX.d con nome S**alsasound verso /etc/init.d/alsasound, dove X è il runlevel desiderato, e ** è la priorità di avvio)

echo "starting timidity"
timidiy=/usr/local/timidity-2.11.3/bin/timidity # non dimenticate il "&" nella prossima linea:
$timidity -iA -B2,8 -Os -EFreverb=0 > /dev/null &

 

Usare alsa e midi

[kmid] Prima avete usato pmidi per suonare i midi. KDE comprende un buon player di nome kmid (da non confondere con kmidi). Kmid può essere compilato con o senza supporto alsa. RedHat l'ha compilato per OSS. Mandrake e Suse usano Alsa. È possibile usare il binario di Mandrake con RedHat.
Questo articolo intende anche spiegare l'installazione di alsa necessaria per altri programmi che verranno trattati in futuri articoli. Per esempio avremo un articolo su Jazz. Jazz è un sequencer midi e un editor di file midi. Alla fine di questo articolo troverete riferimenti ad altre applicazioni.

Ci sono anche programmi come timidity (timidity -ig lancia l'interfaccia GTK) o kmidi (non kmid) che includono il sintetizzatore midi a livello software. In questi casi non avrete bisogno di supporto a livello kernel o emulato da timidity. In generale comunque è meglio avere una API midi comune piuttosto che reimplementare un sintetizzatore midi in ogni software.

Alsa sta subendo grossi cambiamenti. Come detto sopra, la versione 0.9 non funziona con la maggior parte delle applicazioni, mentre la versione 0.5 discussa in questo articolo ha alcuni problemi. L'emulazione del sequencer OSS (/dev/sequencer) non funziona (funziona solo con le vecchie schede soundblaster awe che non potete più comprare). Questo significa che solo i programmi midi basati su alsa funzioneranno. Speriamo che la situazione cambi con la versione 0.9. Questo articolo comunque rimane utile per il futuro quando la versione 0.9 avrà più supporto per il midi, in quanto solo alcune "piccole" cose come i nomi dei moduli verranno cambiate tra 0.5 e 0.9. Il principio di base rimarrà lo stesso.  

Riferimenti



Webpages maintained by the LinuxFocus Editor team
© Guido Socher
"some rights reserved" see linuxfocus.org/license/
http://www.LinuxFocus.org
Translation information:
en --> -- : Guido Socher (homepage)
en --> it: Alessandro Pellizzari <alex/at/neko.it>

2005-01-14, generated by lfparser_pdf version 2.51