ALSA e Gambas - Il salvataggio dei dati Midi

Da Gambas-it.org - Wikipedia.

Come per la registrazione dei dati Midi anche per il salvataggio di tali dati in un file Midi potremmo prevedere l'utilizzo di un programma di supporto, scritto in C (come per esempio arecordmidi), oppure approntare un nostro specifico programma in linguaggio Gambas. Ovviamente qui ci occuperemo della seconda ipotesi. Il nostro obiettivo, pertanto, in questo capitolo sarà quello descrivere le istruzioni necessarie per salvare i dati Midi in un file Midi. Si risponderà alla domanda su come realizzare uno standard file Midi con le risorse della programmazione Gambas.

Abbiamo visto nel precedente capitolo "Registrare messaggi Midi" un esempio possibile di istruzioni ed algoritmi per memorizzare i dati Midi ricevuti da un dispositivo esterno, nonché la creazione di un array per i Messaggi Midi e di un array per il Tempo Delta.

Passiamo ora al salvataggio di tali elementi, di tali dati in uno standard file Midi.

Come sappiamo, il file Midi non è una mera sequenza di dati. Infatti esso è un archivio di dati complesso: composto di varie strutture fondamentali (chunk) che contengono i byte, ossia i dati. Pertanto, nella costruzione del file Midi dovremo rispettare non solo il protocollo Midi, ma anche le norme e le strutture alla base del file Midi.

Di seguito eviteremo di esporre codice esemplificativo, ritenendo che ciascun programmatore possa e debba scegliere le soluzioni algoritmiche che riterrà più opportune e migliori.


Si sottolinea semplicemente che bisognerà - fra le altre cose - per la creazione di un file Midi:

  • scrivere il Blocco d'Intestazione Mthd (Header Chunk) del file;
  • scrive la cosiddetta: Traccia del Tempo, defininendone i valori del Meta-evento del "Tempo metronomico", e volendo anche quelli del Meta-evento della "Suddivisione della Misura" e quello della "Tonalità della Scala musicale" del brano;
  • scrivere le tracce contenenti i dati degli eventi Midi e dei relativi Tempi Delta

Riguardo alla determinazione ed alla scrittura delle tracce MTrk nel file in altri casi, come ad esempio con un sequencer Midi, una procedura da seguire potrebbe essere quella di calcolare innanzitutto a quanti diversi canali fanno riferimento gli eventi Midi da salvare. Tale numero andrebbe quindi sommato alla "Traccia del Tempo" (se si intende scriverla nel file). Il totale andrebbe inserito nell'apposito byte dell'Intestazione MThd relativo appunto all'indicazione del numero complessivo delle tracce MTrk. Dopo di ciò, si dovrebbe prevedere nella procedura di creazione del file Midi la scrittura di ogni traccia per canale (oltre alla eventuale "Traccia del Tempo") comprendente ciascuna i dati appartenenti a quel canale di riferimento.