📄 musicin.c
字号:
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; } else if (aiff_read_headers (musicin_ml, pcm_aiff_data_ml, byte_per_sample) == 0) { if (*verbosity >= 2) printf (">>> Using Audio IFF multilingual file headers\n"); info->multiling_ch = pcm_aiff_data_ml->numChannels; if (*verbosity >= 2) printf (">>> Using %d multilingual channels\n", info->multiling_ch); *num_samples_ml = pcm_aiff_data_ml->numChannels * pcm_aiff_data_ml->numSampleFrames; } else /* Not using Audio IFF sound file headers. */ { printf("***WARNING: Could not read ML AIFF header - No MultiLingual coding!!\n"); info->multiling_ch = 0; } if (info->multiling_ch > 0) { switch (SmpFrqIndex ((long) pcm_aiff_data_ml->sampleRate) - info->sampling_frequency) { case 16 : if (*verbosity >= 2) printf ("MultiLingual is LSF coded.\n"); info->multiling_fs = 1; break; case 0 : if (*verbosity >= 2) printf ("MultiLingual sample rate equals that of Audio.\n"); info->multiling_fs = 0; break; default : printf ("***WARNING: MultiLingual sample rate unequals (half) mc sample rate.\n"); printf (" No MultiLingual coding!!!\n"); info->multiling_ch = 0; break; } /*switch*/ } /*if (ml_ch>0)*/ } else { info->multiling_ch = 0; } /* if (ml_present) */ /* 7/8/95 Multi lingual extension WtK */ /***************************************************************************/}/************************************************************************/*/* print_config/*/* PURPOSE: Prints the encoding parameters used/*/************************************************************************/ voidprint_config (frame_params *fr_ps, int *psy, long unsigned int *num_samples, char *inPath, char *outPath, int *aiff){ layer *info = fr_ps->header; printf ("Encoding configuration:\n"); if (*aiff == 1) printf ("Layer=%s mode=%s extn=%d psy model=%d\n", layer_names[info->lay-1], mode_names[info->mode], info->mode_ext, *psy); else printf ("Layer=%s mode=%s extn=%d psy model=%d\n",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -