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

📄 musicout.c

📁 mp3 source code decoder & encoder
💻 C
字号:
/**********************************************************************
 * ISO MPEG Audio Subgroup Software Simulation Group (1996)
 * ISO 13818-3 MPEG-2 Audio Decoder - Lower Sampling Frequency Extension
 *
 * $Header: /MP3Stego/MP3Stego Decoder/musicout.c 9     30/11/00 15:56 Fabienpe $
 *
 * $Id: musicout.c,v 1.2 1996/03/28 03:13:37 rowlands Exp $
 *
 * $Log: /MP3Stego/MP3Stego Decoder/musicout.c $
 * 
 * 9     30/11/00 15:56 Fabienpe
 * 
 * 8     11/02/99 11:29 Fapp2
 * pszPassword... should be declared somewhere
 * 
 * 7     9/02/99 22:26 Fapp2
 * 
 * 6     30/10/98 11:24 Fapp2
 * 
 * 5     15/08/98 10:40 Fapp2
 * Started revision control on this file.
 * Revision 1.2  1996/03/28 03:13:37  rowlands
 * Merged layers 1-2 and layer 3 revisions
 *
 * Revision 1.1  1996/02/14 03:45:52  rowlands
 * Initial revision
 *
 * 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      *
 *--------------------------------------------------------------------*
 * Aug 1998 Fabien Petitcolas   added stego decoding                  *
 **********************************************************************/
#include "common.h"
#include "decoder.h"

#include "../stegolib/stego.h"
char *pszPassword;

/********************************************************************
/*
/*        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 */

void main(int argc, char **argv)
{
    typedef short PCM[2][SSLIMIT][SBLIMIT];
    PCM *pcm_sample;
    typedef unsigned int SAM[2][3][SBLIMIT];
    SAM *sample;
    typedef double FRA[2][3][SBLIMIT];
    FRA  *fraction;
    typedef double VE[2][HAN_SIZE];
    VE  *w;

    Bit_stream_struc  bs;
    frame_params      fr_ps;
    layer             LayerInfo;
    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;

    III_scalefac_t    III_scalefac;
    III_side_info_t   III_side_info;

/* MP3STEGO-> */
    pszPassword = NULL;
/* ->MP3STEGO */

    fprintf(stderr,"i-Show MP3 Decoder %s\n", STEGO_VERSION);
	//show version info. Kevin Zheng.
    
    /* Most large variables are declared dynamically to ensure
       compatibility with smaller machines */

    pcm_sample = (PCM  *) mem_alloc((long) sizeof(PCM), "PCM Samp");
    sample = (SAM  *) mem_alloc((long) sizeof(SAM), "Sample");
    fraction = (FRA  *) mem_alloc((long) sizeof(FRA), "fraction");
    w = (VE  *) mem_alloc((long) sizeof(VE), "w");

    fr_ps.header = &LayerInfo;
    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);

/* MP3STEGO-> */
    if (Arguments.extract_hidden)
		StegoCreateEmbeddedText(Arguments.hidden_file_name);
/* ->MP3STEGO */

    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)) 
	{
			
        sync = seek_sync(&bs, SYNC_WORD, SYNC_WORD_LNGTH);  //Warning: 癘猔矪瞶穝侣

⌨️ 快捷键说明

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