Oggi è gio 26 nov 2009, 9:40

Tutti gli orari sono UTC +3 ore [ ora legale ]




Apri un nuovo argomento Rispondi all’argomento  [ 5 messaggi ] 
Autore Messaggio
 Oggetto del messaggio: Decodificatore CDP
MessaggioInviato: mar 9 set 2008, 1:36 
Non connesso
Amministratore
Avatar utente

Iscritto il: lun 8 set 2008, 18:25
Messaggi: 122
Avete costruito il programmatore e avete salvato un log sotto forma di wave???
Bene ecco il sorgente che vi permettera di Decodificarlo in binario.

Scusate ma ho avuto poco tempo (sono sotto esami) per codarlo.

Appena mi libero faro' una routine di autocalibrazione dei campioni.

Codice:

/*
DECODIFICATORE CDP
Codato da Univers3
*/
#include <stdlib.h>
#include <fstream>

#define Nomefile "File.wav"               //Nome O Percorso del file Wav
#define Nomeoutput "Output.txt"              //Nome O Percorso dell'output Decodificato
#define MaxCampioniZero 5                 //Durata Massima (numero di campioni) del primo picco di uno zero
#define MaxCampioniUno 11                  //Durata Massima (numero di campioni) di un picco di un uno

using namespace std;   

int logga(char c){
    ofstream logFile(Nomeoutput, ios::out | ios::app);
   
    if(!logFile.is_open())
    {
         return 1;
    }
   
    logFile << c;
   
    logFile.flush();
    logFile.close();
   
    return 0;
}



int skip(FILE * file,int m){
     unsigned int b;   
     unsigned char c;
     int i = 1;
    if ((fread(&c, 1,1, file))<=0)exit (0);
    b=(unsigned int)c;     
     
    while (b==m){
    if ((fread(&c, 1,1, file))<=0)exit (0);
    b=(unsigned int)c; 
    i++;
    }
   
    fseek (file,-1,SEEK_CUR);
    if (i<=1)return 0;  //skippato solo un valore
    if (i<=MaxCampioniZero)return 1; //skippato giusto
    if (i<=MaxCampioniUno)return 2; //skippato un 1
    if (i>MaxCampioniUno)return 3; //skippato una pausa
}



int controllo (FILE * file, int m){
     unsigned int b;   
     unsigned char c;
     int i = 1;
     int x;
    if ((fread(&c, 1,1, file))<=0)exit (0);
    b=(unsigned int)c;     
   
    while (b==m){
    if ((fread(&c, 1,1, file))<=0)exit (0);
    b=(unsigned int)c;
    i++;
    }
   


    if (i<=MaxCampioniZero){
              logga('0');
              x=skip(file,b);
              if (x == 2) printf("Skippato un 1\n");
              if (x == 3) printf("Skippato una pausa\n");
              if (x == 0){
                    printf("Skippato solo un valore\n");
                     if ((fread(&c, 1,1, file))<=0)exit (0);
                     b=(unsigned int)c;
                     skip(file,b);
                     }
              return x;
              }
    if (i<=MaxCampioniUno) logga('1');
    if (i>MaxCampioniUno){ fseek (file,-1,SEEK_CUR);
              logga('\n');
              return 1;
   
    }
    return 0;

}



int main()
{
    unsigned int b;
    int i,Make,a;
    unsigned char c; 
    FILE *file = fopen(Nomefile, "r");
    if (file==NULL) exit(0);

fseek(file,68,SEEK_SET);   

while ((fread(&c, 1,1, file)) >= 1){
b=(unsigned int)c;
i=controllo (file,b);
if (i == 2) printf("ERRORE 1\n");
}
   

}



Top
 Profilo  
 
 Oggetto del messaggio: Re: Decodificatore CDP
MessaggioInviato: mar 3 nov 2009, 23:15 
Non connesso

Iscritto il: mar 3 nov 2009, 23:09
Messaggi: 13
@Univers3
Potresti dirci quale compilatore usare per la compilazione del tuo sorgente?

Spero di non chiedere troppo se ci dai un link o riferimento di sorta...

zzie.


Top
 Profilo  
 
 Oggetto del messaggio: Re: Decodificatore CDP
MessaggioInviato: mer 4 nov 2009, 0:01 
Non connesso

Iscritto il: mar 9 set 2008, 17:49
Messaggi: 127
Se non sbaglio con devC++ riuscii tranquillamente a decodificare naturalmente sul forum c'è scritto


Top
 Profilo  
 
 Oggetto del messaggio: Re: Decodificatore CDP
MessaggioInviato: mer 4 nov 2009, 0:39 
Non connesso

Iscritto il: mar 3 nov 2009, 23:09
Messaggi: 13
@ daredevil3
grazie per la rapida segnalazione. Mi attivo per la compilazione del sorgente con DevC++. :P


Top
 Profilo  
 
 Oggetto del messaggio: Re: Decodificatore CDP
MessaggioInviato: lun 16 nov 2009, 16:23 
Non connesso
Avatar utente

Iscritto il: lun 2 nov 2009, 23:18
Messaggi: 5
Come da me scritto si compila con qualsiasi compilatore C++ io ho usato Visual Studio...
Gli Include sono del C++ ma e' scritto in C.
Ho corretto delle piccolezze, perche' sono pignolo...
Corretto in questo modo:
int main()
{
unsigned int b;
int i,Make,a; <---------------------
unsigned char c;
FILE *file = fopen(Nomefile, "r");
if (file==NULL) exit(0);

fseek(file,68,SEEK_SET);

while ((fread(&c, 1,1, file)) >= 1){
b=(unsigned int)c;
i=controllo (file,b);
if (i == 2) printf("ERRORE 1\n");
}

<---------------------
}

Corretto in:
int main()
{
unsigned int b;
int i; <---------------------
unsigned char c;
FILE *file = fopen(Nomefile, "r");
if (file==NULL) exit(0);

fseek(file,68,SEEK_SET);

while ((fread(&c, 1,1, file)) >= 1){
b=(unsigned int)c;
i=controllo (file,b);
if (i == 2) printf("ERRORE 1\n");
}

return 0; <---------------------
}

Allego il compilato (CDP.exe)


Allegati:
Cdp.zip [109.02 ]
Scaricato 6 volte
Top
 Profilo  
 
Visualizza ultimi messaggi:  Ordina per  
Apri un nuovo argomento Rispondi all’argomento  [ 5 messaggi ] 

Tutti gli orari sono UTC +3 ore [ ora legale ]


Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite


Non puoi aprire nuovi argomenti
Non puoi rispondere negli argomenti
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi inviare allegati

Cerca per:
Vai a:  
cron
Blue Moon by Trent © 2007
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Hosting by AlterVista
Traduzione Italiana phpBB.it