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.