1708 /* DACONV converts CDDA data to various other formats */ #include #include #include #include #include int *buffer,*buf2; char *buf3; int mode,us; FILE* infp; FILE* outfp; #define SIGNED 1 #define UNSIGNED 0 main(int argc, char *argv[]) { if(argc > 3) { buffer = malloc(32768); /* Holds 25 Raw sectors of 2352 bytes */ if(! (infp = fopen(argv[1],"rb")) ) { printf("Can't find %s!\n",argv[1]); exit(1); } outfp = fopen(argv[2],"wb"); mode = atoi(argv[3]); us = SIGNED; if(argc > 4) { if (argv[4][0] == '/') { if(strupr(argv[4])[1] == 'U') us = UNSIGNED; } else { printf("Unrecognized parameter! Aborting...\n"); delay(1000); exit(1); } } switch (mode) { case 1 : us16_44k_st();break; case 2 : us16_44k_mo();break; case 3 : us8_22k_st();break; case 4 : us8_44k_mo();break; case 5 : us8_22k_mo();break; case 6 : us8_11k_mo();break; } fclose(infp); fclose(outfp); free(buffer); free(buf2); free(buf3); } else { printf("DACONV converts Signed 16 bit 44 KHz CDDA audio data\n"); printf("Usage: daconv [/u]\n\n"); printf("If /u is given, the data is also made unsigned\n\n"); printf("modes: 1 = 16 bit 44 KHz stereo\n"); printf(" 2 = 16 bit 44 KHz mono\n"); printf(" 3 = 8 bit 22 KHz stereo\n"); printf(" 4 = 8 bit 44 KHz mono\n"); printf(" 5 = 8 bit 22 KHz mono\n"); printf(" 6 = 8 bit 11 KHz mono\n"); } } us16_44k_st() { unsigned int numread,i; if(us == SIGNED) printf("No conversion made (the data is already signed 16 bit 44 Khz).\n"); else { do{ numread = fread(buffer,1,32768,infp); for(i=0;i < (numread/2);i++) buffer[i] ^= 0x8000; fwrite(buffer,2,numread/2,outfp); } while(numread == 32768); } } us16_44k_mo() { unsigned int numread,i,j; buf2 = malloc(16384); if(us == SIGNED) { do{ numread = fread(buffer,1,32768,infp); j = 0; for(i=0;i < (numread/2);i+=2) { buffer[i] /= 2; buffer[i+1] /= 2; buffer[i] += buffer[i+1]; buf2[j++] = buffer[i]; } fwrite(buf2,2,numread/4,outfp); } while(numread == 32768); } else { do{ numread = fread(buffer,1,32768,infp); j = 0; for(i=0;i < (numread/2);i+=2) { buffer[i] /= 2; buffer[i+1] /= 2; buffer[i] += buffer[i+1]; buffer[i] ^= 0x8000; buf2[j++] = buffer[i]; } fwrite(buf2,2,numread/4,outfp); } while(numread == 32768); } } us8_22k_st() { unsigned int numread,i,j; buf3 =malloc(8192); if(us == SIGNED) { do{ numread = fread(buffer,1,32768,infp); j = 0; for(i=0;i < (numread/2);i+=4) { buffer[i] >>= 8; /* 16 bit -> 8 bit */ buffer[i+1] >>= 8; buf3[j++] = (unsigned char)buffer[i]; buf3[j++] = (unsigned char)buffer[i+1]; } fwrite(buf3,1,numread/4,outfp); } while(numread == 32768); } else { do{ numread = fread(buffer,1,32768,infp); j = 0; for(i=0;i < (numread/2);i+=4) { buffer[i] ^= 0x8000; /* Signed -> unsigned */ buffer[i+1] ^= 0x8000; buffer[i] >>= 8; /* 16 bit -> 8 bit */ buffer[i+1] >>= 8; buf3[j++] = (unsigned char)buffer[i]; buf3[j++] = (unsigned char)buffer[i+1]; } fwrite(buf3,1,numread/4,outfp); } while(numread == 32768); } } us8_44k_mo() { unsigned int numread,i,j; buf3 = malloc(8192); if(us == SIGNED) { do{ numread = fread(buffer,1,32768,infp); j = 0; for(i=0;i < (numread/2);i+=2) { buffer[i] /= 2; buffer[i+1] /= 2; buffer[i] += buffer[i+1]; buffer[i] >>= 8; buf3[j++] = (unsigned char)buffer[i]; } fwrite(buf3,1,numread/4,outfp); } while(numread == 32768); } else { do{ numread = fread(buffer,1,32768,infp); j = 0; for(i=0;i < (numread/2);i+=2) { buffer[i] /= 2; buffer[i+1] /= 2; buffer[i] += buffer[i+1]; buffer[i] ^= 0x8000; buffer[i] >>= 8; buf3[j++] = (unsigned char)buffer[i]; } fwrite(buf3,1,numread/4,outfp); } while(numread == 32768); } } us8_22k_mo(int mode) { unsigned int numread,i,j; buf3 = malloc(4096); if(us == SIGNED) { do{ numread = fread(buffer,1,32768,infp); j = 0; for(i=0;i < (numread/2);i+=4) { buffer[i] /= 2; buffer[i+1] /= 2; buffer[i] += buffer[i+1]; buffer[i] >>= 8; buf3[j++] = (unsigned char)buffer[i]; } fwrite(buf3,1,numread/8,outfp); } while(numread == 32768); } else { do{ numread = fread(buffer,1,32768,infp); j = 0; for(i=0;i < (numread/2);i+=4) { buffer[i] /= 2; buffer[i+1] /= 2; buffer[i] += buffer[i+1]; buffer[i] ^= 0x8000; buffer[i] >>= 8; buf3[j++] = (unsigned char)buffer[i]; } fwrite(buf3,1,numread/8,outfp); } while(numread == 32768); } } us8_11k_mo(int mode) { unsigned int numread,i,j; buf3 = malloc(4096); if(us == SIGNED) { do{ numread = fread(buffer,1,32768,infp); j = 0; for(i=0;i < (numread/2);i+=8) { buffer[i] /= 2; buffer[i+1] /= 2; buffer[i] += buffer[i+1]; buffer[i] >>= 8; buf3[j++] = (unsigned char)buffer[i]; } fwrite(buf3,1,numread/16,outfp); } while(numread == 32768); } else { do{ numread = fread(buffer,1,32768,infp); j = 0; for(i=0;i < (numread/2);i+=8) { buffer[i] /= 2; buffer[i+1] /= 2; buffer[i] += buffer[i+1]; buffer[i] ^= 0x8000; buffer[i] >>= 8; buf3[j++] = (unsigned char)buffer[i]; } fwrite(buf3,1,numread/16,outfp); } while(numread == 32768); } } . 0