#include #include #include #define MAXVZORKU 500000 #define KONECOK 0 #define KONECERR -1 #define MAXINDHLAV 57 /* to je posledni index hlavicky waw file */ #define MAXBUF 50 /* pomocny buffer pro cokoli - vstupy atd. */ void help(void); int main( int pocarg, char *argum[] ) { float cislo; int vysledek = 1; int i = 0; int pom; int psathlasky = 0; int koneconerr = 1; int hexadecimalne = 0; int proMPLAB = 0; int proX = 0; /* MPLAB XIDE */ int souhlasi; int pocitvyst = 0; unsigned long int pocetvzorku = 0; unsigned long int mujpocetvzorku = 0; unsigned long int celkovadelka = 0; /* vse bez hlavicky RIFF a 4 byte delka */ unsigned char vzazak; unsigned char znak; unsigned int pocetkan; unsigned long int vzorkuzasec; unsigned long int bytuzasec; unsigned int bytunavzor; unsigned int bitnavzor; unsigned int cisvzorek; unsigned char wavfile[MAXINDHLAV+2]; /* +2 neni chyba, nebot tam jeste prijde 0 jako konec stringu - inicializuji to pomoci strcpy */ unsigned char buf[MAXBUF+1]; if (pocarg > 1) { /* pocarg == 1 je vzdy, to je vlastni volani tohoto programu a jako argument se objevi nazev tohoto volaneho programu a ten je v argum[0] */ for(i=1;i1 ) printf(", 0x%02x", cisvzorek); else printf(" 0x%02x", cisvzorek); pocitvyst++; if(pocitvyst == 5) { pocitvyst = 0; printf(", \n"); } } } /* od if(proX) */ } else { /* zaviraci je od if(proMPLAB | proX ) */ if(hexadecimalne) printf(" %02x \n",cisvzorek); else printf(" %3d \n",cisvzorek); } } /* od while read(0,&vzazak,1) == 1 */ if(pocetvzorku != mujpocetvzorku ) { printf("Nesouhlasi pocty vzorku\n"); printf(" za hlavickou data je %ld \n",pocetvzorku); printf(" skutecne precteno %ld \n", mujpocetvzorku); return KONECERR; } return KONECOK; } void help(void) { printf(" Program pro prechroustani wav file na vzorky \n"); printf(" Pouziti: wav2s [OPTION] \n"); printf(" Program ocekava na standardnim vstupu wav file \n"); printf(" napr. cat file.wav | ./wav2s \n"); printf(" Na standardni vystup doda ciselnou representaci vzorku z chunku data \n"); printf(" Ocekavaji se nasledujici parametry wav file: \n"); printf(" A zakon dle CCITT "); printf(" Pocet vz. za 1 s.: 8000 - standardni PCM \n"); printf(" Jeden kanal - tedy mono "); printf(" Vzorky 8 bitove \n"); printf(" Na vystupu jsou tupe opsana data bez jakychkoli uprav,\n"); printf(" tedy 8bitu / cislo, sude bity jsou invertovany, \n"); printf(" proste s temi vzorky neni delana vubec zadna uprava\n\n"); printf(" Moznosti: OPTION muze byt \n"); printf(" -h tento help \n"); printf(" -x vystupni cisla v hexadecimalnim tvaru, jinak desitkove \n"); printf(" -f force data budou prevadena, i kdyz vstupni wav file\n"); printf(" nevyhovi vyse uvedenym pozadavkum (A zakon atd...) \n" ); printf(" -c bude psat hlasky, pokud nektery z parametru \n"); printf(" wav file nevyhovi, tez uda delku atd. \n"); printf(" -m vystup ve formatu vhodnem pro MPLAB \n"); printf(" .byte 0x58,0x78,0xab .... atd. \n"); printf(" -a vystup ve formatu vhodnem pro MPLABX \n"); printf(" definuje PSV promennou a jeji hodnoty \n"); }