MusiXBox

 

Riprendendo le funzionalità e gli algoritmi implementati nel PCM del Professor Leonello Tarabella si è intrapresa la realizzazione della MusiXBox Library utilizzando il paradigma della programmazione ad oggetti. Nella libreria sono stati sottolineati i ruoli del Musicista, dello strumento musicale e dell'ascoltatore.
Gli strumenti sono costruiti come estensione dei SoundObject che contengono :

Il SoundGenerator implementa le funzionalità degli oscillatori e degli inviluppi e contiene a sua volta il TableHolder principale e quelli condivisi, al cui funzione è contenere e gestire tabelle e tabelle di inviluppo.
Tramite i SoundController si può intervenire sulla sintesi utilizzando qualsiai interfaccia di controllo semplicemente implementando il controllore desiderato estendendo la classe base.
Con i JackStreamer ed i SoundConnector si è voluto creare l'astrazione necessaria a rappresentare la connesione tra gli strumenti tramite i cavi Jack come effettivamente avviene nel mondo fisico degli strumenti (basta pensare alle muraglie di componenti rack collegati per ottenere il suono desiderato a partre da strumenti e DSP in cascata fra loro).
Una volta realizzti gli strumenti questi producono essenzialmetne uan sintesi monoaruale e posso essere assemblati e fatti suonare da un Musician.
L'interfaccia Imusician serve proprio a contenere l'iperstrumento costrutito e darne una collocazione spaziale e velocità di spostamento, tramite SoundController ci si può trasformare in direttori d'orchestra o, per meglio dire, in "Suonatori di musicisti".
Ogni musicista è padrone di un thread che realizza la sintesi secondo i parametri di controllo e/o di una partitura.
Fino a questo punto si è voluto mantenere la sintesi monaurale per rendere l'esecutore sgombro dai problemi della spazializzazione del suono.
Il Renderer (o l'ascoltatore) viene infatti connesso ai Musician realizzati e in modo trasparente realizza la sintesi in :


preoccupandosi anche di eventuali effetti doppler dovuti alle velocità relative tra i musicisti e l'ascoltatore.
Il fatto di realizzare tale struttura ad oggetti ha permesso l'utilizzo di memoria dinamica e di calcolo distribuito in modo molto più familiare e comprensibile all'utente di quanto non fosse possibile con un classico porgramma C.
Grazie alle ultime tecnologie di compilazione buona parte del codice è stato trasformato in istruzioni realizzate ad Hardware dai moderni processori lasciando il codice sorgente leggibile.
La tecnologia di rendering è basata su DirectX9 della microsoft e questo ha permesso di mantenersi ben distanti dai driver e dalle peculiarità delle singole schede audio pur ottenendo il massimo da cio`che si ha montato sulla propria workstation.
La libreria di base è stat realizzata in ansi C++ in modo da compilare in ambiente Win32, MacOS e Linux, solo il motore di rendering è diverso a seconda delle piattaforme.
Le librerie saranno presto disponibili sulla rete in forma binaria in modo da poter essere estesa secondo le esigenze degli utenti e sono tutte librerie dinamiche.
Oltre a MusiXBoxLibrary sono in costruzione anche ControllerLibrary e InstrumentLibrary (costruite come estensione della libreria di base) in modo da fornire ai primi utenti anche un set (se pur minimale nella prima fase) di controllori e strumenti.
Il design di progettazione consentirà di produrre aggiornamenti in forma di espansioni del primo Core di oggetti in modo da ottenere una backward Compability nei confronti delle applicazioni sviluppate dagli utenti.
La scelta di realizzare in prima istanza al versione completa per Win32 con il supporto di DirectX9 è dovuta anche al fatto che si intende realizzare una sperimetnazione sui sistemi Xbox della Microsoft al fine di poter produrre un software in grado di trasformare console per gioco in veri e propri strumenti musicali.