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>
Contenuto:
|
Midi con alsa
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.
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
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
Discussioni su quest'articolo
ogni articolo possiede una sua pagina di discussione, da questa pagina puoi inviare un commento o leggere quelli degli altri lettori:
2002-10-05, generated by lfparser version 2.29