📄 musicout.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 + -