| 
 ![[Photo of the Author]](../../common/images/Guido-S.gif)  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
 ![[Illustration]](../../common/images/article259/miditux.gif) 
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]](../../common/images/article259/alsamixer.gif) 
 
    
	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]](../../common/images/article259/kmid_th.gif) 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.
    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