📄 musicin.c
字号:
}
break;
case 'c': info->copyright = 1; break;
case 'o': info->original = 1; break;
case 'e': info->error_protection = TRUE; break;
case 'x': info->matrix = *mat_mode = atoi(arg);
if (info->matrix == 3)
*cha_sw = 0;
argUsed = 1;
break;
case 'k': *cha_sw = atoi(arg);
argUsed = 1;
break;
case 'y': *dyn_cr = atoi(arg);
argUsed = 1;
break;
#ifdef Augmentation_7ch
case 'X': info->aug_mtx_proc = *aug_mat_mode = atoi(arg);
if (info->aug_mtx_proc == 3)
*aug_cha_sw = 0;
argUsed = 1;
break;
case 'K': *aug_cha_sw = atoi(arg);
argUsed = 1;
break;
case 'Y': *aug_dyn_cr = atoi(arg);
argUsed = 1;
break;
#endif
case 'D': *dyn_cr_LR = 1;
break;
case 'L': info->lfe = 1;
break;
case 'w': fr_ps->phantom_c = 1;
break;
case 'P': info->mc_prediction_on = 1;
break;
case 'g': ml_present = 1;
break;
case 'n': info->n_ad_bytes = atoi(arg);
argUsed = 1;
break;
case 'a': *ancillaryUse = 1;
break;
case 'v': *verbosity = atoi(arg);
argUsed = 1;
break;
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 (original_file_name[0] == NULL_CHAR)
strcpy (original_file_name, argv[i]);
else if (encoded_file_name[0] == NULL_CHAR)
strcpy (encoded_file_name, argv[i]);
else
{
fprintf (stderr, "%s: excess arg %s\n", programName, argv[i]);
err = 1;
}
}
}
if ((info->bitrate_index = BitrateIndex (info->lay, brate)) < 0)
err = 1;
if (err || original_file_name[0] == NULL_CHAR)
usage (); /* never returns */
if (encoded_file_name[0] == NULL_CHAR)
{
strcat (strcpy (encoded_file_name_ext, original_file_name), DFLT_EXT_EXT);
strcat (strcpy (encoded_file_name, original_file_name), DFLT_EXT);
strcat (strcpy (encoded_file_name_mpg, encoded_file_name), DFLT_EXT);
}
else
{
strcat (strcpy (encoded_file_name_ext, encoded_file_name), DFLT_EXT_EXT);
strcat (encoded_file_name, DFLT_EXT);
strcat (strcpy (encoded_file_name_mpg, encoded_file_name), DFLT_EXT);
}
if ((musicin = fopen (original_file_name, "rb")) == NULL)
{
printf ("Could not find \"%s\".\n", original_file_name);
exit (0);
}
open_bit_stream_w (&bs, encoded_file_name, BUFFER_SIZE);
if (aiff_read_headers (musicin, pcm_aiff_data, byte_per_sample) == 0)
{
int wrong_nr_channels = 0;
*aiff = 1;
if (*verbosity >= 2)
printf (">>> Using Audio IFF sound file headers\n");
aiff_check (original_file_name, pcm_aiff_data);
if (fr_ps->config)
{
/* check if config and number of channels is consistent */
switch (fr_ps->config)
{
case 100: wrong_nr_channels = pcm_aiff_data->numChannels != 1;
info->mode = MPG_MD_MONO;
info->mode_ext = 0;
break;
case 200: wrong_nr_channels = pcm_aiff_data->numChannels - info->lfe != 2;
fr_ps->lfe_pos = 2;
break;
case 102: wrong_nr_channels = pcm_aiff_data->numChannels - info->lfe != 3;
info->mode = MPG_MD_MONO;
info->mode_ext = 0;
info->surround = 3;
fr_ps->stereomc = 2;
fr_ps->lfe_pos = 1;
break;
case 202: wrong_nr_channels = pcm_aiff_data->numChannels - info->lfe != 4;
info->surround = 3;
fr_ps->stereomc = 2;
fr_ps->lfe_pos = 2;
break;
case 210: wrong_nr_channels = pcm_aiff_data->numChannels - info->lfe != 3;
info->surround = 1;
fr_ps->stereomc = 1;
fr_ps->lfe_pos = 2;
break;
case 220: wrong_nr_channels = pcm_aiff_data->numChannels - info->lfe != 4;
info->surround = 2;
fr_ps->stereomc = 2;
fr_ps->lfe_pos = 2;
break;
case 302: wrong_nr_channels = pcm_aiff_data->numChannels - info->lfe != 5;
info->center = 1;
info->surround = 3;
fr_ps->stereomc = 3;
break;
case 310: wrong_nr_channels = pcm_aiff_data->numChannels - info->lfe != 4;
info->center = 1;
info->surround = 1;
fr_ps->stereomc = 2;
fr_ps->lfe_pos = 3;
break;
case 320: wrong_nr_channels = pcm_aiff_data->numChannels - info->lfe != 5;
info->center = 1;
info->surround = 2;
fr_ps->stereomc = 3;
fr_ps->lfe_pos = 3;
break;
#ifdef Augmentation_7ch
case 520: wrong_nr_channels = pcm_aiff_data->numChannels - info->lfe != 7;
if (ml_present)
{
printf ("7.1 channel augmentation and multilingual cannot be combined\n");
exit (1);
}
fr_ps->config = 320;
info->center = 1;
info->surround = 2;
fr_ps->stereomc = 3;
fr_ps->stereoaug = 2;
fr_ps->lfe_pos = 3;
break;
#endif
default: printf ("Configuration: %d not supported\n", fr_ps->config);
exit (1);
}
}
else
{
if (pcm_aiff_data->numChannels == 1)
{
fr_ps->config = 100;
info->mode = MPG_MD_MONO;
info->mode_ext = 0;
}
else
{
switch (pcm_aiff_data->numChannels - info->lfe)
{
case 2: fr_ps->config = 200;
fr_ps->lfe_pos = 2;
break;
case 3: fr_ps->config = 210;
info->surround = 1;
fr_ps->stereomc = 1;
fr_ps->lfe_pos = 2;
break;
case 4: fr_ps->config = 310;
info->center = 1;
info->surround = 1;
fr_ps->stereomc = 2;
fr_ps->lfe_pos = 3;
break;
case 5: fr_ps->config = 320;
info->center = 1;
info->surround = 2;
fr_ps->stereomc = 3;
fr_ps->lfe_pos = 3;
break;
#ifdef Augmentation_7ch
case 7: fr_ps->config = 320;
info->center = 1;
info->surround = 2;
fr_ps->stereomc = 3;
fr_ps->stereoaug = 2;
fr_ps->lfe_pos = 3;
break;
#endif
default: wrong_nr_channels = 1;
}
}
}
if (wrong_nr_channels)
{
printf ("Configuration: %d lfe: %d do not match with audio channels: %d\n",
fr_ps->config, info->lfe, pcm_aiff_data->numChannels);
exit (1);
}
switch (fr_ps->config)
{
case 100: printf (">>> Using 1/0 configuration.\n");
break;
case 200: printf (">>> Using 2/0 configuration.\n");
break;
case 102: printf (">>> Using 1/0 + 2/0 configuration.\n");
break;
case 202: printf (">>> Using 2/0 + 2/0 configuration.\n");
break;
case 210: printf (">>> Using 2/1 configuration.\n");
break;
case 220: printf (">>> Using 2/2 configuration.\n");
break;
case 302: printf (">>> Using 3/0 + 2/0 configuration.\n");
break;
case 310: printf (">>> Using 3/1 configuration.\n");
break;
case 320: if (fr_ps->stereoaug == 0)
printf (">>> Using 3/2 configuration.\n");
#ifdef Augmentation_7ch
else
printf (">>> Using 5/2 configuration.\n");
#endif
break;
}
info->sampling_frequency = SmpFrqIndex ((long) pcm_aiff_data->sampleRate);
if (*verbosity >= 2)
printf (">>> %.f Hz sampling frequency selected\n",
pcm_aiff_data->sampleRate);
/* Determine number of samples in sound file */
#ifndef MS_DOS
*num_samples = pcm_aiff_data->numChannels *
pcm_aiff_data->numSampleFrames;
#else
*num_samples = (long) (pcm_aiff_data->numChannels) *
(long) (pcm_aiff_data->numSampleFrames);
#endif
if (*cha_sw > 0)
{
if (fr_ps->config == 320)
bool = *cha_sw > 7;
else if (fr_ps->config == 310 && info->matrix == 2)
bool = *cha_sw > 5;
else if (fr_ps->config == 310)
bool = *cha_sw > 4;
else if (fr_ps->config == 220)
bool = *cha_sw > 3;
else if (fr_ps->config == 300 || fr_ps->config == 302 || fr_ps->config == 210)
bool = *cha_sw > 2;
else
bool = 1;
if (bool)
{
printf ("!!! Channel-switching mode %d cannot be used together with Configuration: %d !!!\n", *cha_sw, fr_ps->config);
exit (1);
}
}
#ifdef Augmentation_7ch
if (*aug_cha_sw > 0)
{
if (info->aug_mtx_proc == 0 || info->aug_mtx_proc == -1)
bool = *aug_cha_sw > 7;
else if (info->aug_mtx_proc == 1)
bool = *aug_cha_sw > 3;
else
bool = 1;
if (bool)
{
printf ("!!! TCA7 mode %d cannot be used together with aug_mtx_proc: %d !!!\n",
*aug_cha_sw, info->aug_mtx_proc);
exit (1);
}
}
#endif
if (*dyn_cr > 0)
{
if (fr_ps->config == 320)
bool = *dyn_cr > 14;
else if (fr_ps->config == 310 || fr_ps->config == 220)
bool = *dyn_cr > 4;
else if (fr_ps->config == 300 || fr_ps->config == 302 || fr_ps->config == 210)
bool = *dyn_cr > 1;
else
bool = 1;
if (bool)
{
printf ("!!! Dynamic Crosstalk mode %d cannot be used for Configuration: %d !!!\n", *dyn_cr, fr_ps->config);
exit (1);
}
if (!bool && fr_ps->phantom_c)
{
if (fr_ps->config == 320)
bool = ((*dyn_cr==9) || (*dyn_cr==10) || (*dyn_cr==11) || (*dyn_cr==12) || (*dyn_cr==14));
else if (fr_ps->config == 310)
bool = (*dyn_cr==4);
if (bool)
{
printf ("!!! Dynamic Crosstalk mode %d cannot be used together with Phantom Coding for Configuration: %d!!!\n", *dyn_cr, fr_ps->config);
exit (1);
}
}
}
#ifdef Augmentation_7ch
if (*aug_dyn_cr > 18)
{
printf ("!!! Aug Dynamic Crosstalk mode %d cannot be used !!!\n", *aug_dyn_cr);
exit (1);
}
#endif
}
else
{
/* Not using Audio IFF sound file headers. */
if (*verbosity >= 2)
printf(" NO MULTICHANNEL CODING!!\n");
ml_present = 0;
if (fseek (musicin, 0, SEEK_SET) != 0)
{
printf ("Could not seek to PCM sound data in \"%s\".\n", original_file_name);
exit (0);
}
/* Declare sound file to have "infinite" number of samples. */
*num_samples = MAX_U_32_NUM;
}
/***************************************************************************/
/* 7/8/95 Multi lingual extension WtK */
if (ml_present)
{
strcat (strcpy (multilingual_file_name, original_file_name), DFLT_ML_EXT);
if ((musicin_ml = fopen (multilingual_file_name, "rb")) == NULL)
{
printf ("Could not find \"%s\".\nNo MultiLingual Coding\n", multilingual_file_name);
info->multiling_ch = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -