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

📄 musicout.c

📁 MPEG 2的音频编码软件。喜欢多媒体的开发人员可以看看。
💻 C
📖 第 1 页 / 共 4 页
字号:
/**********************************************************************
 * ISO MPEG Audio Subgroup Software Simulation Group (1996)
 * ISO 13818-3 MPEG-2 Audio Multichannel Decoder
 *
 * $Id: musicout.c 1.11 1996/04/18 05:37:23 rowlands Exp $
 *
 * $Log: musicout.c $
 * Revision 1.11  1996/04/18 05:37:23  rowlands
 * Release following Florence meeting
 *
 * Revision 1.10  1996/02/12 07:13:06  rowlands
 * Release following Munich meeting
 *
 * Revision 1.9.1.1  1996/01/20  17:28:45  rowlands
 * Received from Ralf Schwalbe (Telekom FTZ) - includes prediction
 *
 * Revision 1.7.1.3  1995/08/14  08:13:37  tenkate
 * ML-LSF added Warner ten Kate 7/8/95 (Philips)
 * debugging
 * change "alloc" and "sblimit" into "alloc_ml" and
 * "sblimit_ml" where appropriate.
 * adapt sample-loops to 6 or 12 depending on half or full ML rate.
 *
 * Revision 1.7.1.1  1995/07/14  06:12:46  rowlands
 * Updated dynamic crosstalk from FTZ: revision FTZ_03
 *
 * Revision 1.3.3.1  1995/06/16  08:00:46  rowlands
 * Input from Sang Wook Kim (Samsung AIT)
 *
 * Revision 1.3.1.1  1995/06/14  04:36:30  rowlands
 * Added support for dematrixing procedure 2.
 *
 **********************************************************************/

/**********************************************************************
 *   date   programmers                comment                        *
 * 2/25/91  Douglas Wong        start of version 1.0 records          *
 * 3/06/91  Douglas Wong        rename setup.h to dedef.h             *
 *                              removed extraneous variables          *
 *                              removed window_samples (now part of   *
 *                              filter_samples)                       *
 * 3/07/91  Davis Pan           changed output file to "codmusic"     *
 * 5/10/91  Vish (PRISM)        Ported to Macintosh and Unix.         *
 *                              Incorporated new "out_fifo()" which   *
 *                              writes out last incomplete buffer.    *
 *                              Incorporated all AIFF routines which  *
 *                              are also compatible with SUN.         *
 *                              Incorporated user interface for       *
 *                              specifying sound file names.          *
 *                              Also incorporated user interface for  *
 *                              writing AIFF compatible sound files.  *
 * 27jun91  dpwe (Aware)        Added musicout and &sample_frames as  *
 *                              args to out_fifo (were glob refs).    *
 *                              Used new 'frame_params' struct.       *
 *                              Clean,simplify, track clipped output  *
 *                              and total bits/frame received.        *
 * 7/10/91  Earle Jennings      changed to floats to FLOAT            *
 *10/ 1/91  S.I. Sudharsanan,   Ported to IBM AIX platform.           *
 *          Don H. Lee,                                               *
 *          Peter W. Farrett                                          *
 *10/ 3/91  Don H. Lee          implemented CRC-16 error protection   *
 *                              newly introduced functions are        *
 *                              buffer_CRC and recover_CRC_error      *
 *                              Additions and revisions are marked    *
 *                              with "dhl" for clarity                *
 * 2/11/92  W. Joseph Carter    Ported new code to Macintosh.  Most   *
 *                              important fixes involved changing     *
 *                              16-bit ints to long or unsigned in    *
 *                              bit alloc routines for quant of 65535 *
 *                              and passing proper function args.     *
 *                              Removed "Other Joint Stereo" option   *
 *                              and made bitrate be total channel     *
 *                              bitrate, irrespective of the mode.    *
 *                              Fixed many small bugs & reorganized.  *
 **********************************************************************
 *                                                                    *
 *                                                                    *
 *  MPEG/audio Phase 2 coding/decoding multichannel                   *
 *                                                                    *
 *  Version 1.0                                                       *
 *                                                                    *
 *  7/27/93        Susanne Ritscher,  IRT Munich                      *
 *                                                                    *
 *                  thanks to                                         *
 *                  Ralf Schwalbe,    Telekom FTZ Berlin              *
 *                  Heiko Purnhagen,  Uni Hannover                    *
 *                                                                    *
 *  Version 2.0                                                       *
 *                                                                    *
 *  8/27/93        Susanne Ritscher, IRT Munich                       *
 *                 Channel-Switching is working                       *
 *                                                                    *
 *  Version 2.1                                                       *
 *                                                                    *
 *  9/1/93         Susanne Ritscher,  IRT Munich                      *
 *                 all channels normalized                            *
 *                                                                    *
 *  Version 3.0                                                       *
 *                                                                    *
 *  06/16/94       Ralf Schwalbe, Telekom FTZ Berlin                  *
 *                 all sources and variables adapted due to MPEG-2 -  *
 *                 DIS from March 1994                                *
 *                  - dematrix and denormalize procedure              *
 *                  - new tc - allocation (0-7)                       *
 *                  - some new structures and variables as a basis    *
 *                    for further decoding modes                      *
 **********************************************************************
 *								      *
 *  Version 1.0                                                       *
 *                                                                    *
 *  11/04/94       Ralf Schwalbe,  Telekom FTZ Berlin                 *
 *                  - decoding tc-allocation                          *
 *                  - some new subroutines, globale variables and     *
 *                    structures (important to handle the ext. bitst.)*
 *                  - changed all functions to ANSI-C funktion header *
 *		    - corrected some bugs to decode bitstreams > 512kB*
 *								      *
 *  Version 1.1                                                       *
 *                                                                    *
 *  12/07/94       Ralf Schwalbe,  Telekom FTZ Berlin                 *
 *                  - decoding extension bitstream                    *
 *                                                                    *
 *  Version 1.1.1                                                     *
 *                 Ralf Schwalbe, Telekom FTZ Berlin                  *
 *                  - fixed some bugs                                 *
 *                                                                    *
 *  Version 1.2                                                       *
 *                                                                    *
 *  6/21/95       Ralf Schwalbe, Deutsche Telekom FTZ Berlin          *
 *            	    - decoding dynamic crosstalk                      *
 *                  - decoding phantom center                         * 
 *                  - decoding MPEG1 compatible part only (stereo)    *
 *                  - corrected some settings and bugs                *
 * 								      *
 *  7/12/95	  Ralf Schwalbe, Deutsche Telekom FTZ Berlin          *
 *		    - corrected dynamic crosstalk 		      *
 *		    - 3/2,3/1,3/0,2/1, channel configurations         *
 *                    are working                                     *
 *		  						      *
 * 10/31/95	  Ralf Schwalbe, Deutsche Telekom FTZ Berlin	      *
 *		    - decoding of LFE-channel is working  	      *
 *		    - corrected any settings and bugs		      *
 *		    - corrected table-switch for channel mode < 3/2   *
 *		      and tc-allocation / dyn-crosstalk		      *
 *		    - still a problem with compl. bitstream 18/19     *
 * 01/12/96	  Ralf Schwalbe, Deutsche Telekom TZ Darmstadt	      *
 *		    - decoder prediction installed		      *
 *		    - problem with compl. bitstream 19 solved,        *
 * 03/27/96	  Ralf Schwalbe, Deutsche Telekom TZ Darmstadt        *
 *		    - Multilingual mode adapted for max. 7 channels   *
 *                                                                    *				      *		    
 *  Version 2.0                                                       *
 *                                                                    *
 * 01/28/97       Frans de Bont, Philips Sound & Vision, Eindhoven    *
 *		    - simultaneous use of tc allocation and dynamic   *
 *		      crosstalk working for all configurations	      *
 *		    - prediction working for all configurations	      *
 *		    - layer 1 MC working			      *
 *		    - variable bit rate and extension bitstreams      *
 *		    - fully compliant to 13818-3.2                    *
 *                                                                    *				      *		    
 **********************************************************************/
/**********************************************************************
 *                                                                    *
 *  06/06/95       Yeon Bae Thomas Kim,  Samsung AIT                  *
 *                 ancillary data is working                          *
 *								      *
 *  06/06/95       Sang Wook Kim,  Samsung AIT                        *
 *                 corrected some bugs                                *
 *								      *
 **********************************************************************/

#include        "common.h"
#include        "decoder.h"

/********************************************************************
*
*        This part contains the MPEG I / II decoder for Layers II.
*
*        Core of the Layer II decoder.  Default layer is Layer II.
*
*********************************************************************/

/* Global variable definitions for "musicout.c" */

char 		   *programName;
int 		   Frame_Bits,Bitrate;
double		   S_freq;

/* Implementations */

main (int argc, char **argv)  /* R.S. 7 channels for ML */
{
typedef long PCM[7][3][SBLIMIT];		
	PCM  *pcm_sample;
	PCM  *pcm_sample_ml;			/* 10/03/1995 JMZ Multilingual*/
typedef unsigned int SAM[7][3][SBLIMIT];	
	SAM  *sample;
	SAM  *sample_ml;			/* 10/03/1995 JMZ Multilingual*/
typedef double FRA[7][SBLIMIT][3][12];		/* 7.10.93 R.S. mem - alloc for DOS */ 
	FRA  *fraction;
	FRA  *fraction_ml;			/*JMZ 09/03/1995 Multilingual */
typedef double FRA_HELP[12][7][3][SBLIMIT];	/* 10/03/1995 JMZ Multilingual*/
	FRA_HELP *fraction_help;
	FRA_HELP *fraction_help_ml;
typedef double FRA_BUF[2][8][36+PREDDEL];   
	FRA_BUF  *pred_buf; 
typedef double VE[7][HAN_SIZE];		
	VE  *w;

	frame_params      fr_ps;
	layer 		  info;
	Bit_stream        bs_mpg, bs_ext, bs_mc;
	FILE              *musicout, *lfe;
	FILE              *musicout_ml;			/* 10/03/1995 JMZ Multilingual*/
	unsigned long     sample_frames;
	unsigned long     sample_frames_ml;
	int		  i,jj, j, k, ii, stereo, done=FALSE, clip, sync,f;
	int               error_protection, crc_check = 1;
	int		  crc_error_count, total_error_count;
	int               crc_error_count_mc, total_error_count_mc;
#ifdef Augmentation_7ch
	int               crc_error_count_aug, total_error_count_aug;
#endif
	unsigned int      old_crc, new_crc;
	unsigned int      I_bit_alloc[3][7][SBLIMIT];
	unsigned int      bit_alloc[7][SBLIMIT], scfsi[7][SBLIMIT],
			  scale_index[7][3][SBLIMIT]; 
	unsigned int      bit_alloc_ml[7][SBLIMIT], scfsi_ml[7][SBLIMIT],
			  scale_index_ml[7][3][SBLIMIT]; /* 09/03/1995 JMZ Multilingual */
	unsigned long     bitsPerSlot, samplesPerFrame;
	IFF_AIFF          pcm_aiff_data;
	char 	      	  encoded_file_name[MAX_NAME_SIZE];
	char 	      	  encoded_file_name1[MAX_NAME_SIZE]; /* 8/11/92.sr*/
	char              decoded_file_name[MAX_NAME_SIZE];
	char              decoded_file_name_ml[MAX_NAME_SIZE];/* 10/03/1995 JMZ Multilingual*/
	char		  ext_bitstream_name[MAX_NAME_SIZE];
	char		  frame_name[MAX_NAME_SIZE];
	char		  lfe_file_name[MAX_NAME_SIZE];
	char              t[50];
	int               need_aiff;
	int		  l, m, print_out = 0, ml =0;
	int		  ch_start,lfe_init = 1;
	int		  tca_log = 0, dynx_log = 0, bits_log = 0, rate_log = 0, scfsi_log = 0, any_log = 0;
	short int	  lfe_tmp[12];
	unsigned int	  sym_sample_ml[12][7][3][SBLIMIT];	/* 18/03/1996 FDB Multilingual*/
	int		  part, layer_I_frames;
	int		  mpeg = 2; /* R.S. mpeg default for mc */
	int		  channels=2, mc_channel=0;
	unsigned long	  frameNum = 0L;
	unsigned long	  frameMod = 1L;
	unsigned long	  frameBits;
/*****************************************************************************/
	int hi, hu, ho;
	FILE *fp1;
	FILE *fp2;
	FILE *fp3;
	FILE *fp4;
	FILE *fp5;
	FILE *fp6;
/******************************************************************************/

#ifdef  MACINTOSH
	console_options.nrows = MAC_WINDOW_SIZE;
	argc = ccommand(&argv);
#endif
	/* Most large variables are declared dynamically to ensure
	   compatibility with smaller machines */

	pcm_sample = (PCM *) mem_alloc((long) sizeof(PCM), "PCM Samp");
	pcm_sample_ml = (PCM *) mem_alloc((long) sizeof(PCM), "PCM Samp");
	sample 	   = (SAM *) mem_alloc((long) sizeof(SAM), "Sample");
	sample_ml   = (SAM *) mem_alloc((long) sizeof(SAM), "Sample");
	fraction   = (FRA *) mem_alloc((long) sizeof(FRA), "fraction");  /* R.S. */
	fraction_ml   = (FRA *) mem_alloc((long) sizeof(FRA), "fraction");  /* R.S. */
	fraction_help = (FRA_HELP *) mem_alloc((long) sizeof(FRA_HELP), "fraction");
	fraction_help_ml = (FRA_HELP *) mem_alloc((long) sizeof(FRA_HELP), "fraction");
	pred_buf  = (FRA_BUF *) mem_alloc((long) sizeof(FRA_BUF), "pred_buf");
				
	w = (VE *) mem_alloc((long) sizeof(VE), "w");

	bs_mpg.header_size = 0;
	bs_mpg.bits = (unsigned char *) mem_alloc ((long) 13824, "MPG Bits");
	bs_ext.header_size = 0;
	bs_ext.bits = (unsigned char *) mem_alloc ((long) 16376, "EXT Bits");
	bs_mc.bits  = (unsigned char *) mem_alloc ((long) 30208, "MC Bits");

	fr_ps.header = &info;
	fr_ps.bs_mpg = &bs_mpg;
	fr_ps.bs_ext = &bs_ext;
	fr_ps.bs_mc  = &bs_mc;
	fr_ps.tab_num = -1;                /* no table loaded */
	fr_ps.tab_num_mc = -1;                /* no table loaded */
	fr_ps.tab_num_ml = -1;
	fr_ps.alloc = NULL;
	fr_ps.alloc_mc = NULL;
	fr_ps.alloc_ml = NULL;

	info.mode_ext = 0;
	info.version = MPEG_AUDIO_ID;
	info.bitrate_index = 0;
	info.lfe = 0;	    		   /* no low frequency effect channel present! */

	info.no_of_multi_lingual_ch = 0;
	info.multi_lingual_fs = 0;
	info.multi_lingual_layer = 0;

	info.ext_bit_stream_present = 0;
	info.ext_length = 0;
	info.n_ad_bytes = 0;    /* 7.12.94 R.S. */

	info.lfe = 0;

	for (i=0;i<HAN_SIZE;i++) for (j=0;j<5;j++) (*w)[j][i] = 0.0;

	program_information();
	programName = argv[0];
	if(argc==1)
	{        /* no command line args -> interact */
	   do
	   {
		  printf ("Enter encoded file name <required>: ");
		  gets (encoded_file_name);
		  f = strlen(encoded_file_name)-4;	  /*cut off extension.8/11/92.sr*/
		  if (encoded_file_name[0] == NULL_CHAR)
			 printf ("Encoded file name is required. \n");
	   } while (encoded_file_name[0] == NULL_CHAR);

	   printf (">>> Encoded file name is: %s \n", encoded_file_name);
	   strcpy(encoded_file_name1, encoded_file_name);  /*8/11/92.sr*/
	   strcpy(&encoded_file_name1[f], DFLT_OPEXT_DEC);	  /*.dec-extension.8/11/92.sr*/
	   printf ("Enter MPEG decoded file name <%s>: ", encoded_file_name1);
	   gets (decoded_file_name);
	   if (decoded_file_name[0] == NULL_CHAR)
		strcpy(decoded_file_name, encoded_file_name1);

/* JMZ 10/03/1995 Multilingual */

	   printf (">>> MPEG decoded file name is: %s \n", decoded_file_name);

           /* encoded_file_name1 only for help */
	   strcpy(encoded_file_name1, encoded_file_name);
	   strcpy(&encoded_file_name1[f], DFLT_IPEXT_EXT);	  /* .ext */
	   printf (">>> Enter MPEG 2 decoded extension filename <%s>: ", encoded_file_name1);
	   gets(ext_bitstream_name);
	   if( ext_bitstream_name[0] == NULL_CHAR )
		strcpy(ext_bitstream_name, encoded_file_name1);
	   printf("Extension bitstream <%s> will be decoded \n",ext_bitstream_name);
	   /* 6/21/95 Ralf Schwalbe: stand a chance to decode MPEG1 compatible part */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -