# Programmare con le api di alsalib per interfaccia MIDI

## darkmanPPT

So che non è che centri molto con gentoo questo topic, ma essendo utente di gentoo e non sapendo dove sbattere la testa... ho deciso di scrivere qui.

x i moderatori: Non fatevi problemi a cancellare il post se è troppo OT (dopotutto è scritto anche qui)

Sto cercando di programmare un client midi che, presi degli eventi in ingresso, compia delle azioni particolari (dovrebbe interagire con JACK-audio connection kit).

E' necessario che questo client venga scritto utilizzando le api di ALSA: a quanto pare c'è un baco con JACK, dato che non mi vede 3/4 dei client MIDI. Chissà, forse è un problema dei 3/4 client che, magari, non sono stati scritti usando jack. I miei client MIDI con interfaccia JACK li vede, ma gli altri, no. L'interfaccia midi di ardour, tipo, non viene vista da JACK, ma solo da ALSA! (uso qjackctl)

C'è qualcuno di voi che ha mai usato le api di ALSA per programmare sequencer midi?

Se si, vorrei chiedere:

1) dove ha trovato how-to e/o tutorial esaustivi

2) molte cose, oramai, a forza di leggermi codice sorgente, sono arrivato a capirle... ma come si fa, ad esempio, ad avere una lista di tutti i client MIDI attivi? (qjackctl lo fa.. solo che il suo codice.. ehm.. è un po' difficile da leggere   :Rolling Eyes:  )

Sinceramente mi sono un po' scazzato a leggermi il codice sorgente di applicativi che usano ALSA per vedere come effettivamente usare le librerie...

Se quelli di ALSA avessero messo almeno qualche esempio in più (ce ne sono solo 5 mini-esempi) o almeno qualche tutorial (ne ho trovati 3 in giro per la rete ed affrontano solo elementi "superficiali" di alsa) non sarei finito per postare qui.

Il problema è che il sito dove risiede la documentazione di ALSA non è che sia molto chiaro.. ANZI.....   :Rolling Eyes:  (lasciam perdere o m'incazzo). Ci fosse almeno un forum ad hoc... neanche quello!

[+ OT del topic]

...............e poi ci si chiede come mai ci sono pochi programmi audio-decenti-per-fare-musica sviluppati per linux..........

[/+ OT del topic]

----------

## vuott

Effettivamente la programmazione MIDI in ambiente ALSA è un po' ostica, soprattutto per la mancanza di manuali precisi e dettagliati che possano guidare passo passo coloro (soprattutto i programmatori meno esperti) che intendono avvicinarsi e dedicarsi alla programmazione in ALSA.

Poiché hai nel frattempo "battuto un sentiero" nella misteriosa foresta ALSA, sarebbe interessante se tu volessi/potessi condividere con gli altri la tua ricerca, scrivendo così un essenziale, ma utile manuale, per poter instradare chi appunto sta pensando di addentrarsi in quella giungla.

Grazie

Ciao

----------

## darkmanPPT

che storia! qualcuno ha tirato fuori questo mio intervento di due anni fa!

beh, che dire....

alla fine è vero, risolsi il problema e scrissi un applicativo che usava gli eventi midi da una tastiera-midi connessa al pc.

allora, non è complicata la cosa, ma in effetti non è nemmeno banalotta. (il programma che mi cambiava tramite pressione di eventi midi il grafo di connessione di JACK è fatto di 1194 righe di codice.....   :Rolling Eyes:  )

potrei si scrivere qualcosa ma non so bene dove. che scriva sul forum? non mi pare il posto più adatto.

comunque il problema o, anzi, i miei problemi riguardano lo scrivere client midi per ALSA che girano e compiono azioni su JACK-audio-connection-kit.

----------

## vuott

Ciao Darkman, ti ringrazio per la risposta e soprattutto, cosa che mi fa davvero molto piacere, per la tua disponibilità a dare la luce in quel mistero che si chiama “programmare in ambiente ALSA”.

Se sei disponibile a scrivere un manuale leggero, ma esaustivo e finalmente chiarificatore (laddove gli altri tutorial in giro omettono o latitano), potresti anche – momentaneamente – pubblicarlo in questo forum a mo’ di post. Magari successivamente potresti pubblicalo in sito tutto tuo, o vedere un po’ se nel sito ufficiale di ALSA te lo pubblicano (c'è pure qualcosa in spagnolo !).

Mi permetto con modestia e rispetto nei tuoi confronti   :Embarassed:   di segnalarti al riguardo qualche elemento che sarebbe opportuno – io credo – fosse tenuto in considerazione nella stesura del tuo futuro manuale.

I manuali (o tutorial come voglia dirsi) presenti in rete spesso sembrano – incomprensibilmente   :Shocked:   - rivolgersi a utenti che già conoscono molto bene la materia che si intende spiegare. E’ un po’ come se, volendo spiegare come si fa la pasta fatta in casa, dicessero solamente: << Per fare la pasta ci vuole acqua e farina e poi farla cuocere. >>, oppure volendo spiegare come si guida un’automobile dicessero: << L’automobile si guida accelerando e usando il manubrio. >>  :Evil or Very Mad:  .  Immagina, Darkman, quali cuochi o autisti uscirebbero fuori da scuole di cucina e scuole-guida con tali metodi di insegnamento !

Ed allora, io credo che la stesura di un manuale non può e non deve  :Crying or Very sad:  avere quel tipo di piega: innanzitutto chi scrive deve porsi “dal punto di vista di chi lo legge”, "di chi vuole apprendere” (...perché non sa, appunto, se no non leggerebbe un manuale !), ossia una persona che – al di là del grado di conoscenza in materia di programmazione – NON conosce in dettaglio il protocollo ALSA ed il suo funzionamento, ossia “come” i comandi e le sue funzioni “vanno usate” e “correlate fra loro” per ottenere un pur minimo risultato.

Ecco, per esempio, un metodo di approccio “potrebbe” essere quello di procedere “per gradi” di complessità: dopo aver dato una spiegazione di massima (bastano alcune righe) però chiarificatrice dell’architettura di ALSA, procedere con la spiegazione delle funzioni mediante gli esempi. Voglio dire, ad un certo punto potresti dire: << Ora cominciamo con le funzioni e comandi essenziali, ossia quelli che IN QUALSIVOGLIA PROGRAMMA DEVONO SEMPRE ESSERCI. Come progetto esemplificativo cominciamo con un piccolo ed essenzialissimo sequencer Midi per ottenere il nostro primo suono di una nota. >>. E quindi potresti procedere:<< Dunque, poiché l’architettura ALSA abbiamo visto che prevede “questo....”, allora dobbiamo innanzitutto appunto realizzare “questo...”. Lo si fa con questi comandi delle API ALSA “Tizio” e “Caio”. Attenzione a non dimenticare che nella funzione Caio ci va “questa cosa.....”, altrimenti succede “questo errore....”. Nella funzione Tizio la variabile “x” ha “questa caratteristica....”, perché......., altrimenti.... “. Fatto questo, passiamo ora al secondo passo: ALSA richiede quest’altra “cosa......”, la realizziamo utilizzando questa funzione API, chiamata: “Sempronio”; la quale deve sempre avere....................., perché..............., altrimenti succede questo errore.............. >>.

Guarda, Darkman, bastano 1 o 2 righe per ogni spiegazione, comprensibili, precise e chiarificatrici del perché lo si deve fare.

Insomma, il manuale deve guidare “passo passo” l’utente a realizzare l’obiettivo finale. Il manuale NON deve dare tutte le righe di programmazione del software, ma “individuare” i passaggi logici, temporali e consequenziali da realizzarsi; del tipo: 1^ cosa da fare mediante questo; 2^ cosa da fare mediante quest’altro; 3^ cosa da fare mediante quest’altro; etc..... Come ho già detto spiegando “brevemente” (basta anche solo 1 riga !) il perché .

Insomma, Darkman, tornando all’esempio dell’automobile, il manuale dovrebbe dire: “per far muovere un’automobile, assicurarsi innanzitutto che vi sia sufficiente benzina nel serbatoio e la batteria per l’energia elettrica. La benzina è necessaria perché il motore è a scoppio e funziona con quella. Attenzione: non mettere acqua, perché non sarebbe supportata dal motore. La batteria poi serve innanzitutto per la fase iniziale di accensione del motore mediante il motorino d’avviamento.” ....altro che solamente: "accelerate e vedrete che si muoverà." !!!

Voglio fare un esempio un po' più concreto e pertinente. Da quel che ho potuto vedere in alcuni listati, il richiamo alla libreria delle API di ALSA c'è sempre. Ed allora nel manuale questo è un passaggio essenziale che va messo nel giusto rilievo. Insomma, più o meno del seguente tenore (per capirci...): <<Cari amici programmatori, la prima [se lo è] cosa a cui pensare, quando cominciate un qualsiasi progetto che deve lavorare in ALSA, è richiamare la libreria delle API di ALSA; si fa in questo modo.......... E' necessario questo richiamo, altrimenti non potranno essere usate le funzioni di ALSA.>>. Insomma una roba del genere, Darkman.

...comunque sia, Darkman, non so se mi sono spiegato.

Poi, ovviamente, i tuoi lettori potranno magari contattarti, laddove necessario, per avere lumi su specifici concetti e passaggi.

Se sei ancora intenzionato a scrivere questo tuo utilissimo manuale, posso "aiutarti" dandoti qualche spunto già con qualche domanda  :Smile:  su passaggi di carattere generale.

Grazie moltissime ancora per la tua disponibilità.

Ciao

----------

## darkmanPPT

suvvia, evitiamo tutto questo eccesso di riverenza.   :Laughing: 

nei prossimi giorni sono impegnato con una scadenza. poi scriverò giù qualcosa, promesso.

magari farò un intervento sul forum "risorse".

più che altro, spero di essere esaustivo. son passati ben due anni da quando scrissi giù quel programma.

quel che so, lo scriverò   :Wink: 

cmq mi ricordo che era veramente un casino scrivere giù il programma per alsa; non tanto per il programma in sè, ma per le API!

anche io, come te, notai che non c'è assolutamente nulla per iniziare a programmare con alsa e midi.

dai, prossimamente scriverò giù qualcosa.   :Wink: 

----------

## vuott

Molto bene, Darkman; quando avrai cominciato ad inserire qualcosa lì, ti prego di dare un cenno in questo post.

----------

## darkmanPPT

ho iniziato a scriver qualcosa

https://forums.gentoo.org/viewtopic-p-6732876.html#6732876

----------

## vuott

 *darkmanPPT wrote:*   

> ho iniziato a scriver qualcosa
> 
> https://forums.gentoo.org/viewtopic-p-6732876.html#6732876

 

Moooolto bene, Darkman. Ben fatto !

----------

