X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=gentones.c;h=a712f1a8d576d53f0c925cc7dc183d24ee135404;hp=bf91e2637628fbc5184f315532d964d19e375761;hb=79bd731c0db3e3202cfeed2af3fb217ae744b70f;hpb=de8f81a69bac7db90856ddb639c4bfa62fa80150 diff --git a/gentones.c b/gentones.c index bf91e26..a712f1a 100644 --- a/gentones.c +++ b/gentones.c @@ -10,7 +10,7 @@ /* ulaw -> signed 16-bit */ -static short isdn_audio_ulaw_to_s16[] = +static unsigned short isdn_audio_ulaw_to_s16[] = { 0x8284, 0x8684, 0x8a84, 0x8e84, 0x9284, 0x9684, 0x9a84, 0x9e84, 0xa284, 0xa684, 0xaa84, 0xae84, 0xb284, 0xb684, 0xba84, 0xbe84, @@ -47,7 +47,7 @@ static short isdn_audio_ulaw_to_s16[] = }; /* alaw -> signed 16-bit */ -static short isdn_audio_alaw_to_s16[] = +static unsigned short isdn_audio_alaw_to_s16[] = { 0x13fc, 0xec04, 0x0144, 0xfebc, 0x517c, 0xae84, 0x051c, 0xfae4, 0x0a3c, 0xf5c4, 0x0048, 0xffb8, 0x287c, 0xd784, 0x028c, 0xfd74, @@ -86,21 +86,19 @@ static short isdn_audio_alaw_to_s16[] = unsigned char encode_isdn(short sample, char law) { - int best=-1; + int best = -1; int i,diff; - int best_diff; + int best_diff = 9999; i=0; - while(i<256) - { - diff = (law=='u')?isdn_audio_ulaw_to_s16[i]:isdn_audio_alaw_to_s16[i]-sample; + while(i<256) { + diff = (law=='u')?((signed short)isdn_audio_ulaw_to_s16[i]):((signed short)isdn_audio_alaw_to_s16[i])-sample; //printf("s16=%d sample%d diff=%d\n",isdn_audio_to_s16[i],sample,diff); if (diff<0) diff=0-diff; //printf("diff=%d\n",diff); - if (diff 0) - { - if (size>0 && size<8) - { + while(size > 0) { + if (size>0 && size<8) { fclose(wfp); fprintf(stderr, "Error: Remaining file size %d not large enough for next chunk.\n",size); return; } - fread(buffer,8,1,wfp); + ret=fread(buffer,8,1,wfp); chunk=(buffer[4]) + (buffer[5]<<8) + (buffer[6]<<16) + (buffer[7]<<24); //printf("DEBUG: size(%d) - (8+chunk(%d) = size(%d)\n", size, chunk, size-chunk-8); size -= (8+chunk); - if (size < 0) - { + if (size < 0) { fclose(wfp); fprintf(stderr, "Error: Chunk '%c%c%c%c' is larger than remainig file size (length=%d)\n",buffer[0],buffer[1],buffer[2],buffer[3], chunk); return; } // printf("%c%c%c%c lenght=%d\n",buffer[0],buffer[1],buffer[2],buffer[3],chunk); - if (!strncmp((char *)buffer, "fmt ", 4)) - { - if (chunk != 16) - { + if (!strncmp((char *)buffer, "fmt ", 4)) { + if (chunk != 16) { fclose(wfp); fprintf(stderr, "Error: Fmt chunk illegal size.\n"); return; } - fread(buffer, chunk, 1, wfp); + ret=fread(buffer, chunk, 1, wfp); fmt = (struct fmt *)buffer; - if (fmt->channels<1 || fmt->channels>2) - { + if (fmt->channels<1 || fmt->channels>2) { fclose(wfp); fprintf(stderr, "Error: Only support one or two channels file.\n"); return; } channels = fmt->channels; printf("Channels: %d\n", channels); - if (fmt->sample_rate != 8000) - { + if (fmt->sample_rate != 8000) { fprintf(stderr, "Warning: File has sample rate of %d.\n", fmt->sample_rate); } printf("Sample Rate: %d\n", fmt->sample_rate); - if (fmt->bits_sample!=8 && fmt->bits_sample!=16) - { + if (fmt->bits_sample!=8 && fmt->bits_sample!=16) { fclose(wfp); fprintf(stderr, "Error: File has neigher 8 nor 16 bit samples.\n"); return; @@ -225,31 +212,25 @@ void write_wav(FILE *fp, char *wav, char law) printf("Bit-Resolution: %d\n", bytes*16-16); gotfmt = 1; } else - if (!strncmp((char *)buffer, "data", 4)) - { - if (!gotfmt) - { + if (!strncmp((char *)buffer, "data", 4)) { + if (!gotfmt) { fclose(wfp); fprintf(stderr, "Error: No fmt chunk fount in file.\n"); return; } printf("Length: %d samples (%d.%03d seconds)\n", chunk/bytes/channels, chunk/bytes/channels/8000, ((chunk/bytes/channels)%8000)*1000/8000); i=0; - if (bytes==2 && channels==1) - { - while(i (signed int)sizeof(buffer)) - { - fread(buffer, sizeof(buffer), 1, wfp); + while(chunk > (signed int)sizeof(buffer)) { + ret=fread(buffer, sizeof(buffer), 1, wfp); chunk -= sizeof(buffer); } if (chunk) - fread(buffer, chunk, 1, wfp); + ret=fread(buffer, chunk, 1, wfp); } } fclose(wfp); - if (!gotdata) - { + if (!gotdata) { fprintf(stderr, "Error: No data chunk fount in file.\n"); return; } @@ -306,8 +280,7 @@ int main(int argc, char *argv[]) { FILE *fp; - if (argc <= 1) - { + if (argc <= 1) { usage: printf("Usage:\n"); printf("%s wave2alaw \n", argv[0]); @@ -320,56 +293,44 @@ int main(int argc, char *argv[]) return(0); } - if (!strcmp(argv[1], "wave2alaw")) - { + if (!strcmp(argv[1], "wave2alaw")) { if (argc <= 3) goto usage; - if ((fp=fopen(argv[3],"w"))) - { + if ((fp=fopen(argv[3],"w"))) { write_wav(fp,argv[2],'a'); fclose(fp); - } else - { + } else { printf("Cannot open isdn file %s\n",argv[3]); } } else - if (!strcmp(argv[1], "wave2ulaw")) - { + if (!strcmp(argv[1], "wave2ulaw")) { if (argc <= 3) goto usage; - if ((fp=fopen(argv[3],"w"))) - { + if ((fp=fopen(argv[3],"w"))) { write_wav(fp,argv[2],'u'); fclose(fp); - } else - { + } else { printf("Cannot open isdn file %s\n",argv[3]); } } else - if (!strcmp(argv[1], "tone2alaw")) - { + if (!strcmp(argv[1], "tone2alaw")) { if (argc <= 7) goto usage; - if ((fp=fopen(argv[7],"a"))) - { + if ((fp=fopen(argv[7],"a"))) { write_tone(fp,strtod(argv[2],NULL),strtod(argv[3],NULL),atoi(argv[4]),atoi(argv[5]),atoi(argv[6]),'a'); fclose(fp); - } else - { + } else { printf("Cannot open isdn file %s\n",argv[7]); } } else - if (!strcmp(argv[1], "tone2ulaw")) - { + if (!strcmp(argv[1], "tone2ulaw")) { if (argc <= 7) goto usage; - if ((fp=fopen(argv[7],"a"))) - { + if ((fp=fopen(argv[7],"a"))) { write_tone(fp,atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]),atoi(argv[6]),'u'); fclose(fp); - } else - { + } else { printf("Cannot open isdn file %s\n",argv[7]); } } else