Quello che non so ancora fare è un Batch processing
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
