Lo speaker del PC: giochiamo con l'altoparlantino del computer.

Tutti i computer vengono forniti di un altoparlantino, ed eventualmente di una scheda sonora ``più seria''. Vediamo cosa possiamo fare del semplice altoparlantino se il computer non ha la fortuna di disporre di dispositivi di qualità migliore.

Nozioncine base.

Sia chiaro innanzitutto che sto parlando di pc intel: infatti con molta più probabilità le altre architetture vengono fornite di una scheda sonora, ma nel campo dei pc la scheda sonora è un optional e non ce n'è neanche un tipo solo. Questo articolo è più rivolto agli sfortunati utenti di Linux che non hanno una scheda sonora (me compreso).

Beh, chi non arde dal desiderio di sentire qualcosa dal proprio altoparlantino diverso dal solito bip in occasione di un tasto sbagliato? Esattamente per questo esiste un piccolo pacchettino da aggiungere al kernel per permettere al pc di ``parlare''. Devo premettere una cosa, però: gli altoparlanti dei pc non sono tutti uguali come prestazioni: ce ne sono alcuni belli possenti tipo una radiolina da stadio, mentre altri che non si distingue un eventuale suono diverso dal beep dalla ventola dell'alimentatore. Cosa fare? Provarci! Mal che vada si sono persi 20 minuti...

Ogni pc ha in dotazione un altoparlante, pilotato dalla piastra madre del computer con un'onda quadra. Mediante semplici istruzioni assembler si può comandare all'hardware dell'altoparlantino di mandar fuori un'onda quadra di frequenza definita. Questo permette a molti programmini di eseguire semplici melodie con pochissimo sforzo per il sistema. Ma allora per musica e parlato che si può fare? Semplice: pilotare con estrema precisione la generazione di queste onde quadre :-)

Niente paura, il codice c'è già! E così renderete il vostro sistema Linux capace di generare suoni ed utilizzare tutti i programmi musicali proprio come se aveste una Sound Blaster! Beh, la qualità sarà un po' inferiore, ovviamente.

Procurarsi il software.

Trovate un pacchetto .tgz presso ftp://ftp.informatik.hu-berlin.de/pub/os/linux/hu-sound/. Attualmente la versione è 1.1, e copre i kernel 2.0.28 e successivi e 2.1.14 e successivi. Il pacchetto è stato fatto più per gioco che altro, quindi difficilmente entrerà nel pacchetto ufficiale del kernel.

L'installazione è semplicissima. Scompattate il kernel in /usr/src/linux, e in /usr/src scompattate il pacchetto pcsndrv-1.1.tgz. In questo pacchetto ci sono alcune cose che finiranno nell'albero del kernel (i driver dell'altoparlante) e altre che finiranno a parte (per la configurazione durante il funzionamento del sistema). Bisogna però applicare una patch. Da /usr/src date il comando ``patch -p0 < linux/drivers/pcsnd/linux-X.X.XX.pcsnd.diff'' sostituendo a X.X.XX la patch per la corretta serie del kernel. A questo punto configurate il kernel con il supporto per il ``PC Speaker'' e buona compilazione.

< > Sound card support
<M> PC-speaker and DAC driver support
[ ] Disable automatic speed detection
[*] Enable 16bit stereo emulation support
(100) Left volume at startup [0-100]
(100) Right volume at startup [0-100]

(Anche uno screen-shot grafico...)

Dopo aver riavviato il nuovo kernel, servono due cose: i dispositivi corretti in /dev e compilare i programmi per configurare il dispositivo di uscita. Ci vuole poco: lanciate lo script linux/drivers/pcsnd/pcspinstall e per i dispositivi siete a posto. Il programma di configurazione si crea con cd /usr/src/pcsnd-kit/; make. Facile.

Nota: nella distribuzione Debian gcc non utilizza gli include del kernel, ma una sua copia, quindi pcsel non troverà sys/pcsp.h, che va copiato a mano dagli include del kernel a quelli di sistema oppure copiato in locale e aggiornato pcsel.c sostituendo la riga ``#include <sys/pcsp.h>'' con ``#include "pcsp.h"''

Vediamo se va: caricate il modulo pcsnd.o (se avete compilato il supporto come modulo: io ho fatto così per comodità) e lanciate dalla directory pcsnd-kit il comando: ./vplay enterpri.raw. Se sentite la sigla di Star Trek, complimenti: operazione riuscita con successo!

Programmi supportati

Da qui in avanti tutti i programmi per ascoltare file audio tramite il dispositivo /dev/dsp, compresi moltissimi giochi con il supporto audio.

Lo stesso driver fornisce anche /dev/audio, equivalente alle Sparc. Quindi basta avere un file .au ed eseguire ``cat file /dev/audio'' per ascoltarlo tramite altoparlante.

Miglioriamo la qualità!

Come vi accorgerete presto, la qualità dell'altoparlantino non è elevata. Tuttavia lo stesso driver supporta un convertitore D/A su una porta parallela.

Ovvero è possibile ottenere i dati in digitale direttamente sulla porta della stampante, e tramite un semplicissimo circuitino collegare un amplificatore ed ascoltare l'audio con una qualità vicina a quella di una scheda sonora. Disponendo di due porte parallele e di due convertitori D/A è possibile ottenere anche un'uscita stereo!

I segnali sono disponibili nelle 8 uscite dati della porta parallela, quindi il sistema più semplice è costruire un convertitore D/A per ottenere un segnale analogico da mandare all'amplificatore. Nello stesso pacchetto dei driver ci sono anche alcune immagini di schemi elettrici di convertitori.

Ci sono tre schemi possibili (gli schemi li trovate tutti su un file .zip contenuto nel pacchetto):

* Convertitore D/A con rete a scala (solo resistenze)
* Convertitore D/A con chip D/A
* Interfaccia stereo su singola parallela

Il convertitore resistivo (qui un esempio) è il più semplice da realizzare. Consiste in una ventina di resistenze, quindi il costo è di alcune centinaia di lire. A far salire il costo, però, sono la presa D25, un coperchio, un metro di cavo e 2 RCA. Per far le cose in modo carino si può anche racchiudere le resistenze nella stessa spina per la porta parallela, e collegare l'uscita a due normali casse per computer multimediali. Il costo è molto limitato, ma serve anche un po' di esperienza di elettronica, per evitare di ``bruciare'' la porta parallela in caso di piccoli corto circuiti tra i piedini.

Potete evitare di collegare tutte le resistenze utilizzando un integrato convertitore D/A, però hanno un costo non trascurabile rispetto le resistenze, e alla fin fine la qualità non è molto migliore delle resistenze (l'orecchio umano non è un oscilloscopio). Oltretutto un convertitore D/A del genere richiede un'alimentazione a 5V, mentre la scheda con sole resistenze funziona perfettamente senza alimentazione.

Per avere un sistema stereo sono sufficienti due circuiti convertitori su due porte parallele, oppure si può usare un circuito lievemente più complesso ma che si collega ad un'unica porta parallela! Eccolo qui, anche se uno che conosce un po' di elettronica non ci metterà molto a trovare una versione economica.

Per attivare la scheda esterna esiste l'utility pcsel, compilata in precedenza. In poco tempo si impara anche ad usarla.

Note dolenti.

C'è una cosa da precisare: questo meccanismo (altoparlantino e porta parallela) prevedono l'uso della CPU in tempo reale. L'unica cosa che crea fastidio (oltre ad un carico macchina elevato) è la lettura/scrittura di periferiche IDE!

Questo perché il pilotaggio di queste periferiche richiede una temporizzazione critica, e l'accesso a periferiche IDE è impegnativo per la CPU. Ho notato comunque che i sistemi SCSI penalizzano molto poco la riproduzione dell'audio tramite altoparlantino.

Insomma, è giusto per gioco!

Esperienze personali.

Vorrei precisare che quanto ho scritto deriva da esperienza personale, iniziata circa 5 anni fa ancora in ambiente DOS per passatempo. Ho visto che molte macchine hanno speaker decenti, ma comunque non ci si deve aspettare molto, specie nei parlati.

Invece con un D/A sulla parallela la qualità cambia. Poi potete collegare l'uscita direttamente su un amplificatore e/o sugli altoparlanti amplificati per i PC multimediali. Il circuito con sole resistenze, comunque, non potrà mai pilotare direttamente un altoparlante. Se avete bisogno di una buona qualità, comunque, serve una scheda sonora seria.

La costruzione di un circuito del genere a casa propria non è difficile, ma devono essere controllate molto bene le saldature, per evitare corto circuiti tra le uscite della porta parallela. Se il circuito è fatto bene, comunque, non rovinerà la porta della stampante, trattandosi di resistenze abbastanza elevate e quindi assorbono pochissima corrente (sempre meno di una vera stampante).

Avevo fatto molto tempo fa (ancora per DOS) una scheda stereo per una singola parallela su basette per sperimentazioni, ma ho mai fatto un circuito stampato apposito.

Poi in ambiente Linux ho trovato un bel po' di software, tutto con sorgenti disponibili, capaci di suonare ogni tipo di file audio. Pure i file midi tramite una piccola schedina con pure resistenze. Il carico macchina, però, è un po' alticcio.

Se ti è piaciuto l'articolo , iscriviti al feed cliccando sull'immagine sottostante per tenerti sempre aggiornato sui nuovi contenuti del blog:

Commenti

Post popolari in questo blog

Rilasciano BlenderBot v3, un chatbot che utilizza il loro modello OPT e aprono la demo per testarlo

Componenti aggiuntivi di Google Workspace

Come rimuovere il virus che trasforma le cartelle in collegamenti nella tua pendrive.