qboolean decoder_wav_cont_open( snd_stream_t *stream ) { snd_wav_stream_t *wav_stream; if( !stream ) return qfalse; wav_stream = (snd_wav_stream_t *)stream->ptr; if( !read_wav_header( wav_stream->filenum, &stream->info ) ) { decoder_wav_close( stream ); return qfalse; } wav_stream->content_start = wav_stream->position; return qtrue; }
static int player_open(MSFilter *f, void *arg){ PlayerData *d=(PlayerData*)f->data; int fd; const char *file=(const char*)arg; if (d->fd>=0){ player_close(f,NULL); } if ((fd=open(file,O_RDONLY))==-1){ ms_warning("Failed to open %s",file); return -1; } d->state=STOPPED; d->fd=fd; if (strstr(file,".wav")!=NULL) read_wav_header(d); ms_message("%s opened: rate=%i,channel=%i",file,d->rate,d->nchannels); return 0; }
static int player_open(MSFilter *f, void *arg){ PlayerData *d=(PlayerData*)f->data; HANDLE fd; const char *file=(const char*)arg; #if defined(_WIN32_WCE) fd = CreateFile((LPCWSTR)file, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); #else fd = CreateFile(file, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); #endif if (fd==INVALID_HANDLE_VALUE){ ms_warning("Failed to open %s",file); return -1; } d->state=STOPPED; d->fd=fd; if (strstr(file,".wav")!=NULL) read_wav_header(d); return 0; }
void *decoder_wav_load( const char *filename, snd_info_t *info ) { int filenum; int read; void *buffer; if( trap_FS_IsUrl( filename ) ) return NULL; trap_FS_FOpenFile( filename, &filenum, FS_READ|FS_NOSIZE ); if( !filenum ) return NULL; if( !read_wav_header( filenum, info ) ) { trap_FS_FCloseFile( filenum ); Com_Printf( "Can't understand .wav file: %s\n", filename ); return NULL; } buffer = S_Malloc( info->size ); read = trap_FS_Read( buffer, info->size, filenum ); if( read != info->size ) { S_Free( buffer ); trap_FS_FCloseFile( filenum ); Com_Printf( "Error reading .wav file: %s\n", filename ); return NULL; } byteSwapRawSamples( info->samples, info->width, info->channels, (qbyte *)buffer ); trap_FS_FCloseFile( filenum ); return buffer; }
int main(int argc, char *argv[]) { FILE *fp; char bitbuf[8]; int bit_count = 0, byte_count = FRAMESTART, header_found = 0, byte, i; int bit, len; ++argv; while ((*argv) && (!wavloaded)) { if ( (strcmp(*argv, "-v") == 0) || (strcmp(*argv, "--verbose") == 0) ) { option_verbose = 1; } else if ( (strcmp(*argv, "-r") == 0) || (strcmp(*argv, "--raw") == 0) ) { option_raw = 1; } else { if ( !(fp = fopen(*argv, "rb")) ) { fprintf(stderr, "%s konnte nicht geoeffnet werden\n", *argv); return -1; } else wavloaded = 1; } ++argv; } if (!wavloaded) { fprintf(stderr, "rs41sg [options] <rs41_audio.wav>\n"); fprintf(stderr, " options:\n"); fprintf(stderr, " -v, --verbose\n"); fprintf(stderr, " -r, --raw\n"); return -1; } i = read_wav_header(fp); if (i) { fclose(fp); return -1; } while (!read_bits_fsk(fp, &bit, &len)) { if (len == 0) { // reset_frame(); if (byte_count > FRAME_LEN-20) print_frame(byte_count); bit_count = 0; byte_count = FRAMESTART; header_found = 0; inc_bufpos(); buf[bufpos] = 'x'; continue; // ... } for (i = 0; i < len; i++) { inc_bufpos(); buf[bufpos] = 0x30 + bit; // Ascii if (!header_found) { if (compare() >= HEADLEN) header_found = 1; } else { bitbuf[bit_count] = bit; bit_count++; if (bit_count == 8) { bit_count = 0; byte = bits2byte(bitbuf); frame[byte_count] = byte; byte_count++; if (byte_count == FRAME_LEN) { byte_count = FRAMESTART; header_found = 0; print_frame(FRAME_LEN); } } } } } fclose(fp); return 0; }
void loop() { int bytes_read=0; //Keeps track of how many bytes are read when accessing a file on the SD card. //Init Timer 1 //Used for 45uS Interrupt TCCR1A = 0; //Set Timer to normal mode TCCR1B = 0x0A; //Set Timer clock to 2 MHz. Clear timer on compare TIMSK1 = 0x02; //Enable Timer 1 Compare A Interrupt; OCR1AH = 0X00; //Count to 90 before triggering an interrupt. Counting to 90 with a 2MHz clock makes OCR1AL = 0x5A; //the interrupt trigger at 22.222kHz init_filesystem(); //Initialize the FAT16 file system on the SD card. if(get_wav_filename(dd, file_name)); //Find the first WAV file on the SD card (must be in the root directory) else while(1); //If a WAV file isn't found then the sketch is stopped here. //Open the file file_handle=open_file_in_dir(fs, dd, file_name); //Read the header information. Alternate purpose is to get to the DATA offset of the file. read_wav_header(file_handle, header); //Set the initial play buffer, and grab the initial data from the SD card. play_buffer=0; bytes_read = fat_read_file(file_handle, buffer1, BUFFERSIZE); bytes_read = fat_read_file(file_handle, buffer2, BUFFERSIZE); //Enable interrupts to start the wav playback. sei(); while(1){ if(need_new_data==1) //need_new_data flag is set by ISR to indicate a buffer is empty and should be refilled { need_new_data=0; //Clear the flag. if(play_buffer==0) //play_buffer indicates which buffer is now empty { //Get the next BUFFERSIZE bytes from the file. bytes_read = fat_read_file(file_handle, buffer1, BUFFERSIZE); } else { //Get the next BUFFERSIZE bytes from the file. bytes_read = fat_read_file(file_handle, buffer2, BUFFERSIZE); } new_buffer_ready=1; //new_buffer_ready flag tells the ISR that the buffer has been filled. //If file_read returns 0 or -1 file is over. Find the next file! if(bytes_read<=0) { cli(); //Disable interrupts to stop playback. fat_close_file(file_handle); //Close the current file //Find the next WAV file in the SD card fat_reset_dir(dd); //Make sure we start searching from the beginning of the directory find_file_in_dir(fs, dd, file_name, &dir_entry); //Navigate to the current file in the directory if(get_wav_filename(dd, file_name)); else while(1); //If we don't find another wav file, stop everything! //If we get here we've found another wav file. Open it! file_handle=open_file_in_dir(fs, dd, file_name); //Get the file header and load the initial song data. read_wav_header(file_handle, header); play_buffer=0; bytes_read = fat_read_file(file_handle, buffer1, BUFFERSIZE); bytes_read = fat_read_file(file_handle, buffer2, BUFFERSIZE); sei(); //Start playing the song } } } }
int main(int argc, char **argv) { int nb_samples, total_samples=0, nb_encoded; int c; int option_index = 0; char *inFile, *outFile; FILE *fin, *fout; short input[MAX_FRAME_SIZE]; celt_int32 frame_size = 960; int quiet=0; int nbBytes; CELTMode *mode; void *st; unsigned char bits[MAX_FRAME_BYTES]; int with_cbr = 0; int with_cvbr = 0; int with_skeleton = 0; int total_bytes = 0; int peak_bytes = 0; struct option long_options[] = { {"bitrate", required_argument, NULL, 0}, {"cbr",no_argument,NULL, 0}, {"cvbr",no_argument,NULL, 0}, {"comp", required_argument, NULL, 0}, {"nopf", no_argument, NULL, 0}, {"independent", no_argument, NULL, 0}, {"framesize", required_argument, NULL, 0}, {"skeleton",no_argument,NULL, 0}, {"help", no_argument, NULL, 0}, {"quiet", no_argument, NULL, 0}, {"le", no_argument, NULL, 0}, {"be", no_argument, NULL, 0}, {"8bit", no_argument, NULL, 0}, {"16bit", no_argument, NULL, 0}, {"mono", no_argument, NULL, 0}, {"stereo", no_argument, NULL, 0}, {"rate", required_argument, NULL, 0}, {"version", no_argument, NULL, 0}, {"version-short", no_argument, NULL, 0}, {"comment", required_argument, NULL, 0}, {"author", required_argument, NULL, 0}, {"title", required_argument, NULL, 0}, {0, 0, 0, 0} }; int print_bitrate=0; celt_int32 rate=48000; celt_int32 size; int chan=1; int fmt=16; int lsb=1; ogg_stream_state os; ogg_stream_state so; /* ogg stream for skeleton bitstream */ ogg_page og; ogg_packet op; int bytes_written=0, ret, result; int id=-1; CELTHeader header; char vendor_string[64]; char *comments; int comments_length; int close_in=0, close_out=0; int eos=0; float bitrate=-1; char first_bytes[12]; int wave_input=0; celt_int32 lookahead = 0; int bytes_per_packet=-1; int complexity=-127; int prediction=2; /*Process command-line options*/ while(1) { c = getopt_long (argc, argv, "hvV", long_options, &option_index); if (c==-1) break; switch(c) { case 0: if (strcmp(long_options[option_index].name,"bitrate")==0) { bitrate = atof (optarg); } else if (strcmp(long_options[option_index].name,"cbr")==0) { with_cbr=1; } else if (strcmp(long_options[option_index].name,"cvbr")==0) { with_cvbr=1; } else if (strcmp(long_options[option_index].name,"skeleton")==0) { with_skeleton=1; } else if (strcmp(long_options[option_index].name,"help")==0) { usage(); exit(0); } else if (strcmp(long_options[option_index].name,"quiet")==0) { quiet = 1; } else if (strcmp(long_options[option_index].name,"version")==0) { version(); exit(0); } else if (strcmp(long_options[option_index].name,"version-short")==0) { version_short(); exit(0); } else if (strcmp(long_options[option_index].name,"le")==0) { lsb=1; } else if (strcmp(long_options[option_index].name,"be")==0) { lsb=0; } else if (strcmp(long_options[option_index].name,"8bit")==0) { fmt=8; } else if (strcmp(long_options[option_index].name,"16bit")==0) { fmt=16; } else if (strcmp(long_options[option_index].name,"stereo")==0) { chan=2; } else if (strcmp(long_options[option_index].name,"mono")==0) { chan=1; } else if (strcmp(long_options[option_index].name,"rate")==0) { rate=atoi (optarg); } else if (strcmp(long_options[option_index].name,"comp")==0) { complexity=atoi (optarg); } else if (strcmp(long_options[option_index].name,"framesize")==0) { frame_size=atoi (optarg); } else if (strcmp(long_options[option_index].name,"nopf")==0) { if (prediction>1) prediction=1; } else if (strcmp(long_options[option_index].name,"independent")==0) { prediction=0; } else if (strcmp(long_options[option_index].name,"comment")==0) { if (!strchr(optarg, '=')) { fprintf (stderr, "Invalid comment: %s\n", optarg); fprintf (stderr, "Comments must be of the form name=value\n"); exit(1); } comment_add(&comments, &comments_length, NULL, optarg); } else if (strcmp(long_options[option_index].name,"author")==0) { comment_add(&comments, &comments_length, "author=", optarg); } else if (strcmp(long_options[option_index].name,"title")==0) { comment_add(&comments, &comments_length, "title=", optarg); } break; case 'h': usage(); exit(0); break; case 'v': version(); exit(0); break; case 'V': print_bitrate=1; break; case '?': usage(); exit(1); break; } } if (argc-optind!=2) { usage(); exit(1); } inFile=argv[optind]; outFile=argv[optind+1]; /*Initialize Ogg stream struct*/ srand(time(NULL)); if (ogg_stream_init(&os, rand())==-1) { fprintf(stderr,"Error: stream init failed\n"); exit(1); } if (with_skeleton && ogg_stream_init(&so, rand())==-1) { fprintf(stderr,"Error: stream init failed\n"); exit(1); } if (strcmp(inFile, "-")==0) { #if defined WIN32 || defined _WIN32 _setmode(_fileno(stdin), _O_BINARY); #elif defined OS2 _fsetmode(stdin,"b"); #endif fin=stdin; } else { fin = fopen(inFile, "rb"); if (!fin) { perror(inFile); exit(1); } close_in=1; } { fread(first_bytes, 1, 12, fin); if (strncmp(first_bytes,"RIFF",4)==0 && strncmp(first_bytes,"RIFF",4)==0) { if (read_wav_header(fin, &rate, &chan, &fmt, &size)==-1) exit(1); wave_input=1; lsb=1; /* CHECK: exists big-endian .wav ?? */ } } if (bitrate<=0.005) if (chan==1) bitrate=64.0; else bitrate=128.0; bytes_per_packet = MAX_FRAME_BYTES; mode = celt_mode_create(rate, frame_size, NULL); if (!mode) return 1; snprintf(vendor_string, sizeof(vendor_string), "Encoded with CELT %s\n",CELT_VERSION); comment_init(&comments, &comments_length, vendor_string); /*celt_mode_info(mode, CELT_GET_FRAME_SIZE, &frame_size);*/ celt_header_init(&header, mode, frame_size, chan); header.nb_channels = chan; { char *st_string="mono"; if (chan==2) st_string="stereo"; if (!quiet) if (with_cbr) fprintf (stderr, "Encoding %.0f kHz %s audio in %.0fms packets at %0.3fkbit/sec (%d bytes per packet, CBR)\n", header.sample_rate/1000., st_string, frame_size/(float)header.sample_rate*1000., bitrate, bytes_per_packet); else fprintf (stderr, "Encoding %.0f kHz %s audio in %.0fms packets at %0.3fkbit/sec (%d bytes per packet maximum)\n", header.sample_rate/1000., st_string, frame_size/(float)header.sample_rate*1000., bitrate, bytes_per_packet); } /*Initialize CELT encoder*/ st = celt_encoder_create_custom(mode, chan, NULL); { int tmp = (bitrate*1000); if (celt_encoder_ctl(st, CELT_SET_BITRATE(tmp)) != CELT_OK) { fprintf (stderr, "bitrate request failed\n"); return 1; } } if (!with_cbr) { if (celt_encoder_ctl(st, CELT_SET_VBR(1)) != CELT_OK) { fprintf (stderr, "VBR request failed\n"); return 1; } if (!with_cvbr) { if (celt_encoder_ctl(st, CELT_SET_VBR_CONSTRAINT(0)) != CELT_OK) { fprintf (stderr, "VBR constraint failed\n"); return 1; } } } if (celt_encoder_ctl(st, CELT_SET_PREDICTION(prediction)) != CELT_OK) { fprintf (stderr, "Prediction request failed\n"); return 1; } if (complexity!=-127) { if (celt_encoder_ctl(st, CELT_SET_COMPLEXITY(complexity)) != CELT_OK) { fprintf (stderr, "Only complexity 0 through 10 is supported\n"); return 1; } } if (strcmp(outFile,"-")==0) { #if defined WIN32 || defined _WIN32 _setmode(_fileno(stdout), _O_BINARY); #endif fout=stdout; } else { fout = fopen(outFile, "wb"); if (!fout) { perror(outFile); exit(1); } close_out=1; } if (with_skeleton) { fprintf (stderr, "Warning: Enabling skeleton output may cause some decoders to fail.\n"); } /* first packet should be the skeleton header. */ if (with_skeleton) { add_fishead_packet(&so); if ((ret = flush_ogg_stream_to_file(&so, fout))) { fprintf (stderr,"Error: failed skeleton (fishead) header to output stream\n"); exit(1); } else bytes_written += ret; } /*Write header*/ { unsigned char header_data[100]; int packet_size = celt_header_to_packet(&header, header_data, 100); op.packet = header_data; op.bytes = packet_size; op.b_o_s = 1; op.e_o_s = 0; op.granulepos = 0; op.packetno = 0; ogg_stream_packetin(&os, &op); while((result = ogg_stream_flush(&os, &og))) { if(!result) break; ret = oe_write_page(&og, fout); if(ret != og.header_len + og.body_len) { fprintf (stderr,"Error: failed writing header to output stream\n"); exit(1); } else bytes_written += ret; } op.packet = (unsigned char *)comments; op.bytes = comments_length; op.b_o_s = 0; op.e_o_s = 0; op.granulepos = 0; op.packetno = 1; ogg_stream_packetin(&os, &op); } /* fisbone packet should be write after all bos pages */ if (with_skeleton) { add_fisbone_packet(&so, os.serialno, &header); if ((ret = flush_ogg_stream_to_file(&so, fout))) { fprintf (stderr,"Error: failed writing skeleton (fisbone )header to output stream\n"); exit(1); } else bytes_written += ret; } /* writing the rest of the celt header packets */ while((result = ogg_stream_flush(&os, &og))) { if(!result) break; ret = oe_write_page(&og, fout); if(ret != og.header_len + og.body_len) { fprintf (stderr,"Error: failed writing header to output stream\n"); exit(1); } else bytes_written += ret; } free(comments); /* write the skeleton eos packet */ if (with_skeleton) { add_eos_packet_to_stream(&so); if ((ret = flush_ogg_stream_to_file(&so, fout))) { fprintf (stderr,"Error: failed writing skeleton header to output stream\n"); exit(1); } else bytes_written += ret; } if (!wave_input) { nb_samples = read_samples(fin,frame_size,fmt,chan,lsb,input, first_bytes, NULL); } else { nb_samples = read_samples(fin,frame_size,fmt,chan,lsb,input, NULL, &size); } if (nb_samples==0) eos=1; total_samples += nb_samples; nb_encoded = -lookahead; /*Main encoding loop (one frame per iteration)*/ while (!eos || total_samples>nb_encoded) { id++; /*Encode current frame*/ nbBytes = celt_encode(st, input, frame_size, bits, bytes_per_packet); if (nbBytes<0) { fprintf(stderr, "Got error %d while encoding. Aborting.\n", nbBytes); break; } nb_encoded += frame_size; total_bytes += nbBytes; peak_bytes=IMAX(nbBytes,peak_bytes); if (wave_input) { nb_samples = read_samples(fin,frame_size,fmt,chan,lsb,input, NULL, &size); } else { nb_samples = read_samples(fin,frame_size,fmt,chan,lsb,input, NULL, NULL); } if (nb_samples==0) { eos=1; } if (eos && total_samples<=nb_encoded) op.e_o_s = 1; else op.e_o_s = 0; total_samples += nb_samples; op.packet = (unsigned char *)bits; op.bytes = nbBytes; op.b_o_s = 0; /*Is this redundent?*/ if (eos && total_samples<=nb_encoded) op.e_o_s = 1; else op.e_o_s = 0; op.granulepos = (id+1)*frame_size-lookahead; if (op.granulepos>total_samples) op.granulepos = total_samples; /*printf ("granulepos: %d %d %d %d %d %d\n", (int)op.granulepos, id, nframes, lookahead, 5, 6);*/ op.packetno = 2+id; ogg_stream_packetin(&os, &op); /*Write all new pages (most likely 0 or 1)*/ while (ogg_stream_pageout(&os,&og)) { ret = oe_write_page(&og, fout); if(ret != og.header_len + og.body_len) { fprintf (stderr,"Error: failed writing header to output stream\n"); exit(1); } else bytes_written += ret; } } /*Flush all pages left to be written*/ while (ogg_stream_flush(&os, &og)) { ret = oe_write_page(&og, fout); if(ret != og.header_len + og.body_len) { fprintf (stderr,"Error: failed writing header to output stream\n"); exit(1); } else bytes_written += ret; } if (!with_cbr && !quiet) fprintf (stderr, "Average rate %0.3fkbit/sec, %d peak bytes per packet\n", (total_bytes*8.0/((float)nb_encoded/header.sample_rate))/1000.0, peak_bytes); celt_encoder_destroy(st); celt_mode_destroy(mode); ogg_stream_clear(&os); if (close_in) fclose(fin); if (close_out) fclose(fout); return 0; }
int main() { char *file2 = "test2.wav"; FILE *f = fopen(file2,"wb"); unsigned int test_channels = 2; unsigned int test_sampleRate = 44000; unsigned int test_sampleByte = 2; unsigned int test_samplesPerChannel = 44000; unsigned int test_seconds = 60; unsigned int test_hertz = 440; write_wav_header(f,test_channels,test_sampleRate,test_sampleByte,test_samplesPerChannel*test_seconds); void *sampleData = malloc(sizeof(char)*test_channels*test_sampleByte*test_seconds); if(sampleData==NULL) return; wav_sample_t sample = { test_channels, test_sampleByte, test_channels*test_sampleByte, NULL }; int i,j; double high,low; for(i=0;i<test_samplesPerChannel*test_seconds;i++) { for(j=0;j<test_channels;j++) { // sin(2*Pi*(Hz / 44000)*i) high = sin( (double) i * ( ((double) (test_hertz + ((double)(i % 1000))/440) * 2 * M_PI) / (double)test_sampleRate)); if((i%(22000))<1100*test_seconds) { low = sin( (double) i * ( ((double) (test_hertz + (50) * 2 * M_PI) / (double)test_sampleRate))); } else { low = sin( (double) i * ( ((double) (test_hertz + (75) * 2 * M_PI) / (double)test_sampleRate))); } *(((short *)sampleData) + j) = to_le16((short)(( high/2 + low*4 )*0xFFF)); } sample.sampleData = sampleData; write_wav_sample(f,&sample); } free(sampleData); fclose(f); wav_header_t *readHeader = malloc(sizeof(wav_header_t)); if(readHeader==NULL) { printf("Something failed :(\n"); return 0; } FILE *f2 = fopen(file2,"rb"); read_wav_header(f2,readHeader); int samplePerChannel = readHeader->Data.Subchunk2Size / (readHeader->Fmt.NumChannels * (readHeader->Fmt.BytesPerSample)); printf("samplePerChannel = %d\n",samplePerChannel); fclose(f2); free(readHeader); return 0; }
int main(int argc, char **argv) { FILE *fp; char *fpname; int pos, i, j, bit, len; int header_found = 0; #ifdef CYGWIN _setmode(fileno(stdin), _O_BINARY); // _setmode(_fileno(stdin), _O_BINARY); setbuf(stdout, NULL); #endif fpname = argv[0]; ++argv; while ((*argv) && (!wavloaded)) { if ( (strcmp(*argv, "-h") == 0) || (strcmp(*argv, "--help") == 0) ) { fprintf(stderr, "%s [options] audio.wav\n", fpname); fprintf(stderr, " options:\n"); fprintf(stderr, " -v, --verbose\n"); fprintf(stderr, " -r, --raw\n"); fprintf(stderr, " -i, --invert\n"); return 0; } else if ( (strcmp(*argv, "-v") == 0) || (strcmp(*argv, "--verbose") == 0) ) { option_verbose = 1; } else if ( (strcmp(*argv, "-r") == 0) || (strcmp(*argv, "--raw") == 0) ) { option_raw = 1; } else if ( (strcmp(*argv, "-R") == 0) || (strcmp(*argv, "--RAW") == 0) ) { option_raw = 2; } else if ( (strcmp(*argv, "-i") == 0) || (strcmp(*argv, "--invert") == 0) ) { option_inv = 0x1; } else if ( (strcmp(*argv, "--auto") == 0) ) { option_auto = 1; } else { fp = fopen(*argv, "rb"); if (fp == NULL) { fprintf(stderr, "%s konnte nicht geoeffnet werden\n", *argv); return -1; } wavloaded = 1; } ++argv; } if (!wavloaded) fp = stdin; i = read_wav_header(fp); if (i) { fclose(fp); return -1; } gpx.sonde_id = -1; for (i = 0; i < 9; i++) { for (j = 0; j < 13; j++) dat_str[i][j] = ' '; } pos = FRAMESTART; while (!read_bits_fsk(fp, &bit, &len)) { if (len == 0) { // reset_frame(); if (pos > RAWBITFRAME_LEN-10) { // Problem wegen Interleaving print_frame();//byte_count header_found = 0; pos = FRAMESTART; } //inc_bufpos(); //buf[bufpos] = 'x'; continue; // ... } for (i = 0; i < len; i++) { inc_bufpos(); buf[bufpos] = 0x30 + bit; // Ascii if (!header_found) { header_found = compare2(); if (header_found < 0) option_inv ^= 0x1; } else { frame_rawbits[pos] = 0x30 + bit; // Ascii pos++; if (pos == RAWBITFRAME_LEN) { print_frame();//FRAME_LEN header_found = 0; pos = FRAMESTART; } } } } fclose(fp); return 0; }
int main(int argc, char **argv) { int nb_samples, total_samples=0, nb_encoded; int c; int option_index = 0; char *inFile, *outFile; FILE *fin, *fout; short input[MAX_FRAME_SIZE]; celt_int32_t frame_size; int quiet=0; int nbBytes; CELTMode *mode; void *st; unsigned char bits[MAX_FRAME_BYTES]; int with_skeleton = 0; struct option long_options[] = { {"bitrate", required_argument, NULL, 0}, {"comp", required_argument, NULL, 0}, {"skeleton",no_argument,NULL, 0}, {"help", no_argument, NULL, 0}, {"quiet", no_argument, NULL, 0}, {"le", no_argument, NULL, 0}, {"be", no_argument, NULL, 0}, {"8bit", no_argument, NULL, 0}, {"16bit", no_argument, NULL, 0}, {"mono", no_argument, NULL, 0}, {"stereo", no_argument, NULL, 0}, {"rate", required_argument, NULL, 0}, {"version", no_argument, NULL, 0}, {"version-short", no_argument, NULL, 0}, {"comment", required_argument, NULL, 0}, {"author", required_argument, NULL, 0}, {"title", required_argument, NULL, 0}, {0, 0, 0, 0} }; int print_bitrate=0; celt_int32_t rate=44100; celt_int32_t size; int chan=1; int fmt=16; int lsb=1; ogg_stream_state os; ogg_stream_state so; /* ogg stream for skeleton bitstream */ ogg_page og; ogg_packet op; int bytes_written=0, ret, result; int id=-1; CELT051Header header; char vendor_string[64]; char *comments; int comments_length; int close_in=0, close_out=0; int eos=0; celt_int32_t bitrate=-1; char first_bytes[12]; int wave_input=0; celt_int32_t lookahead = 0; int bytes_per_packet=48; int complexity=-127; snprintf(vendor_string, sizeof(vendor_string), "Encoded with CELT\n"); comment_init(&comments, &comments_length, vendor_string); /*Process command-line options*/ while(1) { c = getopt_long (argc, argv, "hvV", long_options, &option_index); if (c==-1) break; switch(c) { case 0: if (strcmp(long_options[option_index].name,"bitrate")==0) { bitrate = atoi (optarg); } else if (strcmp(long_options[option_index].name,"skeleton")==0) { with_skeleton=1; } else if (strcmp(long_options[option_index].name,"help")==0) { usage(); exit(0); } else if (strcmp(long_options[option_index].name,"quiet")==0) { quiet = 1; } else if (strcmp(long_options[option_index].name,"version")==0) { version(); exit(0); } else if (strcmp(long_options[option_index].name,"version-short")==0) { version_short(); exit(0); } else if (strcmp(long_options[option_index].name,"le")==0) { lsb=1; } else if (strcmp(long_options[option_index].name,"be")==0) { lsb=0; } else if (strcmp(long_options[option_index].name,"8bit")==0) { fmt=8; } else if (strcmp(long_options[option_index].name,"16bit")==0) { fmt=16; } else if (strcmp(long_options[option_index].name,"stereo")==0) { chan=2; } else if (strcmp(long_options[option_index].name,"mono")==0) { chan=1; } else if (strcmp(long_options[option_index].name,"rate")==0) { rate=atoi (optarg); } else if (strcmp(long_options[option_index].name,"comp")==0) { complexity=atoi (optarg); } else if (strcmp(long_options[option_index].name,"comment")==0) { if (!strchr(optarg, '=')) { fprintf (stderr, "Invalid comment: %s\n", optarg); fprintf (stderr, "Comments must be of the form name=value\n"); exit(1); } comment_add(&comments, &comments_length, NULL, optarg); } else if (strcmp(long_options[option_index].name,"author")==0) { comment_add(&comments, &comments_length, "author=", optarg); } else if (strcmp(long_options[option_index].name,"title")==0) { comment_add(&comments, &comments_length, "title=", optarg); } break; case 'h': usage(); exit(0); break; case 'v': version(); exit(0); break; case 'V': print_bitrate=1; break; case '?': usage(); exit(1); break; } } fprintf(stderr,"\nWARNING: This encoder is a CELT *PRERELEASE*. It produces streams that are\n" " not decodable by ANY OTHER VERSION. These streams will NOT be\n" " supported or decodable by any future CELT release.\n\n"); if (argc-optind!=2) { usage(); exit(1); } inFile=argv[optind]; outFile=argv[optind+1]; /*Initialize Ogg stream struct*/ srand(time(NULL)); if (ogg_stream_init(&os, rand())==-1) { fprintf(stderr,"Error: stream init failed\n"); exit(1); } if (with_skeleton && ogg_stream_init(&so, rand())==-1) { fprintf(stderr,"Error: stream init failed\n"); exit(1); } if (strcmp(inFile, "-")==0) { #if defined WIN32 || defined _WIN32 _setmode(_fileno(stdin), _O_BINARY); #elif defined OS2 _fsetmode(stdin,"b"); #endif fin=stdin; } else { fin = fopen(inFile, "rb"); if (!fin) { perror(inFile); exit(1); } close_in=1; } { fread(first_bytes, 1, 12, fin); if (strncmp(first_bytes,"RIFF",4)==0 && strncmp(first_bytes,"RIFF",4)==0) { if (read_wav_header(fin, &rate, &chan, &fmt, &size)==-1) exit(1); wave_input=1; lsb=1; /* CHECK: exists big-endian .wav ?? */ } } if (chan == 1) { if (bitrate < 0) bitrate = 64; if (bitrate < 32) bitrate = 32; if (bitrate > 110) bitrate = 110; } else if (chan == 2) { if (bitrate < 0) bitrate = 128; if (bitrate < 64) bitrate = 64; if (bitrate > 150) bitrate = 150; } else { fprintf (stderr, "Only mono and stereo are supported\n"); return 1; } mode = celt051_mode_create(rate, chan, 256, NULL); if (!mode) return 1; celt051_mode_info(mode, CELT_GET_FRAME_SIZE, &frame_size); bytes_per_packet = (bitrate*1000*frame_size/rate+4)/8; celt051_header_init(&header, mode); header.nb_channels = chan; { char *st_string="mono"; if (chan==2) st_string="stereo"; if (!quiet) fprintf (stderr, "Encoding %d Hz audio using %s (%d bytes per packet)\n", header.sample_rate, st_string, bytes_per_packet); } /*fprintf (stderr, "Encoding %d Hz audio at %d bps using %s mode\n", header.rate, mode->bitrate, mode->modeName);*/ /*Initialize CELT encoder*/ st = celt051_encoder_create(mode); if (complexity!=-127) { if (celt051_encoder_ctl(st, CELT_SET_COMPLEXITY(complexity)) != CELT_OK) { fprintf (stderr, "Only complexity 0 through 10 is supported\n"); return 1; } } if (strcmp(outFile,"-")==0) { #if defined WIN32 || defined _WIN32 _setmode(_fileno(stdout), _O_BINARY); #endif fout=stdout; } else { fout = fopen(outFile, "wb"); if (!fout) { perror(outFile); exit(1); } close_out=1; } if (with_skeleton) { fprintf (stderr, "Warning: Enabling skeleton output may cause some decoders to fail.\n"); } /* first packet should be the skeleton header. */ if (with_skeleton) { add_fishead_packet(&so); if ((ret = flush_ogg_stream_to_file(&so, fout))) { fprintf (stderr,"Error: failed skeleton (fishead) header to output stream\n"); exit(1); } else bytes_written += ret; } /*Write header*/ { unsigned char header_data[100]; int packet_size = celt051_header_to_packet(&header, header_data, 100); op.packet = header_data; op.bytes = packet_size; op.b_o_s = 1; op.e_o_s = 0; op.granulepos = 0; op.packetno = 0; ogg_stream_packetin(&os, &op); while((result = ogg_stream_flush(&os, &og))) { if(!result) break; ret = oe_write_page(&og, fout); if(ret != og.header_len + og.body_len) { fprintf (stderr,"Error: failed writing header to output stream\n"); exit(1); } else bytes_written += ret; } op.packet = (unsigned char *)comments; op.bytes = comments_length; op.b_o_s = 0; op.e_o_s = 0; op.granulepos = 0; op.packetno = 1; ogg_stream_packetin(&os, &op); } /* fisbone packet should be write after all bos pages */ if (with_skeleton) { add_fisbone_packet(&so, os.serialno, &header); if ((ret = flush_ogg_stream_to_file(&so, fout))) { fprintf (stderr,"Error: failed writing skeleton (fisbone )header to output stream\n"); exit(1); } else bytes_written += ret; } /* writing the rest of the celt header packets */ while((result = ogg_stream_flush(&os, &og))) { if(!result) break; ret = oe_write_page(&og, fout); if(ret != og.header_len + og.body_len) { fprintf (stderr,"Error: failed writing header to output stream\n"); exit(1); } else bytes_written += ret; } free(comments); /* write the skeleton eos packet */ if (with_skeleton) { add_eos_packet_to_stream(&so); if ((ret = flush_ogg_stream_to_file(&so, fout))) { fprintf (stderr,"Error: failed writing skeleton header to output stream\n"); exit(1); } else bytes_written += ret; } if (!wave_input) { nb_samples = read_samples(fin,frame_size,fmt,chan,lsb,input, first_bytes, NULL); } else { nb_samples = read_samples(fin,frame_size,fmt,chan,lsb,input, NULL, &size); } if (nb_samples==0) eos=1; total_samples += nb_samples; nb_encoded = -lookahead; /*Main encoding loop (one frame per iteration)*/ while (!eos || total_samples>nb_encoded) { id++; /*Encode current frame*/ nbBytes = celt051_encode(st, input, NULL, bits, bytes_per_packet); if (nbBytes<0) { fprintf(stderr, "Got error %d while encoding. Aborting.\n", nbBytes); break; } nb_encoded += frame_size; if (wave_input) { nb_samples = read_samples(fin,frame_size,fmt,chan,lsb,input, NULL, &size); } else { nb_samples = read_samples(fin,frame_size,fmt,chan,lsb,input, NULL, NULL); } if (nb_samples==0) { eos=1; } if (eos && total_samples<=nb_encoded) op.e_o_s = 1; else op.e_o_s = 0; total_samples += nb_samples; op.packet = (unsigned char *)bits; op.bytes = nbBytes; op.b_o_s = 0; /*Is this redundent?*/ if (eos && total_samples<=nb_encoded) op.e_o_s = 1; else op.e_o_s = 0; op.granulepos = (id+1)*frame_size-lookahead; if (op.granulepos>total_samples) op.granulepos = total_samples; /*printf ("granulepos: %d %d %d %d %d %d\n", (int)op.granulepos, id, nframes, lookahead, 5, 6);*/ op.packetno = 2+id; ogg_stream_packetin(&os, &op); /*Write all new pages (most likely 0 or 1)*/ while (ogg_stream_pageout(&os,&og)) { ret = oe_write_page(&og, fout); if(ret != og.header_len + og.body_len) { fprintf (stderr,"Error: failed writing header to output stream\n"); exit(1); } else bytes_written += ret; } } /*Flush all pages left to be written*/ while (ogg_stream_flush(&os, &og)) { ret = oe_write_page(&og, fout); if(ret != og.header_len + og.body_len) { fprintf (stderr,"Error: failed writing header to output stream\n"); exit(1); } else bytes_written += ret; } celt051_encoder_destroy(st); celt051_mode_destroy(mode); ogg_stream_clear(&os); if (close_in) fclose(fin); if (close_out) fclose(fout); return 0; }
int main(int argc, char *argv[]) { FILE *fp = NULL; char *fpname = NULL; char *bitbuf = NULL; int bit_count = 0, header_found = 0, frmlen = 0; int i, bit, len; int err = 0; setbuf(stdout, NULL); fpname = argv[0]; ++argv; while ((*argv) && (!wavloaded)) { if ( (strcmp(*argv, "-h") == 0) || (strcmp(*argv, "--help") == 0) ) { fprintf(stderr, "%s [options] audio.wav\n", fpname); fprintf(stderr, " options:\n"); fprintf(stderr, " -v, -vx, -vv (info, aux, info/conf)\n"); fprintf(stderr, " -r, --raw\n"); fprintf(stderr, " -i, --invert\n"); fprintf(stderr, " --crc (check CRC)\n"); fprintf(stderr, " --std (std framelen)\n"); return 0; } else if ( (strcmp(*argv, "-v") == 0) || (strcmp(*argv, "--verbose") == 0) ) { option_verbose |= 0x1; } else if (strcmp(*argv, "-vx") == 0) { option_verbose |= 0x2; } else if (strcmp(*argv, "-vv") == 0) { option_verbose |= 0x3; } else if (strcmp(*argv, "--crc") == 0) { option_crc = 1; } else if ( (strcmp(*argv, "-r") == 0) || (strcmp(*argv, "--raw") == 0) ) { option_raw = 1; } else if ( (strcmp(*argv, "-i") == 0) || (strcmp(*argv, "--invert") == 0) ) { option_inv = 1; } else if (strcmp(*argv, "--std" ) == 0) { frmlen = 320; } // NDATA_LEN else if (strcmp(*argv, "--std2") == 0) { frmlen = 518; } // FRAME_LEN else if (strcmp(*argv, "--sat") == 0) { option_sat = 1; option_verbose |= 0x100; } else { fp = fopen(*argv, "rb"); if (fp == NULL) { fprintf(stderr, "%s konnte nicht geoeffnet werden\n", *argv); return -1; } wavloaded = 1; } ++argv; } if (!wavloaded) fp = stdin; rs_data_t rs41data = {{0}}; rs_data_t *rs_data = &rs41data; rs_data->input = 8; err = init_rs41data(rs_data); if (err) goto error_tag; frame = rs_data->frame_bytes; if (frmlen == 0) frmlen = rs_data->frame_len; err = read_wav_header(fp, rs_data); if (err) goto error_tag; bitbuf = calloc(rs_data->bits, 1); if (bitbuf == NULL) { err = -1; goto error_tag; } rs_data->pos = rs_data->frame_start; while (!read_bits_fsk(fp, &bit, &len, option_inv)) { if (len == 0) { // reset_frame(); if (rs_data->pos > rs_data->pos_min) { print_frame(rs_data); bit_count = 0; rs_data->pos = rs_data->frame_start; header_found = 0; } //inc_bufpos(); //buf[bufpos] = 'x'; continue; // ... } for (i = 0; i < len; i++) { inc_bufpos(rs_data); rs_data->buf[rs_data->bufpos] = 0x30 + bit; // Ascii if (!header_found) { if (compare(rs_data) >= rs_data->header_len) header_found = 1; } else { if (rs_data->input < 8) { rs_data->frame_rawbits[rs_data->bits*rs_data->pos + bit_count] = 0x30 + bit; } bitbuf[bit_count] = bit; bit_count++; if (bit_count == rs_data->bits) { bit_count = 0; if (rs_data->input == 8) { frame[rs_data->pos] = rs_data->bits2byte(rs_data, bitbuf); } rs_data->pos++; if (rs_data->pos == frmlen) { print_frame(rs_data); rs_data->pos = rs_data->frame_start; header_found = 0; } } } } } free(bitbuf); bitbuf = NULL; error_tag: fclose(fp); free_rs41data(rs_data); return err; }
int main(int argc, char **argv) { FILE *fp; char *fpname; int i, len; int bitpos = 0, bit_ = 0, bit; char Bit = 0 /*,Bit0*/; float l = 0, l0 = 0, bitslen = 0; #ifdef CYGWIN _setmode(fileno(stdin), _O_BINARY); // _setmode(_fileno(stdin), _O_BINARY); setbuf(stdout, NULL); #endif fpname = argv[0]; ++argv; while ((*argv) && (!wavloaded)) { if ( (strcmp(*argv, "-h") == 0) || (strcmp(*argv, "--help") == 0) ) { fprintf(stderr, "%s [options] audio.wav\n", fpname); fprintf(stderr, " options:\n"); fprintf(stderr, " -r, --raw\n"); return 0; } /* else if ( (strcmp(*argv, "-v") == 0) || (strcmp(*argv, "--verbose") == 0) ) { option_verbose = 1; } */ else if ( (strcmp(*argv, "-r") == 0) || (strcmp(*argv, "--raw") == 0) ) { option_raw = 1; } else if ( (strcmp(*argv, "-i") == 0) || (strcmp(*argv, "--invert") == 0) ) { option_inv = 1; } else { fp = fopen(*argv, "rb"); if (fp == NULL) { fprintf(stderr, "%s konnte nicht geoeffnet werden\n", *argv); return -1; } wavloaded = 1; } ++argv; } if (!wavloaded) fp = stdin; i = read_wav_header(fp); if (i) { fclose(fp); return -1; } bitpos = 0; while (!read_bits(fp, &Bit, &l)) { if (l < 0.1) { bitslen = 0; continue; } if ((l0 < BIT01 && l < BIT01) || (l0 >= BIT01 && l >= BIT01)) { bitslen += l; } else { //fprintf(stderr, " %.1f\n", bitslen); if (Bit < 'a') bit = 0; else bit = 1; // gesucht ist Bit zuvor len = (int)(bitslen+0.5); if (len < SYNC) { for (i = 0; i < len/2; i++) { //printf("%d", bit); if (bitpos < BAUD+10) { bitframe[bitpos] = bit; } else { /* */ } bitpos++; } //printf(" %.1f=%d ", bitslen, len); } bitslen = l; } l0 = l; if (Bit < 'a') { bit_++; } else { if (bit_> SYNC) { if (bitpos < BAUD) print_frame((bitpos+7)/10); bitframe[0] = 1; bitpos = 1; //printf("\n1"); } bit_ = 0; } } printf("\n"); fclose(fp); return 0; }
/** * Play */ void *playback_alsa(struct bat *bat) { int err = 0; struct pcm_container sndpcm; fprintf(bat->log, _("Entering playback thread (ALSA).\n")); retval_play = 0; memset(&sndpcm, 0, sizeof(sndpcm)); if (bat->playback.device == NULL) { fprintf(bat->err, _("No PCM device for playback: exit\n")); retval_play = 1; goto exit1; } err = snd_pcm_open(&sndpcm.handle, bat->playback.device, SND_PCM_STREAM_PLAYBACK, 0); if (err != 0) { fprintf(bat->err, _("Cannot open PCM playback device: ")); fprintf(bat->err, _("%s(%d)\n"), snd_strerror(err), err); retval_play = 1; goto exit1; } err = set_snd_pcm_params(bat, &sndpcm); if (err != 0) { retval_play = 1; goto exit2; } if (bat->playback.file == NULL) { fprintf(bat->log, _("Playing generated audio sine wave")); bat->sinus_duration == 0 ? fprintf(bat->log, _(" endlessly\n")) : fprintf(bat->log, _("\n")); } else { fprintf(bat->log, _("Playing input audio file: %s\n"), bat->playback.file); bat->fp = fopen(bat->playback.file, "rb"); if (bat->fp == NULL) { fprintf(bat->err, _("Cannot open file for capture: ")); fprintf(bat->err, _("%s %d\n"), bat->playback.file, -errno); retval_play = 1; goto exit3; } /* Skip header */ err = read_wav_header(bat, bat->playback.file, bat->fp, true); if (err != 0) { retval_play = 1; goto exit4; } } err = write_to_pcm_loop(&sndpcm, bat); if (err != 0) { retval_play = 1; goto exit4; } exit4: if (bat->playback.file) fclose(bat->fp); exit3: free(sndpcm.buffer); exit2: snd_pcm_close(sndpcm.handle); exit1: pthread_exit(&retval_play); }
int main(int argc, char **argv) { int nb_samples, total_samples=0, nb_encoded; int c; int option_index = 0; char *inFile, *outFile; FILE *fin, *fout; short input[MAX_FRAME_SIZE]; spx_int32_t frame_size; int quiet=0; spx_int32_t vbr_enabled=0; spx_int32_t vbr_max=0; int abr_enabled=0; spx_int32_t vad_enabled=0; spx_int32_t dtx_enabled=0; int nbBytes; const SpeexMode *mode=NULL; int modeID = -1; void *st; SpeexBits bits; char cbits[MAX_FRAME_BYTES]; int with_skeleton = 0; struct option long_options[] = { {"wideband", no_argument, NULL, 0}, {"ultra-wideband", no_argument, NULL, 0}, {"narrowband", no_argument, NULL, 0}, {"vbr", no_argument, NULL, 0}, {"vbr-max-bitrate", required_argument, NULL, 0}, {"abr", required_argument, NULL, 0}, {"vad", no_argument, NULL, 0}, {"dtx", no_argument, NULL, 0}, {"quality", required_argument, NULL, 0}, {"bitrate", required_argument, NULL, 0}, {"nframes", required_argument, NULL, 0}, {"comp", required_argument, NULL, 0}, #ifdef USE_SPEEXDSP {"denoise", no_argument, NULL, 0}, {"agc", no_argument, NULL, 0}, #endif {"no-highpass", no_argument, NULL, 0}, {"skeleton",no_argument,NULL, 0}, {"help", no_argument, NULL, 0}, {"quiet", no_argument, NULL, 0}, {"le", no_argument, NULL, 0}, {"be", no_argument, NULL, 0}, {"8bit", no_argument, NULL, 0}, {"16bit", no_argument, NULL, 0}, {"stereo", no_argument, NULL, 0}, {"rate", required_argument, NULL, 0}, {"version", no_argument, NULL, 0}, {"version-short", no_argument, NULL, 0}, {"comment", required_argument, NULL, 0}, {"author", required_argument, NULL, 0}, {"title", required_argument, NULL, 0}, {"print-rate", no_argument, NULL, 0}, {0, 0, 0, 0} }; int print_bitrate=0; spx_int32_t rate=0; spx_int32_t size; int chan=1; int fmt=16; spx_int32_t quality=-1; float vbr_quality=-1; int lsb=1; ogg_stream_state os; ogg_stream_state so; /* ogg stream for skeleton bitstream */ ogg_page og; ogg_packet op; int bytes_written=0, ret, result; int id=-1; SpeexHeader header; int nframes=1; spx_int32_t complexity=3; const char* speex_version; char vendor_string[64]; char *comments; int comments_length; int close_in=0, close_out=0; int eos=0; spx_int32_t bitrate=0; double cumul_bits=0, enc_frames=0; char first_bytes[12]; int wave_input=0; spx_int32_t tmp; #ifdef USE_SPEEXDSP SpeexPreprocessState *preprocess = NULL; int denoise_enabled=0, agc_enabled=0; #endif int highpass_enabled=1; int output_rate=0; spx_int32_t lookahead = 0; speex_lib_ctl(SPEEX_LIB_GET_VERSION_STRING, (void*)&speex_version); snprintf(vendor_string, sizeof(vendor_string), "Encoded with Speex %s", speex_version); comment_init(&comments, &comments_length, vendor_string); /*Process command-line options*/ while(1) { c = getopt_long (argc, argv, "nwuhvV", long_options, &option_index); if (c==-1) break; switch(c) { case 0: if (strcmp(long_options[option_index].name,"narrowband")==0) { modeID = SPEEX_MODEID_NB; } else if (strcmp(long_options[option_index].name,"wideband")==0) { modeID = SPEEX_MODEID_WB; } else if (strcmp(long_options[option_index].name,"ultra-wideband")==0) { modeID = SPEEX_MODEID_UWB; } else if (strcmp(long_options[option_index].name,"vbr")==0) { vbr_enabled=1; } else if (strcmp(long_options[option_index].name,"vbr-max-bitrate")==0) { vbr_max=atoi(optarg); if (vbr_max<1) { fprintf (stderr, "Invalid VBR max bit-rate value: %d\n", vbr_max); exit(1); } } else if (strcmp(long_options[option_index].name,"abr")==0) { abr_enabled=atoi(optarg); if (!abr_enabled) { fprintf (stderr, "Invalid ABR value: %d\n", abr_enabled); exit(1); } } else if (strcmp(long_options[option_index].name,"vad")==0) { vad_enabled=1; } else if (strcmp(long_options[option_index].name,"dtx")==0) { dtx_enabled=1; } else if (strcmp(long_options[option_index].name,"quality")==0) { quality = atoi (optarg); vbr_quality=atof(optarg); } else if (strcmp(long_options[option_index].name,"bitrate")==0) { bitrate = atoi (optarg); } else if (strcmp(long_options[option_index].name,"nframes")==0) { nframes = atoi (optarg); if (nframes<1) nframes=1; if (nframes>10) nframes=10; } else if (strcmp(long_options[option_index].name,"comp")==0) { complexity = atoi (optarg); #ifdef USE_SPEEXDSP } else if (strcmp(long_options[option_index].name,"denoise")==0) { denoise_enabled=1; } else if (strcmp(long_options[option_index].name,"agc")==0) { agc_enabled=1; #endif } else if (strcmp(long_options[option_index].name,"no-highpass")==0) { highpass_enabled=0; } else if (strcmp(long_options[option_index].name,"skeleton")==0) { with_skeleton=1; } else if (strcmp(long_options[option_index].name,"help")==0) { usage(); exit(0); } else if (strcmp(long_options[option_index].name,"quiet")==0) { quiet = 1; } else if (strcmp(long_options[option_index].name,"version")==0) { version(); exit(0); } else if (strcmp(long_options[option_index].name,"version-short")==0) { version_short(); exit(0); } else if (strcmp(long_options[option_index].name,"print-rate")==0) { output_rate=1; } else if (strcmp(long_options[option_index].name,"le")==0) { lsb=1; } else if (strcmp(long_options[option_index].name,"be")==0) { lsb=0; } else if (strcmp(long_options[option_index].name,"8bit")==0) { fmt=8; } else if (strcmp(long_options[option_index].name,"16bit")==0) { fmt=16; } else if (strcmp(long_options[option_index].name,"stereo")==0) { chan=2; } else if (strcmp(long_options[option_index].name,"rate")==0) { rate=atoi (optarg); } else if (strcmp(long_options[option_index].name,"comment")==0) { if (!strchr(optarg, '=')) { fprintf (stderr, "Invalid comment: %s\n", optarg); fprintf (stderr, "Comments must be of the form name=value\n"); exit(1); } comment_add(&comments, &comments_length, NULL, optarg); } else if (strcmp(long_options[option_index].name,"author")==0) { comment_add(&comments, &comments_length, "author=", optarg); } else if (strcmp(long_options[option_index].name,"title")==0) { comment_add(&comments, &comments_length, "title=", optarg); } break; case 'n': modeID = SPEEX_MODEID_NB; break; case 'h': usage(); exit(0); break; case 'v': version(); exit(0); break; case 'V': print_bitrate=1; break; case 'w': modeID = SPEEX_MODEID_WB; break; case 'u': modeID = SPEEX_MODEID_UWB; break; case '?': usage(); exit(1); break; } } if (argc-optind!=2) { usage(); exit(1); } inFile=argv[optind]; outFile=argv[optind+1]; /*Initialize Ogg stream struct*/ srand(time(NULL)); if (ogg_stream_init(&os, rand())==-1) { fprintf(stderr,"Error: stream init failed\n"); exit(1); } if (with_skeleton && ogg_stream_init(&so, rand())==-1) { fprintf(stderr,"Error: stream init failed\n"); exit(1); } if (strcmp(inFile, "-")==0) { #if defined WIN32 || defined _WIN32 _setmode(_fileno(stdin), _O_BINARY); #elif defined OS2 _fsetmode(stdin,"b"); #endif fin=stdin; } else { fin = fopen(inFile, "rb"); if (!fin) { perror(inFile); exit(1); } close_in=1; } { if (fread(first_bytes, 1, 12, fin) != 12) { perror("short file"); exit(1); } if (strncmp(first_bytes,"RIFF",4)==0 || strncmp(first_bytes,"riff",4)==0) { if (read_wav_header(fin, &rate, &chan, &fmt, &size)==-1) exit(1); wave_input=1; lsb=1; /* CHECK: exists big-endian .wav ?? */ } } if (modeID==-1 && !rate) { /* By default, use narrowband/8 kHz */ modeID = SPEEX_MODEID_NB; rate=8000; } else if (modeID!=-1 && rate) { mode = speex_lib_get_mode (modeID); if (rate>48000) { fprintf (stderr, "Error: sampling rate too high: %d Hz, try down-sampling\n", rate); exit(1); } else if (rate>25000) { if (modeID != SPEEX_MODEID_UWB) { fprintf (stderr, "Warning: Trying to encode in %s at %d Hz. I'll do it but I suggest you try ultra-wideband instead\n", mode->modeName , rate); } } else if (rate>12500) { if (modeID != SPEEX_MODEID_WB) { fprintf (stderr, "Warning: Trying to encode in %s at %d Hz. I'll do it but I suggest you try wideband instead\n", mode->modeName , rate); } } else if (rate>=6000) { if (modeID != SPEEX_MODEID_NB) { fprintf (stderr, "Warning: Trying to encode in %s at %d Hz. I'll do it but I suggest you try narrowband instead\n", mode->modeName , rate); } } else { fprintf (stderr, "Error: sampling rate too low: %d Hz\n", rate); exit(1); } } else if (modeID==-1) { if (rate>48000) { fprintf (stderr, "Error: sampling rate too high: %d Hz, try down-sampling\n", rate); exit(1); } else if (rate>25000) { modeID = SPEEX_MODEID_UWB; } else if (rate>12500) { modeID = SPEEX_MODEID_WB; } else if (rate>=6000) { modeID = SPEEX_MODEID_NB; } else { fprintf (stderr, "Error: Sampling rate too low: %d Hz\n", rate); exit(1); } } else if (!rate) { if (modeID == SPEEX_MODEID_NB) rate=8000; else if (modeID == SPEEX_MODEID_WB) rate=16000; else if (modeID == SPEEX_MODEID_UWB) rate=32000; } if (!quiet) if (rate!=8000 && rate!=16000 && rate!=32000) fprintf (stderr, "Warning: Speex is only optimized for 8, 16 and 32 kHz. It will still work at %d Hz but your mileage may vary\n", rate); if (!mode) mode = speex_lib_get_mode (modeID); speex_init_header(&header, rate, 1, mode); header.frames_per_packet=nframes; header.vbr=vbr_enabled; header.nb_channels = chan; { char *st_string="mono"; if (chan==2) st_string="stereo"; if (!quiet) fprintf (stderr, "Encoding %d Hz audio using %s mode (%s)\n", header.rate, mode->modeName, st_string); } /*fprintf (stderr, "Encoding %d Hz audio at %d bps using %s mode\n", header.rate, mode->bitrate, mode->modeName);*/ /*Initialize Speex encoder*/ st = speex_encoder_init(mode); if (strcmp(outFile,"-")==0) { #if defined WIN32 || defined _WIN32 _setmode(_fileno(stdout), _O_BINARY); #endif fout=stdout; } else { fout = fopen(outFile, "wb"); if (!fout) { perror(outFile); exit(1); } close_out=1; } speex_encoder_ctl(st, SPEEX_GET_FRAME_SIZE, &frame_size); speex_encoder_ctl(st, SPEEX_SET_COMPLEXITY, &complexity); speex_encoder_ctl(st, SPEEX_SET_SAMPLING_RATE, &rate); if (quality >= 0) { if (vbr_enabled) { if (vbr_max>0) speex_encoder_ctl(st, SPEEX_SET_VBR_MAX_BITRATE, &vbr_max); speex_encoder_ctl(st, SPEEX_SET_VBR_QUALITY, &vbr_quality); } else speex_encoder_ctl(st, SPEEX_SET_QUALITY, &quality); } if (bitrate) { if (quality >= 0 && vbr_enabled) fprintf (stderr, "Warning: --bitrate option is overriding --quality\n"); speex_encoder_ctl(st, SPEEX_SET_BITRATE, &bitrate); } if (vbr_enabled) { tmp=1; speex_encoder_ctl(st, SPEEX_SET_VBR, &tmp); } else if (vad_enabled) { tmp=1; speex_encoder_ctl(st, SPEEX_SET_VAD, &tmp); } if (dtx_enabled) speex_encoder_ctl(st, SPEEX_SET_DTX, &tmp); if (dtx_enabled && !(vbr_enabled || abr_enabled || vad_enabled)) { fprintf (stderr, "Warning: --dtx is useless without --vad, --vbr or --abr\n"); } else if ((vbr_enabled || abr_enabled) && (vad_enabled)) { fprintf (stderr, "Warning: --vad is already implied by --vbr or --abr\n"); } if (with_skeleton) { fprintf (stderr, "Warning: Enabling skeleton output may cause some decoders to fail.\n"); } if (abr_enabled) { speex_encoder_ctl(st, SPEEX_SET_ABR, &abr_enabled); } speex_encoder_ctl(st, SPEEX_SET_HIGHPASS, &highpass_enabled); speex_encoder_ctl(st, SPEEX_GET_LOOKAHEAD, &lookahead); #ifdef USE_SPEEXDSP if (denoise_enabled || agc_enabled) { preprocess = speex_preprocess_state_init(frame_size, rate); speex_preprocess_ctl(preprocess, SPEEX_PREPROCESS_SET_DENOISE, &denoise_enabled); speex_preprocess_ctl(preprocess, SPEEX_PREPROCESS_SET_AGC, &agc_enabled); lookahead += frame_size; } #endif /* first packet should be the skeleton header. */ if (with_skeleton) { add_fishead_packet(&so); if ((ret = flush_ogg_stream_to_file(&so, fout))) { fprintf (stderr,"Error: failed skeleton (fishead) header to output stream\n"); exit(1); } else bytes_written += ret; } /*Write header*/ { int packet_size; op.packet = (unsigned char *)speex_header_to_packet(&header, &packet_size); op.bytes = packet_size; op.b_o_s = 1; op.e_o_s = 0; op.granulepos = 0; op.packetno = 0; ogg_stream_packetin(&os, &op); free(op.packet); while((result = ogg_stream_flush(&os, &og))) { if(!result) break; ret = oe_write_page(&og, fout); if(ret != og.header_len + og.body_len) { fprintf (stderr,"Error: failed writing header to output stream\n"); exit(1); } else bytes_written += ret; } op.packet = (unsigned char *)comments; op.bytes = comments_length; op.b_o_s = 0; op.e_o_s = 0; op.granulepos = 0; op.packetno = 1; ogg_stream_packetin(&os, &op); } /* fisbone packet should be write after all bos pages */ if (with_skeleton) { add_fisbone_packet(&so, os.serialno, &header); if ((ret = flush_ogg_stream_to_file(&so, fout))) { fprintf (stderr,"Error: failed writing skeleton (fisbone )header to output stream\n"); exit(1); } else bytes_written += ret; } /* writing the rest of the speex header packets */ while((result = ogg_stream_flush(&os, &og))) { if(!result) break; ret = oe_write_page(&og, fout); if(ret != og.header_len + og.body_len) { fprintf (stderr,"Error: failed writing header to output stream\n"); exit(1); } else bytes_written += ret; } free(comments); /* write the skeleton eos packet */ if (with_skeleton) { add_eos_packet_to_stream(&so); if ((ret = flush_ogg_stream_to_file(&so, fout))) { fprintf (stderr,"Error: failed writing skeleton header to output stream\n"); exit(1); } else bytes_written += ret; } speex_bits_init(&bits); if (!wave_input) { nb_samples = read_samples(fin,frame_size,fmt,chan,lsb,input, first_bytes, NULL); } else { nb_samples = read_samples(fin,frame_size,fmt,chan,lsb,input, NULL, &size); } if (nb_samples==0) eos=1; total_samples += nb_samples; nb_encoded = -lookahead; /*Main encoding loop (one frame per iteration)*/ while (!eos || total_samples>nb_encoded) { id++; /*Encode current frame*/ if (chan==2) speex_encode_stereo_int(input, frame_size, &bits); #ifdef USE_SPEEXDSP if (preprocess) speex_preprocess(preprocess, input, NULL); #endif speex_encode_int(st, input, &bits); nb_encoded += frame_size; if (print_bitrate) { int tmp; char ch=13; speex_encoder_ctl(st, SPEEX_GET_BITRATE, &tmp); fputc (ch, stderr); cumul_bits += tmp; enc_frames += 1; if (!quiet) { if (vad_enabled || vbr_enabled || abr_enabled) fprintf (stderr, "Bitrate is use: %d bps (average %d bps) ", tmp, (int)(cumul_bits/enc_frames)); else fprintf (stderr, "Bitrate is use: %d bps ", tmp); if (output_rate) printf ("%d\n", tmp); } } if (wave_input) { nb_samples = read_samples(fin,frame_size,fmt,chan,lsb,input, NULL, &size); } else { nb_samples = read_samples(fin,frame_size,fmt,chan,lsb,input, NULL, NULL); } if (nb_samples==0) { eos=1; } if (eos && total_samples<=nb_encoded) op.e_o_s = 1; else op.e_o_s = 0; total_samples += nb_samples; if ((id+1)%nframes!=0) continue; speex_bits_insert_terminator(&bits); nbBytes = speex_bits_write(&bits, cbits, MAX_FRAME_BYTES); speex_bits_reset(&bits); op.packet = (unsigned char *)cbits; op.bytes = nbBytes; op.b_o_s = 0; /*Is this redundent?*/ if (eos && total_samples<=nb_encoded) op.e_o_s = 1; else op.e_o_s = 0; op.granulepos = (id+1)*frame_size-lookahead; if (op.granulepos>total_samples) op.granulepos = total_samples; /*printf ("granulepos: %d %d %d %d %d %d\n", (int)op.granulepos, id, nframes, lookahead, 5, 6);*/ op.packetno = 2+id/nframes; ogg_stream_packetin(&os, &op); /*Write all new pages (most likely 0 or 1)*/ while (ogg_stream_pageout(&os,&og)) { ret = oe_write_page(&og, fout); if(ret != og.header_len + og.body_len) { fprintf (stderr,"Error: failed writing header to output stream\n"); exit(1); } else bytes_written += ret; } } if ((id+1)%nframes!=0) { while ((id+1)%nframes!=0) { id++; speex_bits_pack(&bits, 15, 5); } nbBytes = speex_bits_write(&bits, cbits, MAX_FRAME_BYTES); op.packet = (unsigned char *)cbits; op.bytes = nbBytes; op.b_o_s = 0; op.e_o_s = 1; op.granulepos = (id+1)*frame_size-lookahead; if (op.granulepos>total_samples) op.granulepos = total_samples; op.packetno = 2+id/nframes; ogg_stream_packetin(&os, &op); } /*Flush all pages left to be written*/ while (ogg_stream_flush(&os, &og)) { ret = oe_write_page(&og, fout); if(ret != og.header_len + og.body_len) { fprintf (stderr,"Error: failed writing header to output stream\n"); exit(1); } else bytes_written += ret; } speex_encoder_destroy(st); speex_bits_destroy(&bits); ogg_stream_clear(&os); if (close_in) fclose(fin); if (close_out) fclose(fout); return 0; }
int main(int argc, char **argv) { FILE *fp; char *fpname; int i, j; int bit_count = 0, header_found = 0, bit, len; int counter; ui32_t val; ui32_t dat2; int lat, lat1, lat2, lon, lon1, lon2, alt, alt1, alt2; int latdeg,londeg; double latmin, lonmin; ui32_t t1, t2, ms, min, std, tt, mm, jj; #ifdef CYGWIN _setmode(fileno(stdin), _O_BINARY); // _setmode(_fileno(stdin), _O_BINARY); #endif setbuf(stdout, NULL); fpname = argv[0]; ++argv; while ((*argv) && (!wavloaded)) { if ( (strcmp(*argv, "-h") == 0) || (strcmp(*argv, "--help") == 0) ) { help_out: fprintf(stderr, "%s <-n> [options] audio.wav\n", fpname); fprintf(stderr, " n=1,2\n"); fprintf(stderr, " options:\n"); //fprintf(stderr, " -v, --verbose\n"); fprintf(stderr, " -r, --raw\n"); return 0; } else if ( (strcmp(*argv, "-r") == 0) || (strcmp(*argv, "--raw") == 0) ) { option_raw = 1; } else if (strcmp(*argv, "--res") == 0) { option_res = 1; } else if ( (strcmp(*argv, "-i") == 0) || (strcmp(*argv, "--invert") == 0) ) { option_inv = 1; // nicht noetig } else if ( (strcmp(*argv, "-2") == 0) ) { option2 = 1; } else if ( (strcmp(*argv, "-1") == 0) ) { option1 = 1; } else if (strcmp(*argv, "--ecc") == 0) { option_ecc = 1; } else if ( (strcmp(*argv, "-v") == 0) ) { option_verbose = 1; } else { if ((option1 == 1 && option2 == 1) || (!option_raw && option1 == 0 && option2 == 0)) goto help_out; fp = fopen(*argv, "rb"); if (fp == NULL) { fprintf(stderr, "%s konnte nicht geoeffnet werden\n", *argv); return -1; } wavloaded = 1; } ++argv; } if (!wavloaded) fp = stdin; i = read_wav_header(fp); if (i) { fclose(fp); return -1; } if (option_ecc) { rs_init_BCH64(); } bufpos = 0; bit_count = 0; while (!read_bits_fsk(fp, &bit, &len)) { if (len == 0) { // reset_frame(); /* if (byte_count > FRAME_LEN-20) { print_frame(byte_count); bit_count = 0; byte_count = FRAMESTART; header_found = 0; } */ //inc_bufpos(); //buf[bufpos] = 'x'; continue; // ... } for (i = 0; i < len; i++) { inc_bufpos(); buf[bufpos] = 0x30 + bit; // Ascii if (!header_found) { header_found = compare_subheader(); if (header_found) { bit_count = 0; for (j = 0; j < HEADLEN; j++) { if (header_found % 2 == 1) frame_bits[j] = header0x049DCEbits[j] - 0x30; else frame_bits[j] = header0xFB6230bits[j] - 0x30; } } } else { frame_rawbits[bit_count] = 0x30 + bit; bit_count++; if (bit_count >= RAWBITFRAME_LEN/4-RAWHEADLEN) { // 600-48 frame_rawbits[bit_count] = '\0'; biphi_s(frame_rawbits, frame_bits+HEADLEN); if (option_ecc) { for (block = 0; block < 6; block++) { // prepare block-codeword for (j = 0; j < 46; j++) cw[45-j] = frame_bits[HEADLEN + block*46+j]; for (j = 46; j < 63; j++) cw[j] = 0; errors = rs_decode_bch_gf2t2(cw, err_pos, err_val); // check parity,padding if (errors >= 0) { check_err = 0; for (i = 46; i < 63; i++) { if (cw[i] != 0) check_err = 0x1; } par = 1; for (i = 13; i < 13+16; i++) par ^= cw[i]; if (cw[12] != par) check_err |= 0x100; par = 1; for (i = 30; i < 30+16; i++) par ^= cw[i]; if (cw[29] != par) check_err |= 0x10; if (check_err) errors = -3; } if (errors >= 0) { for (j = 0; j < 46; j++) frame_bits[HEADLEN + block*46+j] = cw[45-j]; } if (errors < 0) block_err[block] = 0xE; else block_err[block] = errors; } } if (!option2 && !option_raw) { if (header_found % 2 == 1) { val = bits2val(frame_bits+HEADLEN, 16); counter = val & 0xFFFF; if (counter % 2 == 0) printf("\n"); //printf("[0x%04X = %d] ", counter, counter); printf("[%d] ", counter); if (counter % 2 == 1) { t2 = bits2val(frame_bits+HEADLEN+5*46 , 8); // LSB t1 = bits2val(frame_bits+HEADLEN+5*46+8, 8); ms = (t1 << 8) | t2; std = bits2val(frame_bits+HEADLEN+5*46+17, 8); min = bits2val(frame_bits+HEADLEN+5*46+25, 8); printf(" "); printf("%02d:%02d:%06.3f ", std, min, (double)ms/1000.0); printf(" "); //printf("\n"); } } if (header_found % 2 == 0) { val = bits2val(frame_bits+HEADLEN, 16); //printf("%04x ", val & 0xFFFF); if ((counter % 2 == 0)) { // (val & 0xFFFF) > 0) {// == 0x8080 //offset=24+16+1; lat1 = bits2val(frame_bits+HEADLEN+17, 16); lat2 = bits2val(frame_bits+HEADLEN+46, 16); lon1 = bits2val(frame_bits+HEADLEN+46+17, 16); lon2 = bits2val(frame_bits+HEADLEN+46+46, 16); alt1 = bits2val(frame_bits+HEADLEN+46+46+17, 16); alt2 = bits2val(frame_bits+HEADLEN+46+46+46, 16); lat = (lat1 << 16) | lat2; lon = (lon1 << 16) | lon2; alt = (alt1 << 16) | alt2; //printf("%08X %08X %08X : ", lat, lon, alt); printf(" "); printf("%.6f %.6f %.2f", (double)lat/1e7, (double)lon/1e7, (double)alt/1e2); printf(" "); jj = bits2val(frame_bits+HEADLEN+5*46+ 8, 8) + 0x0700; mm = bits2val(frame_bits+HEADLEN+5*46+17, 8); tt = bits2val(frame_bits+HEADLEN+5*46+25, 8); printf(" "); printf("%4d-%02d-%02d ", jj, mm, tt); printf(" "); //printf("\n"); } } } else if (option2 && !option_raw) { if (header_found % 2 == 1) { val = bits2val(frame_bits+HEADLEN, 16); counter = val & 0xFFFF; if (counter % 2 == 0) printf("\n"); //printf("[0x%04X = %d] ", counter, counter); printf("[%d] ", counter); if (counter % 2 == 0) { t1 = bits2val(frame_bits+HEADLEN+5*46 , 8); // MSB t2 = bits2val(frame_bits+HEADLEN+5*46+8, 8); ms = (t1 << 8) | t2; std = bits2val(frame_bits+HEADLEN+5*46+17, 8); min = bits2val(frame_bits+HEADLEN+5*46+25, 8); printf(" "); printf("%02d:%02d:%06.3f ", std, min, (double)ms/1000.0); printf(" "); } } if (header_found % 2 == 0) { val = bits2val(frame_bits+HEADLEN, 16); //printf("%04x ", val & 0xFFFF); if ((counter % 2 == 0)) { // (val & 0xFFFF) > 0) {// == 0x2390 //offset=24+16+1; dat2 = bits2val(frame_bits+HEADLEN, 16); printf("%05u (?%02d-%02d-%02d) ", dat2, dat2/1000,(dat2/10)%100, (dat2%10)+10); lat1 = bits2val(frame_bits+HEADLEN+17, 16); lat2 = bits2val(frame_bits+HEADLEN+46, 16); lon1 = bits2val(frame_bits+HEADLEN+46+17, 16); lon2 = bits2val(frame_bits+HEADLEN+46+46, 16); alt1 = bits2val(frame_bits+HEADLEN+46+46+17, 16); alt2 = bits2val(frame_bits+HEADLEN+46+46+46, 8); lat = (lat1 << 16) | lat2; lon = (lon1 << 16) | lon2; alt = (alt1 << 8) | alt2; latdeg = (int)lat / 1e6; latmin = (double)(lat/1e6-latdeg)*100/60.0; londeg = (int)lon / 1e6; lonmin = (double)(lon/1e6-londeg)*100/60.0; //printf("%08X %08X %08X : ", lat, lon, alt); printf(" "); printf("%.6f %.6f %.2f", (double)latdeg+latmin, (double)londeg+lonmin, (double)alt/1e2); printf(" "); } //else { printf("\n"); } } } else { // raw val = bits2val(frame_bits, HEADLEN); printf("%06X ", val & 0xFFFFFF); printf(" "); for (i = 0; i < 6; i++) { val = bits2val(frame_bits+HEADLEN+46*i , 16); printf("%04X ", val & 0xFFFF); val = bits2val(frame_bits+HEADLEN+46*i+17, 16); printf("%04X ", val & 0xFFFF); val = bits2val(frame_bits+HEADLEN+46*i+34, 12); //printf("%03X ", val & 0xFFF); //printf(" "); } printf("\n"); } bit_count = 0; header_found = 0; if (option_ecc && option_verbose) { printf("#"); for (block = 0; block < 6; block++) printf("%X", block_err[block]); printf("# "); } } } } } printf("\n"); fclose(fp); return 0; }
int main(int argc, char **argv) { FILE *fp; char *fpname; char *lathome; char *lonhome; int pos, i, j, bit, len; int header_found = 0; #ifdef CYGWIN _setmode(fileno(stdin), _O_BINARY); // _setmode(_fileno(stdin), _O_BINARY); setbuf(stdout, NULL); #endif fpname = argv[0]; // 53.045390 8.893852 lathome = argv[3]; lonhome = argv[4]; /////////////////// MINI WEBSERVER BY http://blog.manula.org/2011/05/writing-simple-web-server-in-c.html int create_socket, new_socket; socklen_t addrlen; int bufsize = 1024; char *buffer = malloc(bufsize); struct sockaddr_in address; ////////////////////// ++argv; while ((*argv) && (!wavloaded)) { if ( (strcmp(*argv, "-h") == 0) || (strcmp(*argv, "--help") == 0) ) { fprintf(stderr, "%s [options] audio.wav\n", fpname); fprintf(stderr, " options:\n"); fprintf(stderr, " -v, --verbose\n"); fprintf(stderr, " -r, --raw\n"); fprintf(stderr, " -i, --invert\n"); return 0; } else if ( (strcmp(*argv, "-v") == 0) || (strcmp(*argv, "--verbose") == 0) ) { option_verbose = 1; } else if ( (strcmp(*argv, "-r") == 0) || (strcmp(*argv, "--raw") == 0) ) { option_raw = 1; } else if ( (strcmp(*argv, "-R") == 0) || (strcmp(*argv, "--RAW") == 0) ) { option_raw = 2; } else if ( (strcmp(*argv, "-i") == 0) || (strcmp(*argv, "--invert") == 0) ) { option_inv = 0x1; } else if ( (strcmp(*argv, "--auto") == 0) ) { option_auto = 1; } else { fp = fopen(*argv, "rb"); if (fp == NULL) { fprintf(stderr, "%s konnte nicht geoeffnet werden\n", *argv); return -1; } wavloaded = 1; } ++argv; } if (!wavloaded) fp = stdin; /////////////////// MINI WEBSERVER BY http://blog.manula.org/2011/05/writing-simple-web-server-in-c.html if ((create_socket = socket(AF_INET, SOCK_STREAM, 0)) > 0){ printf("The socket was created\n"); } address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(8081); if (bind(create_socket, (struct sockaddr *) &address, sizeof(address)) == 0){ printf("Binding Socket\n"); } if (listen(create_socket, 10) < 0) { perror("server: listen"); exit(1); } if ((new_socket = accept(create_socket, (struct sockaddr *) &address, &addrlen)) < 0) { perror("server: accept"); exit(1); } if (new_socket > 0){ printf("Connected to client\n"); } ////////////////////// i = read_wav_header(fp); if (i) { fclose(fp); close(new_socket); close(create_socket); return -1; } gpx.sonde_id = -1; for (i = 0; i < 9; i++) { for (j = 0; j < 13; j++) dat_str[i][j] = ' '; } pos = FRAMESTART; while (!read_bits_fsk(fp, &bit, &len)) { if (len == 0) { // reset_frame(); if (pos > RAWBITFRAME_LEN-10) { // Problem wegen Interleaving /////////////////// MINI WEBSERVER BY http://blog.manula.org/2011/05/writing-simple-web-server-in-c.html write(new_socket, "hello world\n", 12); ////////////////////// print_frame();//byte_count header_found = 0; pos = FRAMESTART; } //inc_bufpos(); //buf[bufpos] = 'x'; continue; // ... } for (i = 0; i < len; i++) { inc_bufpos(); buf[bufpos] = 0x30 + bit; // Ascii if (!header_found) { header_found = compare2(); if (header_found < 0) option_inv ^= 0x1; } else { frame_rawbits[pos] = 0x30 + bit; // Ascii pos++; if (pos == RAWBITFRAME_LEN) { print_frame();//FRAME_LEN header_found = 0; pos = FRAMESTART; } } } } fclose(fp); close(new_socket); close(create_socket); return 0; }