Differenze tra le versioni di "Cosa è A.L.S.A."

Da Gambas-it.org - Wikipedia.
 
(9 versioni intermedie di uno stesso utente non sono mostrate)
Riga 15: Riga 15:
 
===Struttura del sistema ALSA===
 
===Struttura del sistema ALSA===
  
Il sistema ALSA è composto da diversi sub-sistemi, ciascuno dei quali esercita una propria specifica funzione controllando un particolare tipo di flusso di dati per l'audio.
+
Il sistema ALSA è composto da diversi sub-sistemi ''seq'', ''rawmidi'', ''pcm'', etc, ciascuno dei quali esercita una propria specifica funzione controllando un particolare tipo di flusso di dati per l'audio.
Il sub-sistema che controlla il flusso degli eventi MIDI è denominato: '''seq''' . Pertanto, nel redigere il nostro programma Gambas di gestione dei dati MIDI, dovremo sempre considerare questo particolare ''sub-sistema'' "'''seq'''" , facente parte del più ampio e complesso dispositivo ALSA.
+
Alsa controlla in modo distinto i dati Midi mediante due sub-sistemi: '''Seq''' e '''RawMidi'''.
  
===I dispositivi in ALSA===
+
Il subsistema ''Seq'' controlla in particolare il flusso di dati in qualità di <SPAN Style="text-decoration:underline">''eventi''</span> MIDI strutturati secondo il protocollo di Alsa.
  
Il subsistema '''seq''' mette a disposizione dei programmi applicativi una serie di dispositivi (''device''), che possono essere specificati mediante un identificatore. Gli applicativi possono relazionarsi con quei dispositivi mediante le operazioni di lettura e di scrittura. Ogni dispositivo è formato da una catena di ''plugin'', i quali esercitano una specifica operazione nei confronti del flusso di dati del dispositivo. L'ultimo plugin, in particolare, si rapporta con il controller dell'hardware mediante le operazioni di lettura e scrittura.
+
Il sub-sistema ''RawMidi'', invece, gestisce i dati grezzi Midi strettamente conformi al protocollo Midi, come quelli provenienti da un dispositivo Midi esterno (ad esempio una tastiera).
  
=ALSA ed i suoi Client=
+
Pertanto, nel redigere il nostro programma Gambas di gestione dei dati MIDI dovremo far riferimento, in base alle nostre necessità o scelte, ai due precedenti subsistemi di ALSA.
  
Poiché il ''device'' è genericamente un elemento che assume ogni applicazione come ''fonte'' e come ''contenitore'' del suo flusso di dati; tali applicazioni - riferendosi tutte con il dispositivo di ALSA - assumono la denominazione di ''Client'' [ [[#Note:|1]] ]. Sia i controller dell'hardware che i vari programmi dell'utente non sono altro che "''Client''" di ALSA. Quest'ultimo, a sua volta, assume la caratteristica e le funzioni di loro "''Server''".  In tal senso ALSA è come un sistema operativo, che mette in comunicazione il software applicativo con l'hardware, seguendo un modello preciso. Coordina i due lati di chi genera gli eventi, e di chi li consuma/esegue; ed entrambi, nella terminologia ALSA, sono appunto semplicemente "''client''".
 
In particolare la gestione reale dei dati Midi è esercitata dai programmi dell'utente e dall'hardware, mentre la funzione più generale del sistema ALSA è quella semplicemente di inviare i predetti dati ''nel momento giusto al Client giusto''. In ciò il sistema ALSA si configura esso stesso come un particolare ''sequencer'', in quanto la sua gestione dei dati si sostanzia nella specifica funzione della loro "''temporizzazione''": se un evento ha inzio in un determinato momento, deve avere termine in un altro preciso momento, così come stabilito dai dati Midi inviati. Questo è il compito del sub-sistema ''seq'' di ALSA.
 
<p>Da quanto detto, ogni nostro programma di gestione dei dati Midi dovrà essere pensato e strutturato necessariamente come "client" del sistema ALSA.</p>
 
  
===Le porte dei Client===
 
  
I ''Client'', come già detto si relazionano con il sistema ALSA (o più precisamente con i suoi ''sub-sistemi'') ed eventualmente con altri Client [ [[#Note:|2]] ]. Tale relazione si sostanzia come possibile scambio reciproco di dati. Affinché i dati possano uscire ed entrare da tali elementi, è necessario che i ''Client'' abbiano delle ''porte'' attraverso le quali far entrare ed uscire i dati. Inoltre è necessario che tra ''Client'' e ''Server'' si stabilisca una "''connessione''".
+
=Riferimenti=
<p>Di conseguenza ai nostri programmi, dopo essere stati pensati come ''Client'', dovranno essere create le ''porte'' necessarie per consentire loro di scambiare dati con il sub-sistema "''seq''" di ALSA.</p>
+
* http://www.alsa-project.org
 
+
* https://www.alsa-project.org/alsa-doc/alsa-lib/
===Capacità in ''lettura'' ed in ''scrittura'' delle porte dei ''Client''===
+
* http://www.volkerschatz.com/noise/alsa.html
 
+
* https://www.webcitation.org/65QZUbXWD?url=http://alsa.opensrc.org/Main_Page#
La modalità di connessione di una porta di un dispositivo con gli altri dispositivi è detta "''Capacità''" della porta.
+
* https://tldp.org/HOWTO/Alsa-sound.html
<p>Ciasuna porta può essere abilitata (cioè possedere una propria "capacità") in Scrittura (READ) o in Lettura (WRITE) oppure in entrambe le modalità (DUPLEX). Ma la "capacità" è una proprietà considerata "''dal punto di vista degli altri dispositivi''" rispetto a quello che possiede la porta con tale capacità. Pertanto, se una porta ha capacità: </p>
+
* https://www.linuxjournal.com/article/6735
<p>* <b>READ</b>, significa che la porta è "leggibile" ''da un altro'' dispositivo. Attraverso questa sua porta con capacità READ il dispositivo, che chiameremo "A", invia dati al dispositivo B, il quale, appunto, "legge" (ossia, "riceve") i dati trasmessi dal dispositivo A. In tal caso il nostro programma sarà un dispositivo con porta avente caratteristica di "''Uscita''" (OUTPUT);</p>
+
* https://www.linuxjournal.com/article/8234
<p>* <b>WRITE</b>, significa che la porta è "scrivibile" ''da una altro'' dispositivo. Attraverso la sua porta con capacità WRITE il dispositivo A legge, ossia "riceve", i dati scritti, ossia "inviati, dal dispositivo B. In tal caso il nostro programma sarà un dispositivo con porta avente caratteristica di "''Entrata''" (INPUT).</p>
+
* https://qastack.it/ubuntu/426983/how-can-i-tell-if-im-using-alsa-or-pulse-audio-by-default-switching-to-i3-wm
 
+
* https://www.kernel.org/doc/html/v4.15/sound/kernel-api/writing-an-alsa-driver.html
<p>Ripetiamo che concettualmente la definizione della "''capacità''" di una porta va sempre considerata ''dal punto di vista dell'altro dispositivo'', e <b>non</b> da quello del dispositivo al quale essa appartiene.
 
 
 
=Note:=
 
 
 
[1] Il ''Client'' è un componente (hardware o software) che si serve delle funzionalità e dei servizi di un altro componente (hardware o software), il ''Server''.
 
 
 
[2] Un esempio può essere la connessione fra un Client e QSynth: il client-Gambas si connette al client-QSynth, ma usando ALSA. Se mancasse uno dei tre, la cosa non funzionerebbe. Del resto l'uso corrente di ALSA è solo basilare; per esempio ci si potrebbe connettere a più di un dispositivo per inviare e ricevere dati, magari a dispositivi che risiedono su un altro computer. E', dunque, possibile instaurare un rapporto tra ''client'' proprio grazie ad ALSA. Nell'esempio riportato la connessione corretta è Client/Gambas-->ALSA-->Client/QSynth: anche se tale passaggio per ALSA non è rinvenibile da nessuna parte, un evento che va da un client-Gambas a QSynth deve passare da ALSA.
 

Versione attuale delle 01:44, 9 set 2020

Come per ogni argomento, prima ancora di scendere nei dettagli di A.L.S.A, è opportuno ed essenziale comprenderne il funzionamento in termini generali.


DEFINIZIONE

ALSA (acronimo di Advanced Linux Sound Architecture) è un componente del kernel Linux che permette, al posto dell’originario OSS (Open Sound System), di gestire le schede audio mediante dispositivi (device) "driver". Il sistema ALSA è esso stesso un Dispositivo che offre - per quel che qui ci interessa - una modalità uniforme di connettere flussi di eventi MIDI tra diversi programmi e tra vari dispositivi hardware.


Linux - Device - Hardware

In via generale il nucleo del sistema operativo non si relaziona direttamente con l'hardware, bensì attraverso un particolare componente strumentale: il dispositivo (device).

Il sistema ALSA in relazione alle sue specifiche funzioni rappresenta, dunque, proprio un dispositivo di tal genere, che consente, appunto, al sistema operativo ed ai vari programmi di dialogare con la scheda audio.

Gli elementi hardware in linux vengono gestiti tutti come "device", accessibili tramite i "dev" driver speciali presenti appunto nella directory "/dev" (in particolare per ALSA: /dev/snd ).

Struttura del sistema ALSA

Il sistema ALSA è composto da diversi sub-sistemi seq, rawmidi, pcm, etc, ciascuno dei quali esercita una propria specifica funzione controllando un particolare tipo di flusso di dati per l'audio. Alsa controlla in modo distinto i dati Midi mediante due sub-sistemi: Seq e RawMidi.

Il subsistema Seq controlla in particolare il flusso di dati in qualità di eventi MIDI strutturati secondo il protocollo di Alsa.

Il sub-sistema RawMidi, invece, gestisce i dati grezzi Midi strettamente conformi al protocollo Midi, come quelli provenienti da un dispositivo Midi esterno (ad esempio una tastiera).

Pertanto, nel redigere il nostro programma Gambas di gestione dei dati MIDI dovremo far riferimento, in base alle nostre necessità o scelte, ai due precedenti subsistemi di ALSA.


Riferimenti