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

📄 w~1

📁 mpeg layerI II III, support window and linux
💻
📖 第 1 页 / 共 2 页
字号:
/********************************************************************** * ISO MPEG Audio Subgroup Software Simulation Group (1996) * ISO 13818-3 MPEG-2 Audio Decoder - Lower Sampling Frequency Extension * * $Id: musicout.c.rca 1.2 Fri Dec 13 00:30:54 2002 franklej Experimental $ * * Received from FhG **********************************************************************//********************************************************************** *   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.  * *19 aug 92 Soren H. Nielsen    Changed MS-DOS file name extensions.  * * 8/27/93 Seymour Shlien,      Fixes in Unix and MSDOS ports,        * *         Daniel Lauzon, and                                         * *         Bill Truerniet                                             * *--------------------------------------------------------------------* * 4/23/92  J. Pineda           Added code for layer III.  LayerIII   * *          Amit Gulati         decoding is currently performed in    * *                              two-passes for ease of sideinfo and   * *                              maindata buffering and decoding.      * *                              The second (computation) pass is      * *                              activated with "decode -3 <outfile>"  * * 10/25/92 Amit Gulati         Modified usage() for layerIII         * * 12/10/92 Amit Gulati         Changed processing order of re-order- * *                              -ing step.  Fixed adjustment of       * *                              main_data_end pointer to exclude      * *                              side information.                     * *  9/07/93 Toshiyuki Ishino    Integrated Layer III with Ver 3.9.    * *--------------------------------------------------------------------* * 11/20/93 Masahiro Iwadare    Integrated Layer III with Ver 4.0.    * *--------------------------------------------------------------------* *  7/14/94 Juergen Koller      Bug fixes in Layer III code           * *--------------------------------------------------------------------* * 08/11/94 IIS                 Bug fixes in Layer III code           * *--------------------------------------------------------------------* * 11/04/94 Jon Rowlands        Prototype fixes                       * *--------------------------------------------------------------------* *  7/12/95 Soeren H. Nielsen   Changes for LSF Layer I and II        * *--------------------------------------------------------------------* *  7/14/94 Juergen Koller      Bug fixes in Layer III code           * *--------------------------------------------------------------------* *     8/95 Roland Bitto        addapdet to MPEG 2                    * *--------------------------------------------------------------------* * 11/22/95 Heiko Purnhagen     skip ancillary data in bitstream      * **********************************************************************/#include        "common.h"#include        "decoder.h"/********************************************************************/*/*        This part contains the MPEG I decoder for Layers I & II./*/*********************************************************************//****************************************************************/*/*        For MS-DOS user (Turbo c) change all instance of malloc/*        to _farmalloc and free to _farfree. Compiler model hugh/*        Also make sure all the pointer specified are changed to far./*/*****************************************************************//* local functions definition */static void usage();static void GetArguments();  /*********************************************************************/*/* Core of the Layer II decoder.  Default layer is Layer II./*/*********************************************************************//* Global variable definitions for "musicout.c" */char *programName;int main_data_slots();int side_info_slots();/* Implementations */main(argc, argv)int argc;char **argv;{/*typedef short PCM[2][3][SBLIMIT];*/typedef OUTPUT_TYPE PCM[2][SSLIMIT][SBLIMIT];    PCM FAR *pcm_sample;typedef unsigned int SAM[2][3][SBLIMIT];    SAM FAR *sample;typedef double FRA[2][3][SBLIMIT];    FRA FAR *fraction;typedef double VE[2][HAN_SIZE];    VE FAR *w;    Bit_stream_struc  bs;    frame_params      fr_ps;    layer             info;    FILE              *musicout;    unsigned long     sample_frames;    int               i, j, k, stereo, done=FALSE, clip, sync;     int               error_protection, crc_error_count, total_error_count;    unsigned int      old_crc, new_crc;    unsigned int      bit_alloc[2][SBLIMIT], scfsi[2][SBLIMIT],                      scale_index[2][3][SBLIMIT];    unsigned long     bitsPerSlot, samplesPerFrame, frameNum = 0;    unsigned long     frameBits, gotBits = 0;    IFF_AIFF          pcm_aiff_data;    Arguments_t       Arguments;    int Max_gr;    int bbq;III_scalefac_t III_scalefac;III_side_info_t III_side_info;#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 FAR *) mem_alloc((long) sizeof(PCM), "PCM Samp");    sample = (SAM FAR *) mem_alloc((long) sizeof(SAM), "Sample");    fraction = (FRA FAR *) mem_alloc((long) sizeof(FRA), "fraction");    w = (VE FAR *) mem_alloc((long) sizeof(VE), "w");    fr_ps.header = &info;    fr_ps.tab_num = -1;                /* no table loaded */    fr_ps.alloc = NULL;    for (i=0;i<HAN_SIZE;i++) for (j=0;j<2;j++) (*w)[j][i] = 0.0;    Arguments.topSb = 0;    GetArguments(argc, argv, &Arguments);    if ((musicout = fopen(Arguments.decoded_file_name, "w+b")) == NULL) {          printf ("Could not create \"%s\".\n", Arguments.decoded_file_name);          exit(1);        }    open_bit_stream_r(&bs, Arguments.encoded_file_name, BUFFER_SIZE);    if (Arguments.need_aiff)       if (aiff_seek_to_sound_data(musicout) == -1) {          printf("Could not seek to PCM sound data in \"%s\".\n",                 Arguments.decoded_file_name);          exit(1);       }    sample_frames = 0;    //while (!end_bs(&bs)) {    for( bbq=0;bbq<10;bbq++) {       sync = seek_sync(&bs, SYNC_WORD, SYNC_WORD_LNGTH);       frameBits = sstell(&bs) - gotBits;       if(frameNum > 0)        /* don't want to print on 1st loop; no lay */          if(frameBits%bitsPerSlot)             fprintf(stderr,"Got %ld bits = %ld slots plus %ld\n",                     frameBits, frameBits/bitsPerSlot, frameBits%bitsPerSlot);       gotBits += frameBits;       if (!sync) {          printf("Frame cannot be located\n");          printf("Input stream may be empty\n");          done = TRUE;          /* finally write out the buffer */          if (info.lay != 1) out_fifo(*pcm_sample, 3, &fr_ps, done,                                      musicout, &sample_frames);          else               out_fifo(*pcm_sample, 1, &fr_ps, done,                                      musicout, &sample_frames);          break;       }       decode_info(&bs, &fr_ps);       hdr_to_frps(&fr_ps);       stereo = fr_ps.stereo;       if(fr_ps.header->version == MPEG_PHASE2_LSF) {		Max_gr = 1;       }       else       { 		Max_gr = 2;       }       error_protection = info.error_protection;       crc_error_count = 0;       total_error_count = 0;       if(frameNum == 0) WriteHdr(&fr_ps, stdout);  /* printout layer/mode */#ifdef ESPSif (frameNum == 0 && Arguments.need_esps) {	esps_write_header(musicout,(long) sample_frames, (double)		s_freq[info.version][info.sampling_frequency] * 1000,		(int) stereo, Arguments.decoded_file_name );} /* MI */#endif       fprintf(stderr, "{%4lu}", frameNum++); fflush(stderr);        if (error_protection) buffer_CRC(&bs, &old_crc);       switch (info.lay) {          case 1: {             bitsPerSlot = 32;        samplesPerFrame = 384;             I_decode_bitalloc(&bs,bit_alloc,&fr_ps);             I_decode_scale(&bs, bit_alloc, scale_index, &fr_ps);             if (error_protection) {                I_CRC_calc(&fr_ps, bit_alloc, &new_crc);                if (new_crc != old_crc) {                   crc_error_count++;                   total_error_count++;                   recover_CRC_error(*pcm_sample, crc_error_count,                                     &fr_ps, musicout, &sample_frames);                   break;                }                else crc_error_count = 0;             }             clip = 0;             for (i=0;i<SCALE_BLOCK;i++) {                I_buffer_sample(&bs,(*sample),bit_alloc,&fr_ps);                I_dequantize_sample(*sample,*fraction,bit_alloc,&fr_ps);                I_denormalize_sample((*fraction),scale_index,&fr_ps);                if(Arguments.topSb>0)        /* clear channels to 0 */                   for(j=Arguments.topSb; j<fr_ps.sblimit; ++j)                      for(k=0; k<stereo; ++k)                         (*fraction)[k][0][j] = 0;                for (j=0;j<stereo;j++) {                   clip += SubBandSynthesis (&((*fraction)[j][0][0]), j,                                             &((*pcm_sample)[j][0][0]));                }                out_fifo(*pcm_sample, 1, &fr_ps, done,                         musicout, &sample_frames);             }             if(clip > 0) printf("%d output samples clipped\n", clip);             break;          }          case 2: {             bitsPerSlot = 8;        samplesPerFrame = 1152;             II_decode_bitalloc(&bs, bit_alloc, &fr_ps);             II_decode_scale(&bs, scfsi, bit_alloc, scale_index, &fr_ps);             if (error_protection) {                 II_CRC_calc(&fr_ps, bit_alloc, scfsi, &new_crc);                if (new_crc != old_crc) {                   crc_error_count++;                   total_error_count++;                   recover_CRC_error(*pcm_sample, crc_error_count,                                     &fr_ps, musicout, &sample_frames);                   break;                }                else crc_error_count = 0;             }             clip = 0;             for (i=0;i<SCALE_BLOCK;i++) {                II_buffer_sample(&bs,(*sample),bit_alloc,&fr_ps);                II_dequantize_sample((*sample),bit_alloc,(*fraction),&fr_ps);                II_denormalize_sample((*fraction),scale_index,&fr_ps,i>>2);                if(Arguments.topSb>0)        /* debug : clear channels to 0 */                   for(j=Arguments.topSb; j<fr_ps.sblimit; ++j)                      for(k=0; k<stereo; ++k)                         (*fraction)[k][0][j] =                         (*fraction)[k][1][j] =                         (*fraction)[k][2][j] = 0;                for (j=0;j<3;j++) for (k=0;k<stereo;k++) {                   clip += SubBandSynthesis (&((*fraction)[k][j][0]), k,                                             &((*pcm_sample)[k][j][0]));                }                out_fifo(*pcm_sample, 3, &fr_ps, done, musicout,

⌨️ 快捷键说明

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