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");
}
}