programamtoreRicevo molto spesso richieste di consigli e suggerimenti da persone che in un modo o nell’altro vorrebbero realizzare dei software o delle applicazioni in ambito musicale.
Alcuni lettori mi chiedono dei semplici consigli, altri chiedono funzioni specifiche e più sofisticate, altri ancora si spingono oltre il limite non valicabile del segreto professionale al quale ovviamente sono legato e per il quale non posso spiegare “come funziona internamente” quel software o quella macchina nella quale negli anni ho avuto occasione di lavorare.
In questa ultima categoria ricadono tutte le richieste di aiuto e suggerimenti che riguardano il mondo degli arranger e delle macchine d’accompagnamento automatiche.
Sembrerà curioso, ma sembra che in giro per il mondo vi siano diverse persone e diverse realtà interessate a realizzare applicazioni software di questo tipo.
Personalmente ritengo che tali richieste o tali fantasie ( quelle di realizzare un arranger appunto) siano legate principalmente alla non conoscenza approfondita della materia; molto spesso chi avanza tali richieste pensa che sia sufficiente realizzare un buon software per costruire e mettere sul mercato un super arranger e sfortunatamente  non hanno la minima cognizione del lavoro, della fatica e delle professionalità che debbono essere presenti dietro un progetto di questo tipo.
Un buon arranger è costituito si da un buon programma software, ma è anche indispensabile disporre di una generazione sonora di qualità, di una programmazione maniacale e certosina degli accompagnamenti e delle parti musicali, di una struttura hardware e software in grado di operare anche nella peggior situazione possibile e sempre pronta a reagire alle richieste e agli interventi dell’utente.
In ogni caso per venire incontro alle richieste di alcuni lettori del blog e grazie ad una segnalazione di un mio amico, ho trovato un software Open Source che emula un arranger.
Visto che questo programma è di pubblico dominio, la sua analisi e  la sua “divulgazione” non viola alcuna regola di riservatezza.
Nelle pagine che seguenti mostrerò come poter compilare, debugare, questo software; queste due fasi sono attività sono infatti indispensabili se si vuole cercare di analizzare e capire il funzionamento.

Il programma in questione è il Gmorgan, una simpatica applicazione sviluppata inizialmente sia per windows che per linux (attualmente si sta sviluppando solamente sul sistema del pinguino) che si prefigge di emulare via software una macchina arranger.

Schermata principale di Gmorgan

Schermata principale di Gmorgan

Gmorgan e la sua documentazione è rilasciata sotto licenza GPL ed entrambi possono essere scaricati dal suo account su sourceforge.com: http://gmorgan.sourceforge.net/
Su youtube trovate delle demo e delle spiegazioni su come funziona il programma.

Tengo a precisare che lo scopo del presente post non è quello di insegnare ad utilizzare questo programma ( per questo vi arrangiate da soli ) ma quello di cercare di darvi gli strumenti necessari per capire come esso funziona al suo interno.

In ogni caso per lavorare con Gmorgan e seguire il presente post, avete bisogno di sistema operativo Linux ( una distribuzione Ubuntu è consigliata), di una tastiera midi collegata al vostro PC, di un generatore sonoro anche virtuale ( io vi consiglio l’ottimo QSynth ) del server Jack installato ( probabilmente funziona anche senza ma con Jack la vita è piu’ semplice) e di un po’ di pazienza per effettuare i primi settaggi del sistema.
Inoltre visto che il nostro scopo è cercare di capire come è fatto,
partiremo dal codice sorgente del programma, che potete scaricare da questo link : http://sourceforge.net/projects/gmorgan/files/, lo compileremo utilizzando il QtCreator e lo faremo girare una volta operativo un modalità debug in modo da poter seguire passo passo il suo flusso interno.

gmOrgan_All

Alcuni chiarimenti:
Gmorgan non è un’applicazione Qt.
Esso è realizzato con gli strumenti e le tools chain tipiche dell’Open Source messe a disposizione dal progetto GNU.
Visto che io sono principalmente IDE-Oriented (la linea di comando quando posso non la uso) caricheremo l’intero progetto nel Qt Creator, e utilizzeremo questo applicativo come IDE grafico e come ambiente di sviluppo.

Altra nota:
Gmorgan utilizza una interfaccia grafica basata sulle librerie FLTK (http://www.fltk.org/index.php).
Per compilare il programma è quindi necessario installare nel vostro sistema tale ToolsKit.
Qualora non lo fosse, aprite il “Gestore di pacchetti” e scaricate sia la run-time che il pacchetto di sviluppo.

fltkInstall

Scaricate le sorgenti del GmOrgan dal link: Download e scompattate il file .tar in una directory a vostro piacimento.

Schermata del 2014-05-12 15:39:11

Apriamo il Qt Creator e clicca sulla voce  Import Existing Project presente nel menu File -> New File or Project -> Other Project.

gmorgan_1

Inserisci il nome del progetto ( nel nostro caso gmorgan) , seleziona la cartella delle sorgenti e clicca Next per procedere.

gmorgan_4

Seleziona la cartella SRC (cartella delle sorgenti) , aggiungi l’estensione *.C in alto nella riga “Show file Matching” e procedi.

gmorgan_7

Visto che non abbiamo un repository per il nostro progetto, clicca sul pulsante Finish della finestra successiva terminare l’importazione del progetto.

gmorgan_6

Dopo qualche secondo il progetto sara’ dentro il QtCreator.

gmorgan_8

Apriamo ora le impostazioni di compilazione cliccando sulla voce Projects posta nella barra a sinistra.

Nella sezione Build Steps, clicca su Add Build Steps e seleziona Custom Process Step.

Nella caselle di testo Command, aggiungi ./configure  clicca sulla freccetta in alto per spostare il passo nella posizione più in alto rispetto al Build già presente.


gmorgan_9

C’è da notare che il configure andrebbe eseguito una sola volta o in teoria effettuato solamente quando si aggiungono o rimuovono files dal progetto. Nel nostro caso viene effettuato ad ogni compilazione ma ad ogni modo  non è che sia un grosso problema.
Se per voi lo è, potete effettuare la prima volta il build in questo modo e poi cliccare sul simbolo di Disable per annullare il passo nelle compilazioni successive.

Espandete il Build Steps successivo cliccando sul pulsante Details e dopo aver tolto la spunta su All aggiungete sul campo Make Arguments la stringa: CXXFLAGS=’-O0 -ggdb’

gmorgan_10

Cliccate ora sulla voce Run alto e nel campo Executable aggiungete la scritta gmorgan
In questa riga deve essere infatti riportato il path ed il nome dell’eseguibile da lanciare una volta che il programma è stato compilato.

gmorgan_11

Il gioco è quasi finito.
Tornate nella schermata principale del programma e cliccate sul pulsante Build (quello con il martello).
La configurazione parte e a seguire si avvia la compilazione.

gmorgan_12

Purtroppo vengono segnalati degli errori probabilmente dovuto a qualche differenza nelle librerie grafiche.

gmorgan_13Senza pensarci troppo, facciamo un doppio click sulle righe che riportano il problema e commentiamo le relative righe di codice, salviamo e riavviamo la compilazione.

gmorgan_14

Il progetto ora compila.

gmorgan_15

Mettete un break point sul main loop del programma ( doppio click sulla colonna a sinistra del file main.c ) Cliccate ora sul pulsante Run Debug del creator ( quello con la coccinella sopra );
il programma si avvia e si arresterà in corrispondenza del break point impostato.
Ora potete avanzare Step by step e vedere come gira!

gmorgan_16

Due parole su come funziona il programma.

Il programma crea un oggetto principale di tipo GMO chiamato gmo ed una sua interfaccia grafica.

gmorgan_17

Dispone di un Main Loop principale nel quale controlla gli eventi MIDI in arrivo con la funzione miramidi()

gmorgan_18

gmorgan_19

La  funzione gmo.organo() controlla cosa deve suonare, genera gli accompagnamenti etc.. etc…

gmorgan_20

e successivamente gestisce gli eventi della GUI

gmorgan_21

Per il resto fate da soli……
non posso mica spiegarvi tutto io!

p.s.
Ringrazio di cuore gli amici che mi segnalano nuove cose interessanti legate al mondo delle musica e tutti coloro che pazientemente mi danno una mano nella correzione e nella revisione  degli articoli del presente Blog!

commenti
  1. graziano panella scrive:

    grazie per la guida.
    chi può aiutarmi con qualche dritta?
    ho ubuntu 14.04, ho installato l’IDE QTCreator ho settato tutto come da tue istruzioni, il progetto compila senza errori, gmorgan compilato gira regolarmente ma ho un problema:

    ed ovviamente non mi funzionano i breakpoint ma solo gli interrupt sul disassemblato.
    uso:
    GNU gdb (Ubuntu 7.7-0ubuntu3.1) 7.7, Python 2.7.6, i flags sul build step make del building settings sono: Make: make ‘CXXFLAGS=-O0 -ggdb’ (campo make arguments->CXXFLAGS=’-O0 -ggdb’)
    sono alcuni giorni che ci giro intorno e leggo documentazione su QTCreator e non ne vengo a capo
    grazie in anticipo.

  2. graziano panella scrive:

    il post precedente ha droppato il problema:
    This does not seem to be a “Debug” build.
    Setting breakpoints by file name and line number may fail.

    Section .debug_info: Not found.
    Section .debug_abbrev: Not found.
    Section .debug_line: Not found.
    Section .debug_str: Not found.
    Section .debug_loc: Not found.
    Section .debug_range: Not found.
    Section .gdb_index: Not found.
    Section .note.gnu.build-id: Found.
    Section .gnu.hash: Found.
    Section .gnu_debuglink: Not found.

  3. graziano panella scrive:

    Ho ripreso il progetto con gmorgan 0.7
    con i flags sul build step make del building:
    Make: make ‘CXXFLAGS=-O0 -ggdb’ (campo make arguments->CXXFLAGS=’-O0 -ggdb’)
    QTCreator non trova i simboli di debug.

    Ho risolto con:
    Make: make ‘CPPFLAGS=-O0 -ggdb’
    Adesso il debug source level funziona senza problemi.
    Post per chi ne avesse bisogno.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...