⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 musicin.c

📁 MPEG 2的音频编码软件。喜欢多媒体的开发人员可以看看。
💻 C
📖 第 1 页 / 共 5 页
字号:
				}
				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 + -