This is a derivative work of the MP3 library from the mpg123 player, specifically the 0.59r version. The home page for the player is http://mpg123.org/ This software is under the GPL license. The GPL.TXT file included with this software explains the license. Michael Hipp the author of the mpg123 player may still be doing licenses other than GPL. SRC\MAUI\DEMOS\MPGMP3\LIB\ <= contains mpglib sources SRC\MAUI\DEMOS\MPGMP3\DEFS\ <= contains mpglib defs SRC\MAUI\DEMOS\MPGMP3\PLAYER\ <= contains sample MP3 player for use with MAUI OS9000\\CMDS\MAUIDEMO\mpgplay <= OS9 MP3 player OS9000\\LIB\mpglib.l <= O-CODE library for MPGMP3 OS9000\\LIB\HOST3\mpglib.il <= I-CODE library for MPGMP3 struct mpstr mp; /* Initialize the MP3 decoder */ InitMP3(&mp); /* Initialize buffer */ status = decodeMP3(&mp,bufin,inlen,bufout,OUT_BUF_SIZE,&outlen); /* Decode buffer */ status = decodeMP3(&mp,NULL,0,bufout,OUT_BUF_SIZE,&outlen); /* Exit the MP3 decoder */ ExitMP3(&mp); Function information: BOOL InitMP3(struct mpstr *mp); int decodeMP3(struct mpstr *mp,char *inmemory,int inmemsize, char *outmemory,int outmemsize,int *done); void ExitMP3(struct mpstr *mp); Status return information: 'decodeMP3' will return the following status information. #define MP3_ERR -1 #define MP3_OK 0 #define MP3_NEED_MORE 1 The "mpstr" structure contains the following. struct mpstr { struct buf *head,*tail; int bsize; int framesize; int fsizeold; struct frame fr; unsigned char bsspace[2][MAXFRAMESIZE+512]; /* MAXFRAMESIZE */ real hybrid_block[2][2][SBLIMIT*SSLIMIT]; int hybrid_blc[2]; unsigned long header; int bsnum; real synth_buffs[2][2][0x110]; int synth_bo; }; Once the MP3 header is read you may use this structure to find out details as desired. #if defined(SHOW_FRAME) printf("FRAME: stereo %d jsbound %d single %d lsf %d\n", mp.fr.stereo, mp.fr.jsbound, mp.fr.single, mp.fr.lsf); printf("mpeg25 %d header_change %d lay %d error_protection %d\n", mp.fr.mpeg25, mp.fr.header_change, mp.fr.lay, mp.fr.error_protection); printf("bitrate_index %d sampling_frequency %d padding %d extension %d\n", mp.fr.bitrate_index, mp.fr.sampling_frequency, mp.fr.padding, mp.fr.extension); printf("mode %d mode_ext %d copyright %d original %d\n", mp.fr.mode, mp.fr.mode_ext, mp.fr.copyright, mp.fr.original); printf("emphasis %d framesize %d\n", mp.fr.emphasis, mp.fr.framesize); #endif For more information refer to the mpglib.h, mpg123.h and mpgplay.c sources. MPGPLAY This program is not designed to be a full featured MP3 player rather this program is designed to show how to use the MPGMP3 library sources as well sound map managment to the MAUI sound system. MPGPLAY uses the "mpglib.il" MPG library based on MPG123 sources. Three functions are all that is required to decompress MP3 information either from a file or a stream. InitMP3(&mp); decodeMP3(&mp,bufin,inlen,bufout,OUT_BUF_SIZE,&outlen); ExitMP3(&mp); When decompressing MP3 images we create as many SMAP slots as required. We will start the sound maps playing and continue decompressing the next block while the current blocks are played. This method provides very clean playback even on slower machines (133Mhz or greater should be fine). On X86 and ARM we will run with INTEGER based code by default. This will allow playing of MP3's even on 486SX based processors.