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

📄 common.c

📁 mpeg layerI II III, support window and linux
💻 C
📖 第 1 页 / 共 4 页
字号:
        if(lay == 2) {            fprintf(s, "SFSI ");            for (i=0;i<sblimit;i++) for (k=0;k<stereo;k++)                if (bit_alloc[k][i])  fprintf(s,"%d",scfsi[k][i]);            fprintf(s, "\nSCFs ");            for (k=0;k<stereo;k++) {                for (i=0;i<sblimit;i++)                    if (bit_alloc[k][i])                        switch (scfsi[k][i]) {                          case 0: for (j=0;j<3;j++)                                  fprintf(s,"%2d%c",scalar[k][j][i],                                          (j==2)?';':'-');                                  break;                          case 1:                          case 3: fprintf(s,"%2d-",scalar[k][0][i]);                                  fprintf(s,"%2d;",scalar[k][2][i]);                                  break;                          case 2: fprintf(s,"%2d;",scalar[k][0][i]);                        }                fprintf(s, "\n");            }        }        else{   /* lay == 1 */            fprintf(s, "SCFs ");            for (i=0;i<sblimit;i++) for (k=0;k<stereo;k++)                if (bit_alloc[k][i])  fprintf(s,"%2d;",scalar[k][0][i]);            fprintf(s, "\n");        }}void WriteSamples(ch, sample, bit_alloc, fr_ps, s)int ch;unsigned int FAR sample[SBLIMIT];unsigned int bit_alloc[SBLIMIT];frame_params *fr_ps;FILE *s;{int i;int stereo = fr_ps->stereo;int sblimit = fr_ps->sblimit;        fprintf(s, "SMPL ");        for (i=0;i<sblimit;i++)                if ( bit_alloc[i] != 0)                    fprintf(s, "%d:", sample[i]);        if(ch==(stereo-1) )     fprintf(s, "\n");        else                    fprintf(s, "\t");}int NumericQ(s) /* see if a string lookd like a numeric argument */char *s;{char    c;    while( (c = *s++)!='\0' && isspace((int)c)) /* strip leading ws */        ;    if( c == '+' || c == '-' )        c = *s++;               /* perhaps skip leading + or - */    return isdigit((int)c);}int BitrateIndex(ver,layr, bRate)   /* convert bitrate in kbps to index */int     layr,ver;           /* 1 or 2 */int     bRate;          /* legal rates from 32 to 448 */{int     index = 0;int     found = 0;    while(!found && index<15)   {        if(bitrate[ver][layr-1][index] == bRate)            found = 1;        else            ++index;    }    if(found)        return(index);    else {        fprintf(stderr, "BitrateIndex: %d (layer %d) is not a legal bitrate\n",                bRate, layr);        return(-1);     /* Error! */    }}int SmpFrqIndex(sRate, version)  /* convert samp frq in Hz to index */long sRate;             /* legal rates 16000, 22050, 24000, 32000, 44100, 48000 */int  *version;{    if (sRate == 44100L) {        *version = MPEG_AUDIO_ID; return(0);    }    else if (sRate == 48000L) {        *version = MPEG_AUDIO_ID; return(1);    }    else if (sRate == 32000L) {        *version = MPEG_AUDIO_ID; return(2);    }    else if (sRate == 24000L) {        *version = MPEG_PHASE2_LSF; return(1);    }    else if (sRate == 22050L) {        *version = MPEG_PHASE2_LSF; return(0);    }    else if (sRate == 16000L) {        *version = MPEG_PHASE2_LSF; return(2);    }    else {        fprintf(stderr, "SmpFrqIndex: %ld is not a legal sample rate\n", sRate);        return(-1);      /* Error! */    }}/*********************************************************************************  Allocate number of bytes of memory equal to "block".********************************************************************************/void  FAR *mem_alloc(block, item)unsigned long   block;char            *item;{    void    *ptr;#ifdef  MACINTOSH    ptr = NewPtr(block);#endif#ifdef MSC60    /*ptr = (void FAR *) _fmalloc((unsigned int)block);*/ /* far memory, 92-07-08 sr */    ptr = (void FAR *) malloc((unsigned int)block); /* far memory, 93-08-24 ss */#endif#if ! defined (MACINTOSH) && ! defined (MSC60)    ptr = (void FAR *) malloc(block);#endif    if (ptr != NULL){#ifdef  MSC60        _fmemset(ptr, 0, (unsigned int)block); /* far memory, 92-07-08 sr */#else        memset(ptr, 0, block);#endif    }    else{        printf("Unable to allocate %s\n", item);        exit(0);    }    return(ptr);}/******************************************************************************  Free memory pointed to by "*ptr_addr".******************************************************************************/void    mem_free(ptr_addr)void    **ptr_addr;{    if (*ptr_addr != NULL){#ifdef  MACINTOSH        DisposPtr(*ptr_addr);#else        free(*ptr_addr);#endif        *ptr_addr = NULL;    }}/*********************************************************************************  Check block of memory all equal to a single byte, else return FALSE********************************************************************************/int memcheck(array, test, num)char *array;int test;       /* but only tested as a char (bottom 8 bits) */int num;{ int i=0;   while (array[i] == test && i<num) i++;   if (i==num) return TRUE;   else return FALSE;}/*******************************************************************************  Routines to determine byte order and swap bytes******************************************************************************/enum byte_order NativeByteOrder = order_unknown;enum byte_order DetermineByteOrder(){    char s[ sizeof(long) + 1 ];    union    {        long longval;        char charval[ sizeof(long) ];    } probe;    probe.longval = 0x41424344L;  /* ABCD in ASCII */    strncpy( s, probe.charval, sizeof(long) );    s[ sizeof(long) ] = '\0';    /* fprintf( stderr, "byte order is %s\n", s ); */    if ( strcmp(s, "ABCD") == 0 )        return order_bigEndian;    else        if ( strcmp(s, "DCBA") == 0 )            return order_littleEndian;        else            return order_unknown;}void SwapBytesInWords( short *loc, int words ){    int i;    short thisval;    char *dst, *src;    src = (char *) &thisval;    for ( i = 0; i < words; i++ )    {        thisval = *loc;        dst = (char *) loc++;        dst[0] = src[1];        dst[1] = src[0];    }}void SwapBytesInLongs( long *loc, int words ){    int i;    long thisval;    char *dst, *src;    src = (char *) &thisval;    for ( i = 0; i < words; i++ )    {        thisval = *loc;        dst = (char *) loc++;        dst[0] = src[3];        dst[1] = src[2];        dst[2] = src[1];        dst[3] = src[0];    }}/***************************************************************************** * *  Read Audio Interchange File Format (AIFF) headers. * *****************************************************************************/int aiff_read_headers( FILE *file_ptr, IFF_AIFF *aiff_ptr ){    int i, chunkSize, subSize, sound_position;        if ( fseek(file_ptr, 0, SEEK_SET) != 0 )        return -1;        if ( Read32BitsHighLow(file_ptr) != IFF_ID_FORM )        return -1;        chunkSize = Read32BitsHighLow( file_ptr );        if ( Read32BitsHighLow(file_ptr) != IFF_ID_AIFF )        return -1;        sound_position = 0;    while ( chunkSize > 0 )    {        chunkSize -= 4;        switch ( Read32BitsHighLow(file_ptr) )	{                      case IFF_ID_COMM:            chunkSize -= subSize = Read32BitsHighLow( file_ptr );            aiff_ptr->numChannels = Read16BitsHighLow( file_ptr );            subSize -= 2;            aiff_ptr->numSampleFrames = Read32BitsHighLow( file_ptr );            subSize -= 4;            aiff_ptr->sampleSize = Read16BitsHighLow( file_ptr );            subSize -= 2;            aiff_ptr->sampleRate  = ReadIeeeExtendedHighLow( file_ptr );            subSize -= 10;            while ( subSize > 0 )	    {                getc( file_ptr );                subSize -= 1;	    }            break;                      case IFF_ID_SSND:            chunkSize -= subSize = Read32BitsHighLow( file_ptr );            aiff_ptr->blkAlgn.offset = Read32BitsHighLow( file_ptr );            subSize -= 4;            aiff_ptr->blkAlgn.blockSize = Read32BitsHighLow( file_ptr );            subSize -= 4;            sound_position = ftell( file_ptr ) + aiff_ptr->blkAlgn.offset;            if ( fseek(file_ptr, (long) subSize, SEEK_CUR) != 0 )                return -1;            aiff_ptr->sampleType = IFF_ID_SSND;            break;                      default:            chunkSize -= subSize = Read32BitsHighLow( file_ptr );            while ( subSize > 0 )	    {                getc( file_ptr );                subSize -= 1;	    }            break;	}    }    return sound_position;}/***************************************************************************** * *  Seek past some Audio Interchange File Format (AIFF) headers to sound data. * *****************************************************************************/int aiff_seek_to_sound_data( FILE *file_ptr ){	if ( fseek(file_ptr, AIFF_FORM_HEADER_SIZE + AIFF_SSND_HEADER_SIZE, SEEK_SET) != 0 )        return(-1);    return(0);}/******************************************************************************* * *  Write Audio Interchange File Format (AIFF) headers. * *******************************************************************************/int aiff_write_headers( FILE *file_ptr, IFF_AIFF *aiff_ptr ){    int chunkSize;    int sampleBytes = (aiff_ptr->sampleSize / 8) + (aiff_ptr->sampleSize % 8 ? 1 : 0);        if ( fseek(file_ptr, 0L, SEEK_SET) != 0 )        return -1;        /* write FORM chunk */    chunkSize = 8 + 18 + 8 + aiff_ptr->numChannels * aiff_ptr->numSampleFrames * sampleBytes;    Write32BitsHighLow( file_ptr, IFF_ID_FORM );    Write32BitsHighLow( file_ptr, chunkSize );    Write32BitsHighLow( file_ptr, IFF_ID_AIFF );    /* write COMM chunk */    Write32BitsHighLow( file_ptr, IFF_ID_COMM );    Write32BitsHighLow( file_ptr, 18 ); /* chunk size */    Write16BitsHighLow( file_ptr, aiff_ptr->numChannels );    Write32BitsHighLow( file_ptr, aiff_ptr->numSampleFrames );    Write16BitsHighLow( file_ptr, aiff_ptr->sampleSize );    WriteIeeeExtendedHighLow( file_ptr, aiff_ptr->sampleRate );    /* write SSND chunk header */    chunkSize = 8 + aiff_ptr->numChannels * aiff_ptr->numSampleFrames * sampleBytes;    Write32BitsHighLow( file_ptr, IFF_ID_SSND );    Write32BitsHighLow( file_ptr, chunkSize );

⌨️ 快捷键说明

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