| Home | Il Suono Virtuale | Virtual Sound |

Benvenuto, Visitatore. Per favore, effettua il login o registrati.
Hai perso la tua email di attivazione?

Maggio 16, 2008, 10:51:42 pm
Main Home Help Ricerca Login Registrati

+  Il Suono Virtuale - Forum
|-+  Linguaggi per la Computer Music
| |-+  Altri linguaggi
| | |-+  Midi to XML to Midi to C programming
« precedente successivo »
Pagine: [1] Vai Giù Stampa
Autore Topic: Midi to XML to Midi to C programming  (Letto 375 volte)
NOwave
Full Member
***
Posts: 233



Guarda Profilo
Midi to XML to Midi to C programming
« il: Gennaio 02, 2008, 02:39:26 pm »

Ciao Ragazzi sono molto preso da in sacco di cose quindi ci si sente raramente, mi dispiace.

Tra le altre cose è da un po che lavoro direttamente sul protocollo midi attraverso alcune routine scritte in C.

Da poco ho notato che esiste un link tra il protocollo midi ed il protocollo XML
_premetto, non ho esperienza di XML, ma cosi ad occhio mi sembra un linguaggio orientato agli oggetti.

Visto che io scrivo ancora tutto in C , con tutte le potenzialità del C ma anche a volte con le difficoltà di dover operare ad un livello molto basso (bitwise) e di dovermi inventare basi dati volta per volta(strust,union,enum etc.
sono ancora un po disordinato :-) ).
stavo pensando che una gestione attraverso XML del protocollo midi potrebbe essere interessante.
_Ovviamente non sto parlando di RealTime ma di analisi e manipolazione di Dati MIDI.

Se avete info e link da condividere ve ne sarei grato..
Ciao ragazzi a presto  Bacio
« Ultima modifica: Gennaio 07, 2008, 11:23:35 am da NOwave » Loggato
brunozamborlin
Hero Member
*****
Posts: 769



Guarda Profilo
Re: Midi to XML to Midi
« Risposta #1 il: Gennaio 02, 2008, 07:31:50 pm »

eilà ciao paolo!

_premetto, non ho esperienza di XML, ma cosi ad occhio mi sembra un linguaggio orientato agli oggetti.

uh, sei fuori strada....  Linguaccia
XML non è nemmeno un linguaggio di programmazione.. è un linguaggio di markup "estensibile"
cioè fa conto una specie di HTML dove puoi inserire i tuoi tag personali..
quindi anzichè avere <img> , <div> ecc...
se devi archiviare dei dati musicali potrai avere <pitch>, <volume> ecc...
sostanzialmente serve per memorizzare dei dati da far scorrere poi ad un parser... per validarlo si usa XSL, magari lo conosci già
si usa moltissimo in qualunque database gestionale, ma per un esempio più terra terra, anche pattrstorage archivia i dati in xml.

stavo pensando che una gestione attraverso XML del protocollo midi potrebbe essere interessante.
in che senso?
« Ultima modifica: Gennaio 02, 2008, 07:55:03 pm da brunozamborlin » Loggato

NOwave
Full Member
***
Posts: 233



Guarda Profilo
Re: Midi to XML to Midi
« Risposta #2 il: Gennaio 03, 2008, 03:50:56 pm »

Ciao Bruno, OLA OLA Sorriso

Citazione
Citato da: NOwave su Ieri alle 02:39:26 pm
stavo pensando che una gestione attraverso XML del protocollo midi potrebbe essere interessante.
in che senso?

Semplicemente io sto creando un DataBase di dati midi ed al momento scrivo tutto in C su vari tipi di dati, ( essenzialmente Struct di Struct e vettori), il fine è quello di estrarne contenuto vario ritmico o melodico, oppure vincolare alcuni parametri e applicare algoritmi ad altri,oppure variazioni di uno stesso pattern, o modulazioni armoniche da tonalità lontane..etc... cosette varie..
Non mi trovo male a lavorare in C (ovviamnete niente RealTime, poi il midi che produco lo apro su un Host qualsiasi). ma devo proprio scrivere tutto tuttto tutto il codice e organizzare volta per volta delle BasiDati e algoritmi vari di sorting.
mentre pensavo che se ci fosse qualcosa di gia avanzato tra XML e MIDI mi risparmierei un po di lavoro.
Il mio obbiettivo principale è solo Analisi Dati al momento e archiviazione in DataBase organizzati.

Il passo successivo sarebbe quello di lavorare su questi DataBase con LISP.

Mi sono spiegato?
Che dici .. consigli?   Sorriso

Ciao P
Loggato
NOwave
Full Member
***
Posts: 233



Guarda Profilo
Re: Midi to XML to Midi
« Risposta #3 il: Gennaio 03, 2008, 04:23:20 pm »

Inoltre... Grossa risata già che ci sei ne approfitto Bru!!  Wow

queste righe di codice C ti permettono di accedere a singoli byte del protocollo midi e semplicemente li visualizza.

//  file  DecriptMidi.c
// compilare DecriptMidi.exe
// esempio utilizzo: c:\DecriptMidi MioFileMidi.mid

#include <dos.h>
#include <stdio.h>
#include <stdlib.h>

main()
{
        FILE *fp;

        unsigned char ch, c;

        if((fp=fopen(_argv[1], "rb"))==NULL)            /* open file to read */
        {
                printf("cannot open file %s\n",_argv[1]);
                helpdoc();
                exit(-1);
        }


        c=0;
        ch=fgetc(fp);

        while(!feof(fp))                        /* loop for whole file */
        {
                printf("%u\t", ch);             /* print every byte's decimal equiv. */
                c++;
                if(c > Figo                                 /* print 8 numbers to a line */
                {
                        c=0;
                        printf("\n");
                }

               
                ch=fgetc(fp);
        }

        getchar();
        fclose(fp);                     /* close up */
}

PS: la faccina con gli occhiali è un otto(numero)

Attualmente già ci faccio un sacco di roba con i singoli dati.

Quello che non so ancora fare è un Batch processing che legga per esempio
da una cartella 100 midi file automaticamente e ne memorizzi il contenuto su un DataBase unico. ( attualmente devo aprire ed elaborare un file alla volta )
In poche parole non so come organizzare un Batch Processing in C

Hai qualche idea in proposito?? sarebbe molto utile  Sorriso

Ciao P
Loggato
brunozamborlin
Hero Member
*****
Posts: 769



Guarda Profilo
Re: Midi to XML to Midi
« Risposta #4 il: Gennaio 05, 2008, 01:32:58 pm »

eccomi, dunque vediamo

Citato da: nowave
il fine è quello di estrarne contenuto vario ritmico o melodico, oppure vincolare alcuni parametri e applicare algoritmi ad altri,oppure variazioni di uno stesso pattern, o modulazioni armoniche da tonalità lontane

be direi che la prima cosa da fare è decidere proprio cosa fare...
ma se già hai capito come estrarre i dati (ci sono cmq parecchie librerie che lo fanno) direi che non dovrebbe essere un problema usarli come vuoi..

Citato da: nowave
Inoltre... già che ci sei ne approfitto Bru!!

uh hai incollato tutto il codice!

cmq organizzare un batch processing non è difficile..
guarda la riga fp=fopen(_argv[1], "rb")
anzichè passargli l'argomento dovrai farti un ciclo for e passargli gli elementi di un array, che avrai popolato con i nomi dei file su cui vuoi fare il batch..

lo pseudocodice sarà del tipo:

nomi_files = nuovo array con i nomi dei file midi che vuoi leggere
dati_midi = nuovo array vuoto
for (int i=0; i< nom_files.length;i++)
    dati_midi[ i] = fopen(nomi_files[i ], ..)


ripeto, quello su cui mi concentrerei è "cosa" fare  Grossa risata
« Ultima modifica: Gennaio 06, 2008, 02:32:03 pm da brunozamborlin » Loggato

NOwave
Full Member
***
Posts: 233



Guarda Profilo
Re: Midi to XML to Midi
« Risposta #5 il: Gennaio 07, 2008, 09:08:07 am »

 Sorriso Grazie Bruno

In effetti quello che avevo pensato di fare è proprio la soluzione che mi proponi, cosi evito di fare complicate chiamate a sistema
e me la cavo aggiornando semplicemente una lista di file che poi passo su argv[1].

Sul cosa fare dei dati è un argomento molto vasto. in realtà ci sono piu llivelli: Analisi dati(Progressioni,Accordi&Rivolti,Modulazioni,Scale)
oppure TempoTracks,GrooveQuantizeMaps etc. piano piano procedo e decido il da farsi.

Al momento preferisco concentrarmi sul lavoro di SCORE che sulla SintesiSonora.
Poi riprenderò contatto con SuperCollider, ma in genere mi interessa lavorare sul COSA SUONA e QUANDO, piuttosto che provare
a costruire synth o effetti che in realtà già esistono e suonano bene.
A breve prenderò questa bestiolina http://www.davesmithinstruments.com/products/p8/   (è da provare, consiglio  Occhiolino)

Procedo  Grossa risata Grazie Bruno è sempre un piacere.

Se passi da Torino fatti sentire che ti faccio vedere il mio studio nuovo  Sorriso
Loggato
brunozamborlin
Hero Member
*****
Posts: 769



Guarda Profilo
Re: Midi to XML to Midi
« Risposta #6 il: Gennaio 07, 2008, 10:45:21 am »

se passo te lo dico di sicuro  Occhiolino
Loggato

NOwave
Full Member
***
Posts: 233



Guarda Profilo
Re: Midi to XML to Midi
« Risposta #7 il: Gennaio 07, 2008, 11:09:35 am »

Citazione
se già hai capito come estrarre i dati (ci sono cmq parecchie librerie che lo fanno)

io mi sto scrivendo tutto il codice da zero, che in realtà non è poi cosi complesso, però non uso librerie
e non ne conosco di dedicate al midi per C.
forse qui trovo qualcosa?
http://www.microsoft.com/downloads/details.aspx?FamilyId=4B78A58A-E672-4B83-A28E-72B5E93BD60A&displaylang=en

Se hai qualche Link e indicazione ne approfitto!! come sempre  Grossa risata

Ciao Bru
« Ultima modifica: Gennaio 07, 2008, 11:22:29 am da NOwave » Loggato
brunozamborlin
Hero Member
*****
Posts: 769



Guarda Profilo
Re: Midi to XML to Midi to C programming
« Risposta #8 il: Gennaio 07, 2008, 12:03:28 pm »

prova a dare un occhio qui:

http://www.jdkoftinoff.com/main/Free_Projects/C++_MIDI_Library/
http://www.alsa-project.org/alsa-doc/alsa-lib/group___m_i_d_i___event.html
Loggato

NOwave
Full Member
***
Posts: 233



Guarda Profilo
Re: Midi to XML to Midi to C programming
« Risposta #9 il: Gennaio 23, 2008, 04:52:29 pm »

Citazione
Quello che non so ancora fare  è un Batch processing
Citazione
lo pseudocodice sarà del tipo:
nomi_files = nuovo array con i nomi dei file midi che vuoi leggere
dati_midi = nuovo array vuoto
for (int i=0; i< nom_files.length;i++)
    dati_midi[ i] = fopen(nomi_files[i ], ..)

Ecco qui una procedura di Batch Processing semplice ma efficace; allego codice:

questo esempio si limita a visualizzare il primo Chunk Midi (Mthd) dove vengono dichiarati
MidiFormat;NumberOfMidiTracks;DivisionThicks
però può essere modificato a piacere per estrarre qualsiasi tipo di dato.

/*  file  ReadMthd.c
1)Legge ListaMidiFile.txt
    per creare ListaMidiFile usare da CommandLine nella cartella dei midi file:
    c:\>dir/s/b/a-d > ListaMidiFile.txt
2)Apre MidiFILE e print Mthd Chunk

**)NOTA: i nomi dei file.mid NON devono contenere spazi
*/

#include <dos.h>
#include <stdio.h>
#include <stdlib.h>


main()
{
        FILE *nome_filep, *data_filep;
        char MidiFile[256];
        unsigned char data_byte;
        int i, count;

        if((nome_filep=fopen(_argv[1], "r"))==NULL)     //Open ListaMidiFile.txt
        {
                printf("cannot open file %s\n",_argv[1]);
                exit(-1);
        }

        fscanf(nome_filep,"%s",MidiFile);           //legge stringa da ListaFile

//Loop  ListaMidiFile===========================================================
        while(!feof(nome_filep))
        {
            fscanf(nome_filep,"%s",MidiFile);       //legge stringa da ListaFile

            if((data_filep=fopen(MidiFile, "rb"))==NULL)     //Open MidiFILE.mid
            {
                printf("cannot open file %s\n",MidiFile);
                exit(-1);
            }

            //Legge Mthd da MidiFile============================================
            printf("MthdChunk File>>%s\n", MidiFile);
            count = 0;
            for(i = 0; i < 14; i++)
            {
                data_byte = fgetc(data_filep);
                printf("%u\t", data_byte);
                count++;
                if(count >= 4)                       //Print Format 4xline
                {
                        count = 0;
                        printf("\n");
                }
            }
            printf("\n\n");
            fclose(data_filep);
        }
        fclose(nome_filep);

    getchar();
    return 0;
}


Ciao P  Occhiolino
Loggato
brunozamborlin
Hero Member
*****
Posts: 769



Guarda Profilo
Re: Midi to XML to Midi to C programming
« Risposta #10 il: Gennaio 23, 2008, 05:34:08 pm »

oh ce l'hai fatta  Occhiolino

per gli spazi dei nomi dei file c'è la funzione apposta della libreria standard di c, ora non ricordo il nome guarda nell'api...
Loggato

NOwave
Full Member
***
Posts: 233



Guarda Profilo
Re: Midi to XML to Midi to C programming
« Risposta #11 il: Gennaio 25, 2008, 12:23:46 pm »

si si  Wow ho risolto con fgets, ma bisogna fare attenzione a inizializzare  bene la stringa su cui copi (che sia pulita)
altrimenti quando passi la la stringa come argomento ad fopen lui restituisce NULL se c'è del garbage dentro..

Vabbè tutto ok sono contento procedo  Grossa risata

Loggato
Pagine: [1] Vai Su Stampa 
« precedente successivo »
Salta a:  


Login con username, password e lunghezza della sessione

Il Suono Virtuale - Forum | Powered by SMF 1.1 RC1.
© 2001-2005, Lewis Media. All Rights Reserved.
Traduzione Italiana a cura di SMItalia
Joomla Bridge by JoomlaHacks.com