;
;◎ ◎ mpg123.h->mpg123.inc use to asm By G-Spider @2011
;
; Begin of file mpg123.h
;
; libmpg123:MPEG Audio Decoder library (version 1.13.0)
;
; copyright 1995-2010 by the mpg123 project - free software under the terms of the LGPL 2.1
; see COPYING and AUTHORS files in distribution or http://mpg123.org
;
; * file mpg123.h The header file for the libmpg123 MPEG Audio decoder
; A macro to check at compile time which set of API functions to expect.
; This should be incremented at least each time a new symbol is added to the header.
MPG123_API_VERSION EQU 29
;
; * Function to initialise the mpg123 library.
; * This function is not thread-safe. Call it exactly once per process,before any other (possibly threaded) work with the library.
; *
; * return MPG123_OK if successful,otherwise an error number.
;
mpg123_init PROTO C
; * Function to close down the mpg123 library.
; * This function is not thread-safe. Call it exactly once per process,before any other (possibly threaded) work with the library.
mpg123_exit PROTO C
; * Create a handle with optional choice of decoder (named by a string,see mpg123_decoders() or mpg123_supported_decoders()).
; * and optional retrieval of an error code to feed to mpg123_plain_strerror().
; * Optional means:Any of or both the parameters may be NULL.
; *
; * return Non-NULL pointer when successful.
;
mpg123_new PROTO C :DWORD,:DWORD
; * Delete handle,mh is either a valid mpg123 handle or NULL.
mpg123_delete PROTO C :DWORD
; * Enumeration of the parameters types that it is possible to set/get.
MPG123_VERBOSE EQU 0; *< set verbosity value for enabling messages to stderr,>= 0 makes sense (integer)
MPG123_FLAGS EQU 1; *< set all flags,p.ex val = MPG123_GAPLESS|MPG123_MONO_MIX (integer)
MPG123_ADD_FLAGS EQU 2; *< add some flags (integer)
MPG123_FORCE_RATE EQU 3; *< when value > 0,force output rate to that value (integer)
MPG123_DOWN_SAMPLE EQU 4; *< 0=native rate,1=half rate,2=quarter rate (integer)
MPG123_RVA EQU 5; *< one of the RVA choices above (integer)
MPG123_DOWNSPEED EQU 6; *< play a frame N times (integer)
MPG123_UPSPEED EQU 7; *< play every Nth frame (integer)
MPG123_START_FRAME EQU 8; *< start with this frame (skip frames before that,integer)
MPG123_DECODE_FRAMES EQU 9; *< decode only this number of frames (integer)
MPG123_ICY_INTERVAL EQU 10; *< stream contains ICY metadata with this interval (integer)
MPG123_OUTSCALE EQU 11; *< the scale for output samples (amplitude - integer or float according to mpg123 output format,normally integer)
MPG123_TIMEOUT EQU 12; *< timeout for reading from a stream (not supported on win32,integer)
MPG123_REMOVE_FLAGS EQU 13; *< remove some flags (inverse of MPG123_ADD_FLAGS,integer)
MPG123_RESYNC_LIMIT EQU 14; *< Try resync on frame parsing for that many bytes or until end of stream (<0 ... integer).
MPG123_INDEX_SIZE EQU 15; *< Set the frame index size (if supported). Values <0 mean that the index is allowed to grow dynamically in these steps (in positive direction,of course)
MPG123_PREFRAMES EQU 16; *< Decode/ignore that many frames in advance for layer 3.
; * Flag bits for MPG123_FLAGS,use the usual binary or to combine.
MPG123_FORCE_MONO EQU 7 ; *<0111 Force some mono mode:This is a test bitmask for seeing if any mono forcing is active.
MPG123_MONO_LEFT EQU 1 ; *<0001 Force playback of left channel only.
MPG123_MONO_RIGHT EQU 2 ; *<0010 Force playback of right channel only.
MPG123_MONO_MIX EQU 4 ; *<0100 Force playback of mixed mono.
MPG123_FORCE_STEREO EQU 8 ; *<1000 Force stereo output.
MPG123_FORCE_8BIT EQU 16 ; *<00010000 Force 8bit formats.
MPG123_QUIET EQU 32 ; *<00100000 Suppress any printouts (overrules verbose).
MPG123_GAPLESS EQU 64 ; *<01000000 Enable gapless decoding (default on if libmpg123 has support).
MPG123_NO_RESYNC EQU 128 ; *<10000000 Disable resync stream after error.
MPG123_SEEKBUFFER EQU 256 ; *<000100000000 Enable small buffer on non-seekable streams to allow some peek-ahead (for better MPEG sync).
MPG123_FUZZY EQU 512 ; *<001000000000 Enable fuzzy seeks (guessing byte offsets or using approximate seek points from Xing TOC)
MPG123_FORCE_FLOAT EQU 1024; *<010000000000 Force floating point output (32 or 64 bits depends on mpg123 internal precision).
MPG123_PLAIN_ID3TEXT EQU 2048; *<100000000000 Do not translate ID3 text data to UTF-8. ID3 strings will contain the raw text data,with the first byte containing the ID3 encoding code.
MPG123_IGNORE_STREAMLENGTH EQU 4096; *<1000000000000 Ignore any stream length information contained in the stream,which can be contained in a 'TLEN' frame of an ID3v2 tag or a Xing tag
MPG123_SKIP_ID3V2 EQU 8192t;*<10000000000000 Do not parse ID3v2 tags,just skip them.
; * choices for MPG123_RVA
MPG123_RVA_OFF EQU 0; *< RVA disabled (default).
MPG123_RVA_MIX EQU 1; *< Use mix/track/radio gain.
MPG123_RVA_ALBUM EQU 2; *< Use album/audiophile gain
MPG123_RVA_MAX EQU 2; *< The maximum RVA code,may increase in future.
; TODO:Assess the possibilities and troubles of changing parameters during playback.
; * Set a specific parameter,for a specific DWORD,using a parameter
; * type key chosen from the mpg123_parms enumeration,to the specified value.
mpg123_param PROTO C :DWORD,:DWORD,:DWORD,:REAL8
; * Get a specific parameter,for a specific DWORD.
; * See the mpg123_parms enumeration for a list of available parameters.
mpg123_getparam PROTO C :DWORD,:DWORD,:DWORD,:DWORD
; * Feature set available for query with mpg123_feature.
MPG123_FEATURE_ABI_UTF8OPEN EQU 0; *< mpg123 expects path names to be given in UTF-8 encoding instead of plain native.
MPG123_FEATURE_OUTPUT_8BIT EQU 1; *< 8bit output
MPG123_FEATURE_OUTPUT_16BIT EQU 2; *< 16bit output
MPG123_FEATURE_OUTPUT_32BIT EQU 3; *< 32bit output
MPG123_FEATURE_INDEX EQU 4; *< support for building a frame index for accurate seeking
MPG123_FEATURE_PARSE_ID3V2 EQU 5; *< id3v2 parsing
MPG123_FEATURE_DECODE_LAYER1 EQU 6; *< mpeg layer-1 decoder enabled
MPG123_FEATURE_DECODE_LAYER2 EQU 7; *< mpeg layer-2 decoder enabled
MPG123_FEATURE_DECODE_LAYER3 EQU 8; *< mpeg layer-3 decoder enabled
MPG123_FEATURE_DECODE_ACCURATE EQU 9; *< accurate decoder rounding
MPG123_FEATURE_DECODE_DOWNSAMPLE EQU 10; *< downsample (sample omit)
MPG123_FEATURE_DECODE_NTOM EQU 11; *< flexible rate decoding
MPG123_FEATURE_PARSE_ICY EQU 12; *< ICY support
MPG123_FEATURE_TIMEOUT_READ EQU 13; *< Reader with timeout (network).
; * Query libmpg123 feature,1 for success,0 for unimplemented functions.
mpg123_feature PROTO C :DWORD
; * defgroup mpg123_error mpg123 error handling
; *
; * Functions to get text version of the error numbers and an enumeration
; * of the error codes returned by libmpg123.
; *
; * Most functions operating on a DWORD simply return MPG123_OK on success and MPG123_ERR on failure (setting the internal error variable of the handle to the specific error code).
; * Decoding/seek functions may also return message codes MPG123_DONE,MPG123_NEW_FORMAT and MPG123_NEED_MORE (please read up on these on how to react!).
; * The positive range of return values is used for "useful" values when appropriate.
; *
;
; * Enumeration of the message and error codes and returned by libmpg123 functions.
MPG123_DONE EQU -12; *< Message:Track ended. Stop decoding.
MPG123_NEW_FORMAT EQU -11; *< Message:Output format will be different on next call.
MPG123_NEED_MORE EQU -10; *< Message:For feed reader:"Feed me more!" (call mpg123_feed() or mpg123_decode() with some new input data).
MPG123_ERR EQU -1; *< Generic Error
MPG123_OK EQU 0; *< Success
MPG123_BAD_OUTFORMAT EQU 1; *< Unable to set up output format!
MPG123_BAD_CHANNEL EQU 2; *< Invalid channel number specified.
MPG123_BAD_RATE EQU 3; *< Invalid sample rate specified.
MPG123_ERR_16TO8TABLE EQU 4; *< Unable to allocate memory for 16 to 8 converter table!
MPG123_BAD_PARAM EQU 5; *< Bad parameter id!
MPG123_BAD_BUFFER EQU 6; *< Bad buffer given -- invalid pointer or too small size.
MPG123_OUT_OF_MEM EQU 7; *< Out of memory -- some malloc() failed.
MPG123_NOT_INITIALIZED EQU 8; *< You didn't initialize the library!
MPG123_BAD_DECODER EQU 9; *< Invalid decoder choice.
MPG123_BAD_HANDLE EQU 10; *< Invalid mpg123 handle.
MPG123_NO_BUFFERS EQU 11; *< Unable to initialize frame buffers (out of memory?).
MPG123_BAD_RVA EQU 12; *< Invalid RVA mode.
MPG123_NO_GAPLESS EQU 13; *< This build doesn't support gapless decoding.
MPG123_NO_SPACE EQU 14; *< Not enough buffer space.
MPG123_BAD_TYPES EQU 15; *< Incompatible numeric data types.
MPG123_BAD_BAND EQU 16; *< Bad equalizer band.
MPG123_ERR_NULL EQU 17; *< Null pointer given where valid storage address needed.
MPG123_ERR_READER EQU 18; *< Error reading the stream.
MPG123_NO_SEEK_FROM_END EQU 19; *< Cannot seek from end (end is not known).
MPG123_BAD_WHENCE EQU 20; *< Invalid 'whence' for seek function.
MPG123_NO_TIMEOUT EQU 21; *< Build does not support stream timeouts.
MPG123_BAD_FILE EQU 22; *< File access error.
MPG123_NO_SEEK EQU 23; *< Seek not supported by stream.
MPG123_NO_READER EQU 24; *< No stream opened.
MPG123_BAD_PARS EQU 25; *< Bad parameter handle.
MPG123_BAD_INDEX_PAR EQU 26; *< Bad parameters to mpg123_index() and mpg123_set_index()
MPG123_OUT_OF_SYNC EQU 27; *< Lost track in bytestream and did not try to resync.
MPG123_RESYNC_FAIL EQU 28; *< Resync failed to find valid MPEG data.
MPG123_NO_8BIT EQU 29; *< No 8bit encoding possible.
MPG123_BAD_ALIGN EQU 30; *< Stack aligmnent error
MPG123_NULL_BUFFER EQU 31; *< NULL input buffer with non-zero size...
MPG123_NO_RELSEEK EQU 32; *< Relative seek not possible (screwed up file offset)
MPG123_NULL_POINTER EQU 33; *< You gave a null pointer somewhere where you shouldn't have.
MPG123_BAD_KEY EQU 34; *< Bad key value given.
MPG123_NO_INDEX EQU 35; *< No frame index in this build.
MPG123_INDEX_FAIL EQU 36; *< Something with frame index went wrong.
MPG123_BAD_DECODER_SETUP EQU 37; *< Something prevents a proper decoder setup
MPG123_MISSING_FEATURE EQU 38; *< This feature has not been built into libmpg123.
MPG123_BAD_VALUE EQU 39; *< A bad value has been given,somewhere.
MPG123_LSEEK_FAILED EQU 40; *< Low-level seek failed.
MPG123_BAD_CUSTOM_IO EQU 41; *< Custom I/O not prepared.
MPG123_LFS_OVERFLOW EQU 42; *< Offset value overflow during translation of large file API calls -- your client program cannot handle that large file.
; * Return a string describing that error errcode means.
mpg123_plain_strerror PROTO C :DWORD
; * Give string describing what error has occured in the context of handle mh.
; * When a function operating on an mpg123 handle returns MPG123_ERR,you should check for the actual reason via
; * char *errmsg = mpg123_strerror(mh)
; * This function will catch mh == NULL and return the message for MPG123_BAD_HANDLE.
mpg123_strerror PROTO C :DWORD
; * Return the plain errcode intead of a string.
mpg123_errcode PROTO C :DWORD
; * defgroup mpg123_decoder mpg123 decoder selection
; *
; * Functions to list and select the available decoders.
; * Perhaps the most prominent feature of mpg123:You have several (optimized) decoders to choose from (on x86 and PPC (MacOS) systems,that is).
; *
;
; * Return a NULL-terminated array of generally available decoder names (plain 8bit ASCII).
mpg123_decoders PROTO C
; * Return a NULL-terminated array of the decoders supported by the CPU (plain 8bit ASCII).
mpg123_supported_decoders PROTO C
; * Set the chosen decoder to 'decoder_name'
mpg123_decoder PROTO C :DWORD,:DWORD
; * Get the currently active decoder engine name.
; The active decoder engine can vary depening on output constraints,
; mostly non-resampling,integer output is accelerated via 3DNow & Co. but for other modes a fallback engine kicks in.
; Note that this can return a decoder that is ony active in the hidden and not available as decoder choice from the outside.
; return The decoder name or NULL on error.
mpg123_current_decoder PROTO C :DWORD
; * defgroup mpg123_output mpg123 output audio format
; *
; * Functions to get and select the format of the decoded audio.
; *
;
; * An enum over all sample types possibly known to mpg123.
; * The values are designed as bit flags to allow bitmasking for encoding families.
; *
; * Note that (your build of) libmpg123 does not necessarily support all these.
; * Usually,you can expect the 8bit encodings and signed 16 bit.
; * Also 32bit float will be usual beginning with mpg123-1.7.0 .
; * What you should bear in mind is that (SSE,etc) optimized routines may be absent
; * for some formats. We do have SSE for 16,32 bit and float,though.
; * 24 bit integer is done via postprocessing of 32 bit output -- just cutting
; * the last byte,no rounding,even. If you want better,do it yourself.
; *
; * All formats are in native byte order. If you need different endinaness,you
; * can simply postprocess the output buffers (libmpg123 wouldn't do anything else).
; * mpg123_encsize() can be helpful there.
;
MPG123_ENC_8 EQU 15 ; *< 0000 0000 1111 Some 8 bit integer encoding.
MPG123_ENC_16 EQU 64 ; *< 0000 0100 0000 Some 16 bit integer encoding.
MPG123_ENC_24 EQU 16384 ; *< 0100 0000 0000 0000 Some 24 bit integer encoding.
MPG123_ENC_32 EQU 256 ; *< 0001 0000 0000 Some 32 bit integer encoding.
MPG123_ENC_SIGNED EQU 128 ; *< 0000 1000 0000 Some signed integer encoding.
MPG123_ENC_FLOAT EQU 3584 ; *< 1110 0000 0000 Some float encoding.
MPG123_ENC_SIGNED_16 EQU 208 ; *< 1101 0000 signed 16 bit
MPG123_ENC_UNSIGNED_16 EQU 96 ; *< 0110 0000 unsigned 16 bit
MPG123_ENC_UNSIGNED_8 EQU 1 ; *< 0000 0001 unsigned 8 bit
MPG123_ENC_SIGNED_8 EQU 130 ; *< 1000 0010 signed 8 bit
MPG123_ENC_ULAW_8 EQU 4 ; *< 0000 0100 ulaw 8 bit
MPG123_ENC_ALAW_8 EQU 8 ; *< 0000 1000 alaw 8 bit
MPG123_ENC_SIGNED_32 EQU 4480 ; *< 0001 0001 1000 0000 signed 32 bit
MPG123_ENC_UNSIGNED_32 EQU 8448 ; *< 0010 0001 0000 0000 unsigned 32 bit
MPG123_ENC_SIGNED_24 EQU 20608 ; *< 0101 0000 1000 0000 signed 24 bit
MPG123_ENC_UNSIGNED_24 EQU 24576 ; *< 0110 0000 0000 0000 unsigned 24 bit
MPG123_ENC_FLOAT_32 EQU 512 ; *< 0010 0000 0000 32bit float
MPG123_ENC_FLOAT_64 EQU 1024 ; *< 0100 0000 0000 64bit float
MPG123_ENC_ANY EQU 30719 ; *< Any encoding on the list.
; * They can be combined into one number (3) to indicate mono and stereo...
;//enum mpg123_channelcount
MPG123_MONO EQU 1
MPG123_STEREO EQU 2
; * An array of supported standard sample rates
; * These are possible native sample rates of MPEG audio files.
; * You can still force mpg123 to resample to a different one,but by default you will only get audio in one of these samplings.
; * param list Store a pointer to the sample rates array there.
; * param number Store the number of sample rates there.
mpg123_rates PROTO C : DWORD,:DWORD
; * An array of supported audio encodings.
; * An audio encoding is one of the fully qualified members of mpg123_enc_enum (MPG123_ENC_SIGNED_16,not MPG123_SIGNED).
; * param list Store a pointer to the encodings array there.
; * param number Store the number of encodings there.
mpg123_encodings PROTO C : DWORD,:DWORD
; * Return the size (in bytes) of one mono sample of the named encoding.
; * param encoding The encoding value to analyze.
; * return positive size of encoding in bytes,0 on invalid encoding.
mpg123_encsize PROTO C :DWORD
; * Configure a mpg123 handle to accept no output format at all,
; * use before specifying supported formats with mpg123_format
mpg123_format_none PROTO C :DWORD
; * Configure mpg123 handle to accept all formats
; * (also any custom rate you may set) -- this is default.
mpg123_format_all PROTO C :DWORD
; * Set the audio format support of a DWORD in detail:
; * param mh audio decoder handle
; * param rate The sample rate value (in Hertz).
; * param channels A combination of MPG123_STEREO and MPG123_MONO.
; * param encodings A combination of accepted encodings for rate and channels,p.ex MPG123_ENC_SIGNED16 | MPG123_ENC_ULAW_8 (or 0 for no support).
; * Please note that some encodings may not be supported in the library build and thus will be ignored here.
; * return MPG123_OK on success,MPG123_ERR if there was an error.
mpg123_format PROTO C :DWORD,:DWORD,:DWORD,:DWORD
; * Check to see if a specific format at a specific rate is supported
; * by DWORD.
; * return 0 for no support (that includes invalid parameters),MPG123_STEREO,
; * MPG123_MONO or MPG123_STEREO|MPG123_MONO.
mpg123_format_support PROTO C :DWORD,:DWORD,:DWORD
; * Get the current output format written to the addresses givenr.
mpg123_getformat PROTO C :DWORD,:DWORD,:DWORD,:DWORD
; * defgroup mpg123_input mpg123 file input and decoding
; *
; * Functions for input bitstream and decoding operations.
; * Decoding/seek functions may also return message codes MPG123_DONE,MPG123_NEW_FORMAT and MPG123_NEED_MORE (please read up on these on how to react!).
;
; reading samples / triggering decoding,possible return values:
; * Enumeration of the error codes returned by libmpg123 functions.
; * Open and prepare to decode the specified file by filesystem path.
; * This does not open HTTP urls; libmpg123 contains no networking code.
; * If you want to decode internet streams,use mpg123_open_fd() or mpg123_open_feed().
;
mpg123_open PROTO C :DWORD,:DWORD
; * Use an already opened file descriptor as the bitstream input
; * mpg123_close() will _not_ close the file descriptor.
;
mpg123_open_fd PROTO C
; * Use an opaque handle as bitstream input. This works only with the
; * replaced I/O from mpg123_replace_reader_handle()!
; * mpg123_close() will call the cleanup callback for your handle (if you gave one).
;
mpg123_open_handle PROTO C :DWORD,:DWORD
; * Open a new bitstream and prepare for direct feeding
; * This works together with mpg123_decode(); you are responsible for reading and feeding the input bitstream.
;
mpg123_open_feed PROTO C :DWORD
; * Closes the source,if libmpg123 opened it.
mpg123_close PROTO C :DWORD
; * Read from stream and decode up to outmemsize bytes.
; * param outmemory address of output buffer to write to
; * param outmemsize maximum number of bytes to write
; * param done address to store the number of actually decoded bytes to
; * return error/message code (watch out for MPG123_DONE and friends!)
mpg123_read PROTO C :DWORD,:DWORD,:DWORD,:DWORD
; * Feed data for a stream that has been opened with mpg123_open_feed().
; * It's give and take:You provide the bytestream,mpg123 gives you the decoded samples.
; * param in input buffer
; * param size number of input bytes
; * return error/message code.
mpg123_feed PROTO C :DWORD,:DWORD,:DWORD
; * Decode MPEG Audio from inmemory to outmemory.
; * This is very close to a drop-in replacement for old mpglib.
; * When you give zero-sized output buffer the input will be parsed until
; * decoded data is available. This enables you to get MPG123_NEW_FORMAT (and query it)
; * without taking decoded data.
; * Think of this function being the union of mpg123_read() and mpg123_feed() (which it actually is,sort of;-).
; * You can actually always decide if you want those specialized functions in separate steps or one call this one here.
; * param inmemory input buffer
; * param inmemsize number of input bytes
; * param outmemory output buffer
; * param outmemsize maximum number of output bytes
; * param done address to store the number of actually decoded bytes to
; * return error/message code (watch out especially for MPG123_NEED_MORE)
;
mpg123_decode PROTO C :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
; * Decode next MPEG frame to internal buffer
; * or read a frame and return after setting a new format.
; * param num current frame offset gets stored there
; * param audio This pointer is set to the internal buffer to read the decoded audio from.
; * param bytes number of output bytes ready in the buffer
;
mpg123_decode_frame PROTO C :DWORD,:DWORD,: DWORD,:DWORD
; * Decode current MPEG frame to internal buffer.
; * Warning:This is experimental API that might change in future releases!
; * Please watch mpg123 development closely when using it.
; * param num last frame offset gets stored there
; * param audio this pointer is set to the internal buffer to read the decoded audio from.
; * param bytes number of output bytes ready in the buffer
;
mpg123_framebyframe_decode PROTO C :DWORD,:DWORD,: DWORD,:DWORD
; * Find,read and parse the next mp3 frame
; * Warning:This is experimental API that might change in future releases!
; * Please watch mpg123 development closely when using it.
;
mpg123_framebyframe_next PROTO C :DWORD
; * defgroup mpg123_seek mpg123 position and seeking
; *
; * Functions querying and manipulating position in the decoded audio bitstream.
; * The position is measured in decoded audio samples,or MPEG frame offset for the specific functions.
; * If gapless code is in effect,the positions are adjusted to compensate the skipped padding/delay
; - meaning,you should not care about that at all and just use the position defined for the samples you get out of the decoder;-)
; * The general usage is modelled after stdlib's ftell() and fseek().
; * Especially,the whence parameter for the seek functions has the same meaning as the one for fseek() and needs the same constants from stdlib.h:
; * - SEEK_SET:set position to (or near to) specified offset
; * - SEEK_CUR:change position by offset from now
; * - SEEK_END:set position to offset from end
; *
; * Note that sample-accurate seek only works when gapless support has been enabled at compile time; seek is frame-accurate otherwise.
; * Also,really sample-accurate seeking (meaning that you get the identical sample value after seeking compared to plain decoding up to the position)
; * is only guaranteed when you do not mess with the position code by using MPG123_UPSPEED,MPG123_DOWNSPEED or MPG123_START_FRAME.
; * The first two mainly should cause trouble with NtoM resampling,but in any case with these options in effect,
; * you have to keep in mind that the sample offset is not the same as counting the samples you get from decoding since mpg123 counts the skipped samples,
; * too (or the samples played twice only once)!
; * Short:When you care about the sample position,don't mess with those parameters;-)
; * Also,seeking is not guaranteed to work for all streams (underlying stream may not support it).
; *
;
; * Returns the current position in samples.
; * On the next read,you'd get that sample.
mpg123_tell PROTO C :DWORD
; * Returns the frame number that the next read will give you data from.
mpg123_tellframe PROTO C :DWORD
; * Returns the current byte offset in the input stream.
mpg123_tell_stream PROTO C :DWORD
; * Seek to a desired sample offset.
; * Set whence to SEEK_SET,SEEK_CUR or SEEK_END.
; * return The resulting offset >= 0 or error/message code
mpg123_seek PROTO C :DWORD,:DWORD,:DWORD
; * Seek to a desired sample offset in data feeding mode.
; * This just prepares things to be right only if you ensure that the next chunk of input data will be from input_offset byte position.
; * param input_offset The position it expects to be at the
; * next time data is fed to mpg123_decode().
; * return The resulting offset >= 0 or error/message code
mpg123_feedseek PROTO C :DWORD,:DWORD,:DWORD,:DWORD
; * Seek to a desired MPEG frame index.
; * Set whence to SEEK_SET,SEEK_CUR or SEEK_END.
; * return The resulting offset >= 0 or error/message code
mpg123_seek_frame PROTO C :DWORD,:DWORD,:DWORD
; * Return a MPEG frame offset corresponding to an offset in seconds.
; * This assumes that the samples per frame do not change in the file/stream,which is a good assumption for any sane file/stream only.
; * return frame offset >= 0 or error/message code
mpg123_timeframe PROTO C :DWORD,:REAL8
; * Give access to the frame index table that is managed for seeking.
; * You are asked not to modify the values... Use mpg123_set_index to set the
; * seek index
; * param offsets pointer to the index array
; * param step one index byte offset advances this many MPEG frames
; * param fill number of recorded index offsets; size of the array
mpg123_index PROTO C :DWORD,: DWORD,:DWORD,:DWORD
; * Set the frame index table
; * Setting offsets to NULL and fill > 0 will allocate fill entries. Setting offsets
; * to NULL and fill to 0 will clear the index and free the allocated memory used by the index.
; * param offsets pointer to the index array
; * param step one index byte offset advances this many MPEG frames
; * param fill number of recorded index offsets; size of the array
mpg123_set_index PROTO C :DWORD,:DWORD,:DWORD,:DWORD
; * Get information about current and remaining frames/seconds.
; * WARNING:This function is there because of special usage by standalone mpg123 and may be removed in the final version of libmpg123!
; * You provide an offset (in frames) from now and a number of output bytes
; * served by libmpg123 but not yet played. You get the projected current frame
; * and seconds,as well as the remaining frames/seconds. This does _not_ care
; * about skipped samples due to gapless playback.
mpg123_position PROTO C :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
; * defgroup mpg123_voleq mpg123 volume and equalizer
; *
;//enum mpg123_channels
MPG123_LEFT EQU 1; *< The Left Channel.
MPG123_RIGHT EQU 2; *< The Right Channel.
MPG123_LR EQU 3; *< Both left and right channel; same as MPG123_LEFT|MPG123_RIGHT
; * Set the 32 Band Audio Equalizer settings.
; * param channel Can be MPG123_LEFT,MPG123_RIGHT or MPG123_LEFT|MPG123_RIGHT for both.
; * param band The equaliser band to change (from 0 to 31)
; * param val The (linear) adjustment factor.
mpg123_eq PROTO C :DWORD,:DWORD,:DWORD,:REAL8
; * Get the 32 Band Audio Equalizer settings.
; * param channel Can be MPG123_LEFT,MPG123_RIGHT or MPG123_LEFT|MPG123_RIGHT for (arithmetic mean of) both.
; * param band The equaliser band to change (from 0 to 31)
; * return The (linear) adjustment factor.
mpg123_geteq PROTO C :DWORD,:DWORD,:DWORD
; * Reset the 32 Band Audio Equalizer settings to flat
mpg123_reset_eq PROTO C :DWORD
; * Set the absolute output volume including the RVA setting,
; * vol<0 just applies (a possibly changed) RVA setting.
mpg123_volume PROTO C :DWORD,:REAL8
; * Adjust output volume including the RVA setting by chosen amount
mpg123_volume_change PROTO C :DWORD,:REAL8
; * Return current volume setting,the actual value due to RVA,and the RVA
; * adjustment itself. It's all as double float value to abstract the sample
; * format. The volume values are linear factors / amplitudes (not percent)
; * and the RVA value is in decibels.
mpg123_getvolume PROTO C :DWORD,:DWORD,:DWORD,:DWORD
; TODO:Set some preamp in addition / to replace internal RVA handling?
; * defgroup mpg123_status mpg123 status and information
; *
;
; * Enumeration of the mode types of Variable Bitrate
MPG123_CBR EQU 0; *< Constant Bitrate Mode (default)
MPG123_VBR EQU 1; *< Variable Bitrate Mode
MPG123_ABR EQU 2; *< Average Bitrate Mode
; * Enumeration of the MPEG Versions
MPG123_1_0 EQU 0; *< MPEG Version 1.0
MPG123_2_0 EQU 1; *< MPEG Version 2.0
MPG123_2_5 EQU 2; *< MPEG Version 2.5
; * Enumeration of the MPEG Audio mode.
; * Only the mono mode has 1 channel,the others have 2 channels.
MPG123_M_STEREO EQU 0; *< Standard Stereo.
MPG123_M_JOINT EQU 1; *< Joint Stereo.
MPG123_M_DUAL EQU 2; *< Dual Channel.
MPG123_M_MONO EQU 3; *< Single Channel.
; * Enumeration of the MPEG Audio flag bits
MPG123_CRC EQU 1; *< The bitstream is error protected using 16-bit CRC.
MPG123_COPYRIGHT EQU 2; *< The bitstream is copyrighted.
MPG123_PRIVATE EQU 4; *< The private bit has been set.
MPG123_ORIGINAL EQU 8; *< The bitstream is an original,not a copy.
; * Data structure for storing information about a frame of MPEG Audio
; *< The MPEG version (1.0/2.0/2.5).
; *< The MPEG Audio Layer (MP1/MP2/MP3).
; *< The sampling rate in Hz.
; *< The audio mode (Mono,Stereo,Joint-stero,Dual Channel).
; *< The mode extension bit flag.
; *< The size of the frame (in bytes).
; *< MPEG Audio flag bits. Just now I realize that it should be declared as int,not enum. It's a bitwise combination of the enum values.
; *< The emphasis type.
; *< Bitrate of the frame (kbps).
; *< The target average bitrate.
; *< The VBR mode.
mpg123_frameinfo STRUCT
version DWORD ?
layer DWORD ?
rate DWORD ?
mode DWORD ?
mode_ext DWORD ?
framesize DWORD ?
flags DWORD ?
emphasis DWORD ?
bitrate DWORD ?
abr_rate DWORD ?
vbr DWORD ?
mpg123_frameinfo ENDS
; * Get frame information about the MPEG audio bitstream and store it in a mpg123_frameinfo structure.
mpg123_info PROTO C :DWORD,:DWORD
; * Get the safe output buffer size for all cases (when you want to replace the internal buffer)
mpg123_safe_buffer PROTO C
; * Make a full parsing scan of each frame in the file. ID3 tags are found. An accurate length
; * value is stored. Seek index will be filled. A seek back to current position
; * is performed. At all,this function refuses work when stream is
; * not seekable.
; * return MPG123_OK or MPG123_ERR.
;
mpg123_scan PROTO C :DWORD
; * Return,if possible,the full (expected) length of current track in samples.
; * return length >= 0 or MPG123_ERR if there is no length guess possible.
mpg123_length PROTO C :DWORD
; * Override the value for file size in bytes.
; * Useful for getting sensible track length values in feed mode or for HTTP streams.
; * return MPG123_OK or MPG123_ERR
mpg123_set_filesize PROTO C :DWORD,:DWORD
; * Returns the time (seconds) per frame; <0 is error.
mpg123_tpf PROTO C :DWORD
; * Get and reset the clip count.
mpg123_clip PROTO C :DWORD
; * The key values for state information from mpg123_getstate().
;//enum mpg123_state
MPG123_ACCURATE EQU 1; *< Query if positons are currently accurate (integer value,0 if false,1 if true)
; * Get various current decoder/stream state information.
; * param key the key to identify the information to give.
; * param val the address to return (long) integer values to
; * param fval the address to return floating point values to
; * return MPG123_OK or MPG123_ERR for success
;
mpg123_getstate PROTO C :DWORD,:DWORD,:DWORD,:DWORD
; * defgroup mpg123_metadata mpg123 metadata handling
; *
; * Functions to retrieve the metadata from MPEG Audio files and streams.
; * Also includes string handling functions.
; *
;
; * Data structure for storing strings in a safer way than a standard C-String.
; * Can also hold a number of null-terminated strings.
; *< pointer to the string data
; *< raw number of bytes allocated
; *< number of used bytes (including closing zero byte)
mpg123_string STRUCT
p DWORD ?
_size DWORD ?
fill DWORD ?
mpg123_string ENDS
; * Create and allocate memory for a new mpg123_string
mpg123_init_string PROTO C :DWORD
; * Free-up mempory for an existing mpg123_string
mpg123_free_string PROTO C :DWORD
; * Change the size of a mpg123_string
; * return 0 on error,1 on success
mpg123_resize_string PROTO C :DWORD,:DWORD
; * Increase size of a mpg123_string if necessary (it may stay larger).
; * Note that the functions for adding and setting in current libmpg123 use this instead of mpg123_resize_string().
; * That way,you can preallocate memory and safely work afterwards with pieces.
; * return 0 on error,1 on success
mpg123_grow_string PROTO C :DWORD,:DWORD
; * Copy the contents of one mpg123_string string to another.
; * return 0 on error,1 on success
mpg123_copy_string PROTO C :DWORD,:DWORD
; * Append a C-String to an mpg123_string
; * return 0 on error,1 on success
mpg123_add_string PROTO C :DWORD,:DWORD
; * Append a C-substring to an mpg123 string
; * return 0 on error,1 on success
; * param from offset to copy from
; * param count number of characters to copy (a null-byte is always appended)
mpg123_add_substring PROTO C :DWORD,:DWORD,:DWORD,:DWORD
; * Set the conents of a mpg123_string to a C-string
; * return 0 on error,1 on success
mpg123_set_string PROTO C :DWORD,:DWORD
; * Set the contents of a mpg123_string to a C-substring
; * return 0 on error,1 on success
; * param from offset to copy from
; * param count number of characters to copy (a null-byte is always appended)
mpg123_set_substring PROTO C :DWORD,:DWORD,:DWORD,:DWORD
; * Count characters in a mpg123 string (non-null bytes or UTF-8 characters).
; * return character count
; * param sb the string
; * param utf8 a flag to tell if the string is in utf8 encoding
; * Even with the fill property,the character count is not obvious as there could be multiple trailing null bytes.
;
mpg123_strlen PROTO C :DWORD,:DWORD
; * The mpg123 text encodings. This contains encodings we encounter in ID3 tags or ICY meta info.
;//enum mpg123_text_encoding
mpg123_text_unknown EQU 0; *< Unkown encoding... mpg123_id3_encoding can return that on invalid codes.
mpg123_text_utf8 EQU 1; *< UTF-8
mpg123_text_latin1 EQU 2; *< ISO-8859-1. Note that sometimes latin1 in ID3 is abused for totally different encodings.
mpg123_text_icy EQU 3; *< ICY metadata encoding,usually CP-1252 but we take it as UTF-8 if it qualifies as such.
mpg123_text_cp1252 EQU 4; *< Really CP-1252 without any guessing.
mpg123_text_utf16 EQU 5; *< Some UTF-16 encoding. The last of a set of leading BOMs (byte order mark) rules.
; * When there is no BOM,big endian ordering is used. Note that UCS-2 qualifies as UTF-8 when
; * you don't mess with the reserved code points. If you want to decode little endian data
; * without BOM you need to prepend 0xff 0xfe yourself.
mpg123_text_utf16bom EQU 6; *< Just an alias for UTF-16,ID3v2 has this as distinct code.
mpg123_text_utf16be EQU 7; *< Another alias for UTF16 from ID3v2. Note,that,because of the mess that is reality,
; * BOMs are used if encountered. There really is not much distinction between the UTF16 types for mpg123
; * One exception:Since this is seen in ID3v2 tags,leading null bytes are skipped for all other UTF16
; * types (we expect a BOM before real data there),not so for utf16be!
mpg123_text_max EQU 7; *< Placeholder for the maximum encoding value.
; * The encoding byte values from ID3v2.
;//enum mpg123_id3_enc
mpg123_id3_latin1 EQU 0; *< Note:This sometimes can mean anything in practice...
mpg123_id3_utf16bom EQU 1; *< UTF16,UCS-2 ... it's all the same for practical purposes.
mpg123_id3_utf16be EQU 2; *< Big-endian UTF-16,BOM see note for mpg123_text_utf16be.
mpg123_id3_utf8 EQU 3; *< Our lovely overly ASCII-compatible 8 byte encoding for the world.
mpg123_id3_enc_max EQU 3; *< Placeholder to check valid range of encoding byte.
; * Convert ID3 encoding byte to mpg123 encoding index.
mpg123_enc_from_id3 PROTO C :BYTE
; * Store text data in string,after converting to UTF-8 from indicated encoding
; * return 0 on error,1 on success (on error,mpg123_free_string is called on sb)
; * param sb target string
; * param enc mpg123 text encoding value
; * param source source buffer with plain unsigned bytes (you might need to cast from char *)
; * param source_size number of bytes in the source buffer
; *
; * A prominent error can be that you provided an unknown encoding value,or this build of libmpg123 lacks support for certain encodings (ID3 or ICY stuff missing).
; * Also,you might want to take a bit of care with preparing the data; for example,strip leading zeroes (I have seen that).
mpg123_store_utf8 PROTO C :DWORD,:DWORD,:DWORD,:DWORD
; * Sub data structure for ID3v2,for storing various text fields (including comments).
; * This is for ID3v2 COMM,TXXX and all the other text fields.
; * Only COMM and TXXX have a description,only COMM and USLT have a language.
; * You should consult the ID3v2 specification for the use of the various text fields ("frames" in ID3v2 documentation,I use "fields" here to separate from MPEG frames).
; *< Three-letter language code (not terminated).
; *< The ID3v2 text field id,like TALB,TPE2,... (4 characters,no string termination).
; *< Empty for the generic comment...
; *< ...
mpg123_text STRUCT
lang BYTE 3 DUP (?)
id BYTE 4 DUP (?)
description mpg123_string <>
text mpg123_string <>
mpg123_text ENDS
; * Data structure for storing IDV3v2 tags.
; * This structure is not a direct binary mapping with the file contents.
; * The ID3v2 text frames are allowed to contain multiple strings.
; * So check for null bytes until you reach the mpg123_string fill.
; * All text is encoded in UTF-8.
; *< 3 or 4 for ID3v2.3 or ID3v2.4.
; *< The array of extra (TXXX) fields.
; *< Number of extra text (TXXX) fields.
mpg123_id3v2 STRUCT
version DWORD ?
_title DWORD ?
artist DWORD ?
album DWORD ?
year DWORD ?
genre DWORD ?
_comment DWORD ?
comment_list DWORD ?
comments DWORD ?
text DWORD ?
texts DWORD ?
extra DWORD ?
extras DWORD ?
mpg123_id3v2 ENDS
; * Data structure for ID3v1 tags (the last 128 bytes of a file).
; * Don't take anything for granted (like string termination)!
; * Also note the change ID3v1.1 did:comment[28] = 0; comment[19] = track_number
; * It is your task to support ID3v1 only or ID3v1.1 ...
; *< Always the string "TAG",the classic intro.
; *< Title string.
; *< Artist string.
; *< Album string.
; *< Year string.
; *< Comment string.
; *< Genre index.
mpg123_id3v1 STRUCT
tag BYTE 3 DUP (?)
_title BYTE 30 DUP (?)
artist BYTE 30 DUP (?)
album BYTE 30 DUP (?)
year BYTE 4 DUP (?)
_comment BYTE 30 DUP (?)
genre BYTE ?
mpg123_id3v1 ENDS
MPG123_ID3 EQU 3h; *< 0011 There is some ID3 info. Also matches 0010 or NEW_ID3.
MPG123_NEW_ID3 EQU 1h; *< 0001 There is ID3 info that changed since last call to mpg123_id3.
MPG123_ICY EQU 0ch; *< 1100 There is some ICY info. Also matches 0100 or NEW_ICY.
MPG123_NEW_ICY EQU 4h; *< 0100 There is ICY info that changed since last call to mpg123_icy.
; * Query if there is (new) meta info,be it ID3 or ICY (or something new in future).
; The check function returns a combination of flags.
mpg123_meta_check PROTO C :DWORD
; On error (no valid handle) just 0 is returned.
; * Point v1 and v2 to existing data structures wich may change on any next read/decode function call.
; * v1 and/or v2 can be set to NULL when there is no corresponding data.
; * return Return value is MPG123_OK or MPG123_ERR,
mpg123_id3 PROTO C :DWORD,: DWORD,: DWORD
; * Point icy_meta to existing data structure wich may change on any next read/decode function call.
; * return Return value is MPG123_OK or MPG123_ERR,
mpg123_icy PROTO C :DWORD,: DWORD
; same for ICY meta string
; * Decode from windows-1252 (the encoding ICY metainfo used) to UTF-8.
; * Note that this is very similar to mpg123_store_utf8(&sb,mpg123_text_icy,icy_text,strlen(icy_text+1)) .
; * param icy_text The input data in ICY encoding
; * return pointer to newly allocated buffer with UTF-8 data (You free() it!)
mpg123_icy2utf8 PROTO C :DWORD
; * defgroup mpg123_advpar mpg123 advanced parameter API
; *
; * Direct access to a parameter set without full handle around it.
; * Possible uses:
; * - Influence behaviour of library _during_ initialization of handle (MPG123_VERBOSE).
; * - Use one set of parameters for multiple handles.
; *
; * The functions for handling mpg123_pars (mpg123_par() and mpg123_fmt()
; * family) directly return a fully qualified mpg123 error code,the ones
; * operating on full handles normally MPG123_OK or MPG123_ERR,storing the
; * specific error code itseld inside the handle.
; *
;
; * Opaque structure for the libmpg123 decoder parameters.
; * Opaque structure for the libmpg123 decoder parameters.
; * Create a handle with preset parameters.
mpg123_parnew PROTO C :DWORD,:DWORD,:DWORD
; * Allocate memory for and return a pointer to a new mpg123_pars
mpg123_new_pars PROTO C :DWORD
; * Delete and free up memory used by a mpg123_pars data structure
mpg123_delete_pars PROTO C :DWORD
; * Configure mpg123 parameters to accept no output format at all,
; * use before specifying supported formats with mpg123_format
mpg123_fmt_none PROTO C :DWORD
; * Configure mpg123 parameters to accept all formats
; * (also any custom rate you may set) -- this is default.
mpg123_fmt_all PROTO C :DWORD
; * Set the audio format support of a mpg123_pars in detail:
; param rate The sample rate value (in Hertz).
; param channels A combination of MPG123_STEREO and MPG123_MONO.
; param encodings A combination of accepted encodings for rate and channels,p.ex MPG123_ENC_SIGNED16|MPG123_ENC_ULAW_8 (or 0 for no support).
; return 0 on success,-1 if there was an error. /
;
mpg123_fmt PROTO C :DWORD,:DWORD,:DWORD,:DWORD
; 0 is good,-1 is error
; * Check to see if a specific format at a specific rate is supported
; * by mpg123_pars.
; * return 0 for no support (that includes invalid parameters),MPG123_STEREO,
; * MPG123_MONO or MPG123_STEREO|MPG123_MONO.
mpg123_fmt_support PROTO C :DWORD,:DWORD,:DWORD
; * Set a specific parameter,for a specific mpg123_pars,using a parameter
; * type key chosen from the mpg123_parms enumeration,to the specified value.
mpg123_par PROTO C :DWORD,:DWORD,:DWORD,:REAL8
; * Get a specific parameter,for a specific mpg123_pars.
; * See the mpg123_parms enumeration for a list of available parameters.
mpg123_getpar PROTO C :DWORD,:DWORD,:DWORD,:DWORD
; * defgroup mpg123_lowio mpg123 low level I/O
; * You may want to do tricky stuff with I/O that does not work with mpg123's default file access or you want to make it decode into your own pocket...
; *
; * Replace default internal buffer with user-supplied buffer.
; * Instead of working on it's own private buffer,mpg123 will directly use the one you provide for storing decoded audio.
mpg123_replace_buffer PROTO C :DWORD,:DWORD,:DWORD
; * The max size of one frame's decoded output with current settings.
; * Use that to determine an appropriate minimum buffer size for decoding one frame.
mpg123_outblock PROTO C :DWORD
; * Replace low-level stream access functions; read and lseek as known in POSIX.
; * You can use this to make any fancy file opening/closing yourself,
; * using mpg123_open_fd() to set the file descriptor for your read/lseek (doesn't need to be a "real" file descriptor...).
; * Setting a function to NULL means that the default internal read is
; * used (active from next mpg123_open call on).
; * Note:As it would be troublesome to mess with this while having a file open,
; * this implies mpg123_close().
mpg123_replace_reader PROTO C :DWORD,:DWORD,:DWORD
; * Replace I/O functions with your own ones operating on some kind of handle instead of integer descriptors.
; * The handle is a void pointer,so you can pass any data you want...
; * mpg123_open_handle() is the call you make to use the I/O defined here.
; * There is no fallback to internal read/seek here.
; * Note:As it would be troublesome to mess with this while having a file open,
; * this mpg123_close() is implied here.
; * param r_read The callback for reading (behaviour like posix read).
; * param r_lseek The callback for seeking (like posix lseek).
; * param cleanup A callback to clean up an I/O handle on mpg123_close,can be NULL for none (you take care of cleaning your handles).
mpg123_replace_reader_handle PROTO C :DWORD,:DWORD,:DWORD,:DWORD
;
; End of file mpg123.h