📄 parse.c
字号:
else if (strcmp(token, "highpass")==0) {
argUsed=1;
gfp->highpassfreq = (( 1000.0 * atof( nextArg ) ) + 0.5);
if (gfp->highpassfreq < 1) {
fprintf(stderr,"Must specify highpass with --highpass freq, freq >= 0.001 kHz\n");
exit(1);
}
}
else if (strcmp(token, "highpass-width")==0) {
argUsed=1;
gfp->highpasswidth = (( 1000.0 * atof( nextArg ) ) + 0.5);
if (gfp->highpasswidth < 0) {
fprintf(stderr,"Must specify highpass width with --highpass-width freq, freq >= 0 kHz\n");
exit(1);
}
}
else if (strcmp(token, "cwlimit")==0) {
argUsed=1;
gfp->cwlimit = atof( nextArg );
if (gfp->cwlimit <= 0 ) {
fprintf(stderr,"Must specify cwlimit in kHz\n");
exit(1);
}
} /* some more GNU-ish options could be added
* version => complete name, version and license info (normal exit)
* quiet/silent => no messages on screen
* brief => few messages on screen (name, status report)
* verbose => all infos to screen (brhist, internal flags/filters)
* o/output file => specifies output filename
* O => stdout
* i/input file => specifies input filename
* I => stdin
*/
else if (strcmp(token, "help") ==0
||strcmp(token, "usage")==0){
lame_help(gfp,programName); /* doesn't return */
}
else if (strcmp(token, "preset")==0) {
argUsed=1;
if (strcmp(nextArg,"phone")==0)
{ /* when making changes, please update help text too */
gfp->brate = 16;
gfp->highpassfreq=260;
gfp->highpasswidth=40;
gfp->lowpassfreq=3700;
gfp->lowpasswidth=300;
gfp->VBR_q=5;
gfp->VBR_min_bitrate_kbps=8;
gfp->VBR_max_bitrate_kbps=56;
gfp->no_short_blocks=1;
gfp->out_samplerate = 16000;
gfp->mode = MPG_MD_MONO;
gfp->mode_fixed = 1;
gfp->quality = 5;
}
else if (strcmp(nextArg,"voice")==0)
{ /* when making changes, please update help text too */
gfp->brate = 56;
gfp->highpassfreq=100;
gfp->highpasswidth=20;
gfp->lowpasswidth=2000;
gfp->lowpassfreq=11000;
gfp->VBR_q=4;
gfp->VBR_min_bitrate_kbps=8;
gfp->VBR_max_bitrate_kbps=96;
gfp->no_short_blocks=1;
gfp->mode = MPG_MD_MONO;
gfp->mode_fixed = 1;
gfp->out_samplerate = 24000;
gfp->quality = 5;
}
else if (strcmp(nextArg,"fm")==0)
{ /* when making changes, please update help text too */
gfp->brate = 96;
gfp->highpassfreq=30;
gfp->highpasswidth=0;
gfp->lowpassfreq=15000;
gfp->lowpasswidth=0;
gfp->VBR_q=4;
gfp->VBR_min_bitrate_kbps=32;
gfp->VBR_max_bitrate_kbps=192;
gfp->mode = MPG_MD_JOINT_STEREO;
gfp->mode_fixed = 1;
/*gfp->out_samplerate = 32000; */ /* determined automatically based on bitrate & sample freq. */
gfp->quality = 5;
}
else if (strcmp(nextArg,"tape")==0)
{ /* when making changes, please update help text too */
gfp->brate = 128;
gfp->highpassfreq=15;
gfp->highpasswidth=15;
gfp->lowpassfreq=17000;
gfp->lowpasswidth=2000;
gfp->VBR_q=4;
gfp->VBR_min_bitrate_kbps=32;
gfp->VBR_max_bitrate_kbps=192;
gfp->mode = MPG_MD_JOINT_STEREO;
gfp->mode_fixed = 1;
gfp->quality = 5;
}
else if (strcmp(nextArg,"hifi")==0)
{ /* when making changes, please update help text too */
gfp->brate = 160;
gfp->highpassfreq=15;
gfp->highpasswidth=15;
gfp->lowpassfreq=20000;
gfp->lowpasswidth=3000;
gfp->VBR_q=3;
gfp->VBR_min_bitrate_kbps=32;
gfp->VBR_max_bitrate_kbps=224;
gfp->mode = MPG_MD_JOINT_STEREO;
gfp->mode_fixed = 1;
gfp->quality = 2;
}
else if (strcmp(nextArg,"cd")==0)
{ /* when making changes, please update help text too */
gfp->brate = 192;
gfp->lowpassfreq=-1;
gfp->highpassfreq=-1;
gfp->VBR_q=2;
gfp->VBR_min_bitrate_kbps=80;
gfp->VBR_max_bitrate_kbps=256;
gfp->mode = MPG_MD_STEREO;
gfp->mode_fixed = 1;
gfp->quality = 2;
}
else if (strcmp(nextArg,"studio")==0)
{ /* when making changes, please update help text too */
gfp->brate = 256;
gfp->lowpassfreq=-1;
gfp->highpassfreq=-1;
gfp->VBR_q=0;
gfp->VBR_min_bitrate_kbps=112;
gfp->VBR_max_bitrate_kbps=320;
gfp->mode = MPG_MD_STEREO;
gfp->mode_fixed = 1;
gfp->quality = 2; /* should be 0, but does not work now */
}
else if (strcmp(nextArg,"help")==0)
{
lame_presets_info(gfp,programName); /* doesn't return */
}
else
{
fprintf(stderr,"%s: --preset type, type must be phone, voice, fm, tape, hifi, cd or studio, not %s\n",
programName, nextArg);
exit(1);
}
} /* --preset */
else
{
fprintf(stderr,"%s: unrec option --%s\n",
programName, token);
}
i += argUsed;
} else while( (c = *token++) ) {
if(*token ) arg = token;
else arg = nextArg;
switch(c) {
case 'm': argUsed = 1; gfp->mode_fixed = 1;
if (*arg == 's')
{ gfp->mode = MPG_MD_STEREO; }
else if (*arg == 'd')
{ gfp->mode = MPG_MD_DUAL_CHANNEL; }
else if (*arg == 'j')
{ gfp->mode = MPG_MD_JOINT_STEREO; }
else if (*arg == 'f')
{ gfp->mode = MPG_MD_JOINT_STEREO; gfp->force_ms=1; }
else if (*arg == 'm')
{ gfp->mode = MPG_MD_MONO; }
else {
fprintf(stderr,"%s: -m mode must be s/d/j/f/m not %s\n",
programName, arg);
err = 1;
}
break;
case 'V': argUsed = 1; gfp->VBR = 1;
gfp->VBR_q = atoi(arg);
if (gfp->VBR_q <0) gfp->VBR_q=0;
if (gfp->VBR_q >9) gfp->VBR_q=9;
break;
case 'q': argUsed = 1;
user_quality = atoi(arg);
if (user_quality<0) user_quality=0;
if (user_quality>9) user_quality=9;
break;
case 's':
argUsed = 1;
srate = atof( arg );
/* samplerate = rint( 1000.0 * srate ); $A */
gfp->in_samplerate = (( 1000.0 * srate ) + 0.5);
break;
case 'b':
argUsed = 1;
gfp->brate = atoi(arg);
gfp->VBR_min_bitrate_kbps=gfp->brate;
break;
case 'B':
argUsed = 1;
gfp->VBR_max_bitrate_kbps=atoi(arg);
break;
case 't': /* dont write VBR tag */
gfp->bWriteVbrTag=0;
break;
case 'r': /* force raw pcm input file */
#ifdef LIBSNDFILE
fprintf(stderr,"WARNING: libsndfile may ignore -r and perform fseek's on the input.\n");
fprintf(stderr,"Compile without libsndfile if this is a problem.\n");
#endif
gfp->input_format=sf_raw;
break;
case 'x': /* force byte swapping */
gfp->swapbytes=TRUE;
break;
case 'p': /* (jo) error_protection: add crc16 information to stream */
gfp->error_protection = 1;
break;
case 'a': /* autoconvert input file from stereo to mono - for mono mp3 encoding */
autoconvert=1;
gfp->mode=MPG_MD_MONO;
gfp->mode_fixed=1;
break;
case 'h':
gfp->quality = 2;
break;
case 'k':
gfp->lowpassfreq=-1;
gfp->highpassfreq=-1;
break;
case 'd':
gfp->allow_diff_short = 1;
break;
case 'v':
gfp->VBR = 1;
break;
case 'S':
gfp->silent = TRUE;
break;
case 'X': argUsed = 1; gfp->experimentalX = 0;
if (*arg == '0')
{ gfp->experimentalX=0; }
else if (*arg == '1')
{ gfp->experimentalX=1; }
else if (*arg == '2')
{ gfp->experimentalX=2; }
else if (*arg == '3')
{ gfp->experimentalX=3; }
else if (*arg == '4')
{ gfp->experimentalX=4; }
else if (*arg == '5')
{ gfp->experimentalX=5; }
else if (*arg == '6')
{ gfp->experimentalX=6; }
else {
fprintf(stderr,"%s: -X n must be 0-6, not %s\n",
programName, arg);
err = 1;
}
break;
case 'Y':
gfp->experimentalY = TRUE;
break;
case 'Z':
gfp->experimentalZ = TRUE;
break;
case 'f':
gfp->quality= 9;
break;
case 'g': /* turn on gtk analysis */
#ifdef HAVEGTK
gfp->gtkflag = TRUE;
#else
fprintf(stderr,"LAME not compiled with GTK support, -g not supported.\n",
programName, arg);
#endif
break;
case 'e': argUsed = 1;
if (*arg == 'n') gfp->emphasis = 0;
else if (*arg == '5') gfp->emphasis = 1;
else if (*arg == 'c') gfp->emphasis = 3;
else {
fprintf(stderr,"%s: -e emp must be n/5/c not %s\n",
programName, arg);
err = 1;
}
break;
case 'c': gfp->copyright = 1; break;
case 'o': gfp->original = 0; break;
case '?': lame_help(gfp,programName); /* doesn't return */
default: fprintf(stderr,"%s: unrec option %c\n",
programName, c);
err = 1; break;
}
if(argUsed) {
if(arg == token) token = ""; /* no more from token */
else ++i; /* skip arg we used */
arg = ""; argUsed = 0;
}
}
} else {
if(inPath[0] == '\0') strncpy(inPath, argv[i], MAX_NAME_SIZE);
else if(outPath[0] == '\0') strncpy(outPath, argv[i], MAX_NAME_SIZE);
else {
fprintf(stderr,"%s: excess arg %s\n", programName, argv[i]);
err = 1;
}
}
} /* loop over args */
if(err || inPath[0] == '\0') lame_usage(gfp,programName); /* never returns */
if (inPath[0]=='-') gfp->silent=1; /* turn off status - it's broken for stdin */
if(outPath[0] == '\0') {
if (inPath[0]=='-') {
/* if input is stdin, default output is stdout */
strcpy(outPath,"-");
}else {
strncpy(outPath, inPath, MAX_NAME_SIZE - 4);
strncat(outPath, ".mp3", 4 );
}
}
/* some file options not allowed with stdout */
if (outPath[0]=='-') {
gfp->bWriteVbrTag=0; /* turn off VBR tag */
if (id3tag.used) {
id3tag.used=0; /* turn of id3 tagging */
fprintf(stderr,"id3tag ignored: id3 tagging not supported for stdout.\n");
}
}
/* if user did not explicitly specify input is mp3, check file name */
if (gfp->input_format != sf_mp3)
if (!(strcmp((char *) &inPath[strlen(inPath)-4],".mp3")))
gfp->input_format = sf_mp3;
#if !(defined HAVEMPGLIB || defined AMIGA_MPEGA)
if (gfp->input_format == sf_mp3) {
fprintf(stderr,"Error: libmp3lame not compiled with mp3 *decoding* support \n");
exit(1);
}
#endif
/* default guess for number of channels */
if (autoconvert) gfp->num_channels=2;
else if (gfp->mode == MPG_MD_MONO) gfp->num_channels=1;
else gfp->num_channels=2;
/* user specified a quality value. override any defaults set above */
if (user_quality) gfp->quality=user_quality;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -