Newsgroup: it.arti.musica
Titolo: wav------>mid: NE SIETE PROPRIO TUTTI SICURI?


Mai sentito parlare di wav2mid?  Bye Bye

Mai sentito parlare di wav2mid?  Bye Bye
Una classica mossa alla Yello dei bei tempi, non c'è che dire... >8D
In ogni caso, eccoti in fondo al messaggio il sorgente C del programma
in questione, nel quale lo stesso autore ammette lo scarso
funzionamento.
Tra l'altro io ho detto che programmi di questo genere esistono, ma
appunto sono ben lungi dall'essere funzionali e utili (è forse più
facile utile usare Wav2Mid o l'orecchio per trovarsi lo spartito di un
WAV monofonico con la certezza di non sbagliare?)
Tra l'altro sarei proprio curioso, avendo del tempo da buttare, di
vedere come si comporterebbe di fronte a un vibrato questo programma:
secondo me genererebbe semplicemente una rapida sequenza di note poco
diverse tra loro... chissà.
se hai fatto quella domanda solo per far fare una figura di merda a
qualcuno, direi che ci sei riuscito...
non farmi aggiungere altro.........
**  Wav2Mid.c
**
**  This is not quite functional yet.  It sort of works, but the notes
**  are not sorted.  Also, the midi file works with the sound-blaster
**  sequencer, but not throught the windows midi player.  I don't know
**  why.  Also, it is lacking in comments.  The comments shown are
**  just notes to myself, and may not make complete sense.
**
**************************************************************************/
#include
#include
#include
#include
FILE *out;
void print_tempo(void){
        fputc(0x00,out);
        fputc(0xFF,out);
        fputc(0x51,out);
        fputc(0x03,out);
        fputc(0x07,out);
        fputc(0xA1,out);
        fputc(0x20,out);
}
void print_header(int tracks){
        fputc(0x4D,out);
        fputc(0x54,out);
        fputc(0x68,out);
        fputc(0x64,out);
        fputc(0x00,out);
        fputc(0x00,out);
        fputc(0x00,out);
        fputc(0x06,out);
        fputc(0x00,out);
        fputc(0x02,out);
        fputc(0x00,out);
        fputc(tracks,out);
        fputc(0x00,out);
        fputc(0x60,out);
}
void print_track_head(int track, char length){
        fputc(0x4D,out);
        fputc(0x54,out);
        fputc(0x72,out);
        fputc(0x6B,out);
        fputc(0x00,out);
        fputc(0x00,out);
        fputc(0x00,out);
        fputc(length,out);
        fputc(0x00,out);
        fputc(0xC0+track,out);
        fputc(0x00,out);
}
void program_change(int track, char prog){
        fputc(0x00,out);
        fputc(0xC0+track,out);
        fputc(prog,out);
}
void note_strt(int track, char dtime, char note){
        fputc(dtime,out);
        fputc(0x90+track,out);
        fputc(note,out);
        fputc(0x32,out);
}
void note_stop(int track, char dtime, char note){
        fputc(dtime,out);
        fputc(0x80+track,out);
        fputc(note,out);
        fputc(0x00,out);
}
void stat(char dtime, char note){
        fputc(dtime,out);
        fputc(note,out);
        fputc(0x64,out);
}
void print_track_end(){
        fputc(0x00,out);
        fputc(0xFF,out);
        fputc(0x2F,out);
        fputc(0x00,out);
}
struct vect {
   float           base;
   float           v1;
   float           v2;
   float           v3;
   float           v4;
   float           v5;
   float           vstart;
   float           vduration;
   int             inst;
   int             note;
};
float dist(data, examplar)
   struct vect    *data, *examplar;
{
   float           temp;
   temp = ((data->v1 - examplar->v1) * (data->v1 - examplar->v1) +
        (data->v2 - examplar->v2) * (data->v2 - examplar->v2) +
        (data->v3 - examplar->v3) * (data->v3 - examplar->v3) +
        (data->v4 - examplar->v4) * (data->v4 - examplar->v4) +
        (data->v5 - examplar->v5) * (data->v5 - examplar->v5));
   return temp;
}
void jsort(struct vect *in[17][10000], int track, int tklngth)
{
        struct vect temp;
        int i,j;
        for(i=0;i0;j--){
if((in[track][j]->vstart)<(in[track][j-1]->vstart)){
                        temp.base=in[track][j]->base;
                        temp.v1=in[track][j]->v1;
                        temp.v2=in[track][j]->v2;
                        temp.v3=in[track][j]->v3;
                        temp.v4=in[track][j]->v4;
                        temp.v5=in[track][j]->v5;
                        temp.vstart=in[track][j]->vstart;
                        temp.vduration=in[track][j]->vduration;
                        temp.inst=in[track][j]->inst;
                        temp.note=in[track][j]->note;
                        in[track][j]->base=in[track][j-1]->base;
                        in[track][j]->v1=in[track][j-1]->v1;
                        in[track][j]->v2=in[track][j-1]->v2;
                        in[track][j]->v3=in[track][j-1]->v3;
                        in[track][j]->v4=in[track][j-1]->v4;
                        in[track][j]->v5=in[track][j-1]->v5;
                        in[track][j]->vstart=in[track][j-1]->vstart;
in[track][j]->vduration=in[track][j-1]->vduration;
                        in[track][j]->inst=in[track][j-1]->inst;
                        in[track][j]->note=in[track][j-1]->note;
                        in[track][j-1]->base=temp.base;
                        in[track][j-1]->v1=temp.v1;
                        in[track][j-1]->v2=temp.v2;
                        in[track][j-1]->v3=temp.v3;
                        in[track][j-1]->v4=temp.v4;
                        in[track][j-1]->v5=temp.v5;
                        in[track][j-1]->vstart=temp.vstart;
                        in[track][j-1]->vduration=temp.vduration;
                        in[track][j-1]->inst=temp.inst;
                        in[track][j-1]->note=temp.note;
                        }
                /*in[track][j]->vstart=0.0;*/
                }
        }
}
 
void mergesort(struct vect *A, int p, int r) {
   int q, i, j, k, n;
   struct vect move;
   if (pA[k].vstart) {
            move.base=A[k].base;
            move.v1=A[k].v1;
            move.v2=A[k].v2;
            move.v3=A[k].v3;
            move.v4=A[k].v4;
            move.v5=A[k].v5;
            move.vstart=A[k].vstart;
            move.vduration=A[k].vduration;
            move.inst=A[k].inst;
            move.note=A[k].note;
            for (n=j; nbase<17.35250) temp->note=0;
        if(temp->base>17.35250&&temp->base<19.47750) temp->note=1;
        if(temp->base>19.47750&&temp->base<21.21375) temp->note=2;
        if(temp->base>21.21375&&temp->base<23.16313) temp->note=3;
        if(temp->base>23.16313&&temp->base<26.00000) temp->note=4;
        if(temp->base>26.00000&&temp->base<29.18375) temp->note=5;
        if(temp->base>29.18375&&temp->base<31.78563) temp->note=6;
        if(temp->base>31.78563&&temp->base<34.70563) temp->note=7;
        if(temp->base>34.70563&&temp->base<38.95563) temp->note=8;
        if(temp->base>38.95563&&temp->base<42.42875) temp->note=9;
        if(temp->base>42.42875&&temp->base<46.32688) temp->note=10;
        if(temp->base>46.32688&&temp->base<52.00000) temp->note=11;
        if(temp->base>52.00000&&temp->base<58.36750) temp->note=12;
        if(temp->base>58.36750&&temp->base<63.57063) temp->note=13;
        if(temp->base>63.57063&&temp->base<69.41125) temp->note=14;
        if(temp->base>69.41125&&temp->base<77.91188) temp->note=15;
        if(temp->base>77.91188&&temp->base<84.85750) temp->note=16;
        if(temp->base>84.85750&&temp->base<92.65313) temp->note=17;
        if(temp->base>92.65313&&temp->base<103.9994) temp->note=18;
        if(temp->base>103.9994&&temp->base<116.7356) temp->note=19;
        if(temp->base>116.7356&&temp->base<127.1419) temp->note=20;
        if(temp->base>127.1419&&temp->base<138.8250) temp->note=21;
        if(temp->base>138.8250&&temp->base<155.8250) temp->note=22;
        if(temp->base>155.8250&&temp->base<169.7125) temp->note=23;
        if(temp->base>169.7125&&temp->base<185.3063) temp->note=24;
        if(temp->base>185.3063&&temp->base<208.0000) temp->note=25;
        if(temp->base>208.0000&&temp->base<233.4688) temp->note=26;
        if(temp->base>233.4688&&temp->base<254.2838) temp->note=27;
        if(temp->base>254.2838&&temp->base<277.6450) temp->note=28;
        if(temp->base>277.6450&&temp->base<311.6450) temp->note=29;
        if(temp->base>311.6450&&temp->base<339.4300) temp->note=30;
        if(temp->base>339.4300&&temp->base<370.6150) temp->note=31;
        if(temp->base>370.6150&&temp->base<416.0000) temp->note=32;
        if(temp->base>416.0000&&temp->base<466.9400) temp->note=33;
        if(temp->base>466.9400&&temp->base<508.5650) temp->note=34;
        if(temp->base>508.5650&&temp->base<555.2900) temp->note=35;
        if(temp->base>555.2900&&temp->base<623.2950) temp->note=36;
        if(temp->base>623.2950&&temp->base<678.8600) temp->note=37;
        if(temp->base>678.8600&&temp->base<741.2250) temp->note=38;
        if(temp->base>741.2250&&temp->base<831.9950) temp->note=39;
        if(temp->base>831.9950&&temp->base<933.8850) temp->note=40;
        if(temp->base>933.8850&&temp->base<1017.135) temp->note=41;
        if(temp->base>1017.135&&temp->base<1110.600) temp->note=42;
        if(temp->base>1110.600&&temp->base<1246.600) temp->note=43;
        if(temp->base>1246.600&&temp->base<1357.700) temp->note=44;
        if(temp->base>1357.700&&temp->base<1482.450) temp->note=45;
        if(temp->base>1482.450&&temp->base<1664.000) temp->note=46;
        if(temp->base>1664.000&&temp->base<1867.750) temp->note=47;
        if(temp->base>1867.750&&temp->base<2034.230) temp->note=48;
        if(temp->base>2034.230&&temp->base<2221.120) temp->note=49;
        if(temp->base>2221.120&&temp->base<2493.120) temp->note=50;
        if(temp->base>2493.120&&temp->base<2715.360) temp->note=51;
        if(temp->base>2715.360&&temp->base<2964.880) temp->note=52;
        if(temp->base>2964.880&&temp->base<3328.000) temp->note=53;
        if(temp->base>3328.000&&temp->base<3735.520) temp->note=54;
        if(temp->base>3735.520&&temp->base<4068.560) temp->note=55;
        if(temp->base>4068.560&&temp->base<4442.320) temp->note=56;
        if(temp->base>4442.320&&temp->base<4986.320) temp->note=57;
        if(temp->base>4986.320&&temp->base<5430.880) temp->note=58;
        if(temp->base>5430.880&&temp->base<5929.840) temp->note=59;
        if(temp->base>5929.840&&temp->base<6656.000) temp->note=60;
        if(temp->base>6656.000&&temp->base<7471.040) temp->note=61;
        if(temp->base>7471.040&&temp->base<8137.040) temp->note=62;
        if(temp->base>8137.040&&temp->base<8884.640) temp->note=63;
        if(temp->base>8884.640&&temp->base<9972.720) temp->note=64;
        if(temp->base>9972.720&&temp->base<10861.76) temp->note=65;
        if(temp->base>10861.76&&temp->base<11859.60) temp->note=66;
        if(temp->base>11859.60&&temp->base<13311.92) temp->note=67;
        if(temp->base>13311.92&&temp->base<14942.16) temp->note=68;
        if(temp->base>14942.16&&temp->base<16274.16) temp->note=69;
        if(temp->base>16274.16&&temp->base<17769.60) temp->note=70;
        if(temp->base>17769.60&&temp->base<19945.60) temp->note=71;
        if(temp->base>19945.60&&temp->base<21723.20) temp->note=72;
        if(temp->base>21723.20&&temp->base<23719.20) temp->note=73;
        if(temp->base>23719.20&&temp->base<26624.00) temp->note=74;
        if(temp->base>26624.00&&temp->base<29884.00) temp->note=75;
        if(temp->base>29884.00)                      temp->note=76;
        return;
}
void main(void) {
        clock_t start;
        clock_t finish;
 
   FILE           *fpin, *fpout;
        int     tempcount;
        int     hgjunk;
   float           tdist;
   int             track;
   int             count, count2;
   int             totalin;
   int             ct[17];
   int             i,j;
   struct vect     in[17][10000];
   struct vect     tempvec;
   int             tklngth[17];
   float           time;
   int             temp;
   char            tempc;
   struct vect     examplar[17] = 
   /*                                                              */
          {{1.0, 5.0, 1.0, 0.5, 2.0, 1.0, 1.0, 1.0, 1, 1},
           {1.0, 2.0, 0.5, 5.0, 3.0, 0.5, 1.0, 1.0, 2, 1},
           {1.0, 1.0, 2.0, 5.0, 1.0, 1.0, 1.0, 1.0, 3, 1},
           {1.0, 4.5, 1.0, 0.5, 1.5, 0.2, 1.0, 1.0, 4, 1},
           {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 5, 1},
           {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 6, 1},
           {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 7, 1},
           {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 8, 1},
           {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 9, 1},
           {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 10, 1},
           {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 11, 1},
           {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 12, 1},
           {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 13, 1},
           {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 14, 1},
           {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 15, 1},
           {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 16, 1}};
        start=clock();
   fpin = fopen("input.dat", "r");
   track = 0;
   count = 0;
   do {
      /* Read in the vector:  */
      /* in[track][count]=readvect(); */
      fscanf(fpin, "%f", &in[track][count].base);
      if (in[track][count].base != -999)
         fscanf(fpin, "%f %f %f %f %f %f %f", &in[track][count].v1,
          &in[track][count].v2, &in[track][count].v3,
          &in[track][count].v4, &in[track][count].v5,
                &in[track][count].vstart,
&in[track][count].vduration);
      count++;
   } while (in[track][count - 1].base != -999);
   fclose(fpin);
   totalin = count;
/*********************************************************
**
**  PFOR loop goes here
**      shared- in[][],tklength[count],ct[count]
**      local-  count
**
*********************************************************/
#pragma parallel shared(in,examplar,totalin) local(count,count2,tdist)
{
#pragma pfor iterate(count=0;totalin;1)
        for(count=0;count=0;j--){
                        /*printf("%f %f\n",
in[count][j+1].vstart,in[count][j].vstart);*/
if((in[count][j+1].vstart)<(in[count][j].vstart)){
                        /*printf("Less that detected.\n");*/
                        tempvec.base=in[count][j].base;
                        tempvec.v1=in[count][j].v1;
                        tempvec.v2=in[count][j].v2;
                        tempvec.v3=in[count][j].v3;
                        tempvec.v4=in[count][j].v4;
                        tempvec.v5=in[count][j].v5;
                        tempvec.vstart=in[count][j].vstart;
                        tempvec.vduration=in[count][j].vduration;
                        tempvec.inst=in[count][j].inst;
                        tempvec.note=in[count][j].note;
                        in[count][j].base=in[count][j+1].base;
                        in[count][j].v1=in[count][j+1].v1;
                        in[count][j].v2=in[count][j+1].v2;
                        in[count][j].v3=in[count][j+1].v3;
                        in[count][j].v4=in[count][j+1].v4;
                        in[count][j].v5=in[count][j+1].v5;
                        in[count][j].vstart=in[count][j+1].vstart;
in[count][j].vduration=in[count][j+1].vduration;
                        in[count][j].inst=in[count][j+1].inst;
                        in[count][j].note=in[count][j+1].note;
                        in[count][j+1].base=tempvec.base;
                        in[count][j+1].v1=tempvec.v1;
                        in[count][j+1].v2=tempvec.v2;
                        in[count][j+1].v3=tempvec.v3;
                        in[count][j+1].v4=tempvec.v4;
                        in[count][j+1].v5=tempvec.v5;
                        in[count][j+1].vstart=tempvec.vstart;
                        in[count][j+1].vduration=tempvec.vduration;
                        in[count][j+1].inst=tempvec.inst;
                        in[count][j+1].note=tempvec.note;
                        }
                /*in[track][j]->vstart=0.0;*/
                }
        }
}
}
/*scanf("%d",&hgjunk);*/
/*********************************************************
**
**      Pfor END
**
*********************************************************/
   out = fopen("output.mid", "w");
/* This is where the file header is written.  It should be exactly the
same
        for ALL the files.  <> denotes a binary value needed */
        print_header(16);
/* Loop through each of the tracks */
        for(track=1;track<17;track=track+1){
/* The length of the track works out to be as follows */
        /*Length = 3*prog_change + 8*notes + 7(tempo change) + 7*/
        tempc=tklngth[track]*8+10; /*No program changes*/
        if(track==0) tempc+=7;  /* If track 0, include a tempo */
        print_track_head(track,temp);
        if(track==0) print_tempo(); /* If track 0, include a tempo */
 
/*      program_change(0x04);*/
        count=0;
        time=0.0;
   while(in[track][count].base!=-999){
                        /* wmididata(in[track][count]); */
           if(in[track][count].vduration==1){
note_strt(track,in[track][count].vstart-time,in[track][count].note);
           }
           if(in[track][count].vduration==0){
note_stop(track,in[track][count].vstart-time,in[track][count].note);
           }
           /*printf("%i %f %f %f %f %i \n",
                track,
                time,
                in[track][count].vstart,
                in[track][count].vstart-time,
                in[track][count].vduration,
                in[track][count].note);*/
           if(in[track][count].vstart>time)
time=in[track][count].vstart;
           count=count+1;
           }
           /*fprintf(fpout, "\n");*/
           print_track_end();
        }
   fclose(out);
        finish=clock();
        printf("It took %f ticks to complete\n",(float)
(finish-start)/CLOCKS_PER_SEC);
   return;
}
          It-Alien
napo...@inopera.it
http://www.inopera.it/~napodano

Tutto quello che vuoi, ma perchč c****** mi vai ad includere trecento righe
di codice?!?
Carlo
c.cr...@sintel.it
M.U.S.I.C. - il sito per i musicisti sul web: 
http://www.carlo.sintel.it
MusicbOOm - la webzine tutta italiana:
http://www.geocities.com/SunsetStrip/Venue/7983


di codice?!?
Mi dispiace che tu sia stato "costretto" a scaricartele, ma mi sembra
che l'obiettivo sia evidente: guardate il programma e rendetevi conto
di cosa fa.
Non potevo mandare il file compilato in attachment perché
it.comp.musica non è un gruppo Binaries, tra l'altro non mi ero
accorto che ci fosse un crosspost, e di questo sicuramente mi scuso.
Cmq il poche parole il messaggio è questo:
1) prima di spararle certa gente dovrebbe sapere di cosa sta parlando 
    (spesso è un errore che compio anche io)
2) fare domande capziose per poi fare il figo dicendo la "risposta  
    giusta" è proprio un atteggiamento da.. come dire, non mi viene il
    termine... Lamer >8)
Cià!
          It-Alien
napo...@inopera.it
http://www.inopera.it/~napodano

non farmi aggiungere altro.........
Non era certo quella la mia intenzione e per favore vatti a leggere la
risposta che ho dato a NeuRoTiX. Probabilmente ce l'ho fatta io la figura
che dici (ma sono proprio il solo?) e se sono stato inteso in tal modo me ne
scuso nella maniera piů sincera. Rimane sempre il fatto che la mia
illusione di trovare in rete gente comprensiva e gentile rimane "pia" spesso
e volentieri. Per fortuna, non posso fare di tutta l'erba un fascio e in
ogni caso non volevo scatenare tutta questa bagarre. Ne valeva la pena?


 Mi intrometto perchè ho trovato qualcosa di interessante su
alt.binaries.midi. Quoto il messaggio per intero:

 

 

 
Subject:


            
Re: Is it possible to convert .wav to .mid??


        Date:


            
31 Dec 1997 18:13:30 GMT


       From:


            

re...@aol.com
 (Rende)


 Organization:


            
AOL 
http://www.aol.com


 Newsgroups:


            
alt.binaries.sounds.midi


  References:


            
1


 


Sound or Wave to Midi converters:


Sound2Midi by AudioWorks Ltd. (a Phil Collins company)


http://www.audioworks.com/index.html


Prismer by Creative Labs (in beta)


http://realorche.elim.net/prismer/


Play By Ear by IMSYS (in beta)


imsy...@aol.com


Autoscore by Wildcat Canyon Software


http://www.wildcat.com


Musician's CD Player (CD to Midi)


http://home1.swipnet.se/~w-11396/muscdpl.htm


 


FACCIO NOTARE che l'ultima riga spara una leggera cazzata: il programma
in questione non converte affatto i CD in MIDI, ma è comunque un
utile strumento per chi deve trascrivere assoli etc: serve a suonare una
parte di un CD musicale a velocità ridotta MA SENZA ALTERARE IL
PITCH. Si può anche mandare in loop la frase che interessa.


Per quanto riguarda la conversione Sound to MIDI, dal sito della Creative
si può scaricare una versione beta.


Ciao e Buon Anno

Diego


alt.binaries.midi. Quoto il messaggio per intero:
Dato che al momento non posso per qualche minimo problema al mio PC,
prego qualche iscritto di buona volontà e interessato all'argomento
(tipo NeuroTiX) di controllare quanto presente in quei link.
Credo ci sarà da farsi qualche grassa risata 
(ciò non toglie che Diego ha fatto bene a "intromettersi")
 
          It-Alien
napo...@inopera.it
http://www.inopera.it/~napodano

Ne valeva la pena?
Io dico di no, tantopiù che, come ti è stato più volte detto, non sei
il primo a sollevare cotanto polverone.
