00001
00002
00003
00004
00005
00006
00007
00008 #ifndef MPG123_LIB_H
00009 #define MPG123_LIB_H
00010
00013
00014 #ifdef BUILD_MPG123_DLL
00015
00016 #define EXPORT __declspec(dllexport)
00017 #else
00018 #ifdef LINK_MPG123_DLL
00019
00020 #define EXPORT __declspec(dllimport)
00021 #else
00022
00023 #define EXPORT
00024 #endif
00025 #endif
00026
00027 #include <stdlib.h>
00028 #include <sys/types.h>
00029
00030
00031 #ifdef __cplusplus
00032 extern "C" {
00033 #endif
00034
00045 struct mpg123_handle_struct;
00046
00050 typedef struct mpg123_handle_struct mpg123_handle;
00051
00057 EXPORT int mpg123_init(void);
00058
00061 EXPORT void mpg123_exit(void);
00062
00069 EXPORT mpg123_handle *mpg123_new(const char* decoder, int *error);
00070
00072 EXPORT void mpg123_delete(mpg123_handle *mh);
00073
00075 enum mpg123_parms
00076 {
00077 MPG123_VERBOSE,
00078 MPG123_FLAGS,
00079 MPG123_ADD_FLAGS,
00080 MPG123_FORCE_RATE,
00081 MPG123_DOWN_SAMPLE,
00082 MPG123_RVA,
00083 MPG123_DOWNSPEED,
00084 MPG123_UPSPEED,
00085 MPG123_START_FRAME,
00086 MPG123_DECODE_FRAMES,
00087 MPG123_ICY_INTERVAL,
00088 MPG123_OUTSCALE,
00089 MPG123_TIMEOUT,
00090 MPG123_REMOVE_FLAGS,
00091 MPG123_RESYNC_LIMIT
00092 };
00093
00095 enum mpg123_param_flags
00096 {
00097 MPG123_FORCE_MONO = 0x7
00098 ,MPG123_MONO_LEFT = 0x1
00099 ,MPG123_MONO_RIGHT = 0x2
00100 ,MPG123_MONO_MIX = 0x4
00101 ,MPG123_FORCE_STEREO = 0x8
00102 ,MPG123_FORCE_8BIT = 0x10
00103 ,MPG123_QUIET = 0x20
00104 ,MPG123_GAPLESS = 0x40
00105 ,MPG123_NO_RESYNC = 0x80
00106 ,MPG123_SEEKBUFFER = 0x100
00107 };
00108
00110 enum mpg123_param_rva
00111 {
00112 MPG123_RVA_OFF = 0
00113 ,MPG123_RVA_MIX = 1
00114 ,MPG123_RVA_ALBUM = 2
00115 ,MPG123_RVA_MAX = MPG123_RVA_ALBUM
00116 };
00117
00118
00119
00122 EXPORT int mpg123_param(mpg123_handle *mh, enum mpg123_parms type, long value, double fvalue);
00123
00126 EXPORT int mpg123_getparam(mpg123_handle *mh, enum mpg123_parms type, long *val, double *fval);
00127
00128
00129
00130
00144 enum mpg123_errors
00145 {
00146 MPG123_DONE=-12,
00147 MPG123_NEW_FORMAT=-11,
00148 MPG123_NEED_MORE=-10,
00149 MPG123_ERR=-1,
00150 MPG123_OK=0,
00151 MPG123_BAD_OUTFORMAT,
00152 MPG123_BAD_CHANNEL,
00153 MPG123_BAD_RATE,
00154 MPG123_ERR_16TO8TABLE,
00155 MPG123_BAD_PARAM,
00156 MPG123_BAD_BUFFER,
00157 MPG123_OUT_OF_MEM,
00158 MPG123_NOT_INITIALIZED,
00159 MPG123_BAD_DECODER,
00160 MPG123_BAD_HANDLE,
00161 MPG123_NO_BUFFERS,
00162 MPG123_BAD_RVA,
00163 MPG123_NO_GAPLESS,
00164 MPG123_NO_SPACE,
00165 MPG123_BAD_TYPES,
00166 MPG123_BAD_BAND,
00167 MPG123_ERR_NULL,
00168 MPG123_ERR_READER,
00169 MPG123_NO_SEEK_FROM_END,
00170 MPG123_BAD_WHENCE,
00171 MPG123_NO_TIMEOUT,
00172 MPG123_BAD_FILE,
00173 MPG123_NO_SEEK,
00174 MPG123_NO_READER,
00175 MPG123_BAD_PARS,
00176 MPG123_BAD_INDEX_PAR,
00177 MPG123_OUT_OF_SYNC,
00178 MPG123_RESYNC_FAIL,
00179 MPG123_NO_8BIT,
00180 MPG123_BAD_ALIGN,
00181 MPG123_NULL_BUFFER
00182 };
00183
00185 EXPORT const char* mpg123_plain_strerror(int errcode);
00186
00191 EXPORT const char* mpg123_strerror(mpg123_handle *mh);
00192
00194 EXPORT int mpg123_errcode(mpg123_handle *mh);
00195
00208 EXPORT char **mpg123_decoders();
00209
00211 EXPORT char **mpg123_supported_decoders();
00212
00214 EXPORT int mpg123_decoder(mpg123_handle *mh, const char* decoder_name);
00215
00229 enum mpg123_enc_enum
00230 {
00231 MPG123_ENC_8 = 0x00f
00232 ,MPG123_ENC_16 = 0x040
00233 ,MPG123_ENC_32 = 0x100
00234 ,MPG123_ENC_SIGNED = 0x080
00235 ,MPG123_ENC_FLOAT = 0x800
00236 ,MPG123_ENC_SIGNED_16 = (MPG123_ENC_16|MPG123_ENC_SIGNED|0x10)
00237 ,MPG123_ENC_UNSIGNED_16 = (MPG123_ENC_16|0x20)
00238 ,MPG123_ENC_UNSIGNED_8 = 0x01
00239 ,MPG123_ENC_SIGNED_8 = (MPG123_ENC_SIGNED|0x02)
00240 ,MPG123_ENC_ULAW_8 = 0x04
00241 ,MPG123_ENC_ALAW_8 = 0x08
00242 ,MPG123_ENC_SIGNED_32 = MPG123_ENC_32|MPG123_ENC_SIGNED|0x10
00243 ,MPG123_ENC_UNSIGNED_32 = MPG123_ENC_32|0x20
00244 ,MPG123_ENC_FLOAT_32 = 0x200
00245 ,MPG123_ENC_FLOAT_64 = 0x400
00246 ,MPG123_ENC_ANY = ( MPG123_ENC_SIGNED_16 | MPG123_ENC_UNSIGNED_16 | MPG123_ENC_UNSIGNED_8
00247 | MPG123_ENC_SIGNED_8 | MPG123_ENC_ULAW_8 | MPG123_ENC_ALAW_8
00248 | MPG123_ENC_FLOAT_32 | MPG123_ENC_FLOAT_64 )
00249 };
00250
00252 enum mpg123_channelcount
00253 {
00254 MPG123_MONO = 1
00255 ,MPG123_STEREO = 2
00256 };
00257
00263 EXPORT void mpg123_rates(const long **list, size_t *number);
00264
00269 EXPORT void mpg123_encodings(const int **list, size_t *number);
00270
00273 EXPORT int mpg123_format_none(mpg123_handle *mh);
00274
00277 EXPORT int mpg123_format_all(mpg123_handle *mh);
00278
00285 EXPORT int mpg123_format(mpg123_handle *mh, long rate, int channels, int encodings);
00286
00291 EXPORT int mpg123_format_support(mpg123_handle *mh, long rate, int encoding);
00292
00294 EXPORT int mpg123_getformat(mpg123_handle *mh, long *rate, int *channels, int *encoding);
00295
00306
00313 EXPORT int mpg123_open(mpg123_handle *mh, const char *path);
00314
00318 EXPORT int mpg123_open_fd(mpg123_handle *mh, int fd);
00319
00323 EXPORT int mpg123_open_feed(mpg123_handle *mh);
00324
00326 EXPORT int mpg123_close(mpg123_handle *mh);
00327
00333 EXPORT int mpg123_read(mpg123_handle *mh, unsigned char *outmemory, size_t outmemsize, size_t *done);
00334
00340 EXPORT int mpg123_feed(mpg123_handle *mh, const unsigned char *in, size_t size);
00341
00356 EXPORT int mpg123_decode(mpg123_handle *mh, const unsigned char *inmemory, size_t inmemsize,
00357 unsigned char *outmemory, size_t outmemsize, size_t *done);
00358
00365 EXPORT int mpg123_decode_frame(mpg123_handle *mh, off_t *num, unsigned char **audio, size_t *bytes);
00366
00389 EXPORT off_t mpg123_tell(mpg123_handle *mh);
00390
00392 EXPORT off_t mpg123_tellframe(mpg123_handle *mh);
00393
00397 EXPORT off_t mpg123_seek(mpg123_handle *mh, off_t sampleoff, int whence);
00398
00404 EXPORT off_t mpg123_feedseek(mpg123_handle *mh, off_t sampleoff, int whence, off_t *input_offset);
00405
00409 EXPORT off_t mpg123_seek_frame(mpg123_handle *mh, off_t frameoff, int whence);
00410
00414 EXPORT off_t mpg123_timeframe(mpg123_handle *mh, double sec);
00415
00421 EXPORT int mpg123_index(mpg123_handle *mh, off_t **offsets, off_t *step, size_t *fill);
00422
00429 EXPORT int mpg123_position( mpg123_handle *mh, off_t frame_offset,
00430 off_t buffered_bytes, off_t *current_frame,
00431 off_t *frames_left, double *current_seconds,
00432 double *seconds_left);
00433
00442 enum mpg123_channels
00443 {
00444 MPG123_LEFT=0x1
00445 ,MPG123_RIGHT=0x2
00446 ,MPG123_LR=0x3
00447 };
00448
00453 EXPORT int mpg123_eq(mpg123_handle *mh, enum mpg123_channels channel, int band, double val);
00454
00456 EXPORT int mpg123_reset_eq(mpg123_handle *mh);
00457
00460 EXPORT int mpg123_volume(mpg123_handle *mh, double vol);
00461
00463 EXPORT int mpg123_volume_change(mpg123_handle *mh, double change);
00464
00469 EXPORT int mpg123_getvolume(mpg123_handle *mh, double *base, double *really, double *rva_db);
00470
00471
00472
00482 enum mpg123_vbr {
00483 MPG123_CBR=0,
00484 MPG123_VBR,
00485 MPG123_ABR
00486 };
00487
00489 enum mpg123_version {
00490 MPG123_1_0=0,
00491 MPG123_2_0,
00492 MPG123_2_5
00493 };
00494
00495
00498 enum mpg123_mode {
00499 MPG123_M_STEREO=0,
00500 MPG123_M_JOINT,
00501 MPG123_M_DUAL,
00502 MPG123_M_MONO
00503 };
00504
00505
00507 enum mpg123_flags {
00508 MPG123_CRC=0x1,
00509 MPG123_COPYRIGHT=0x2,
00510 MPG123_PRIVATE=0x4,
00511 MPG123_ORIGINAL=0x8
00512 };
00513
00515 struct mpg123_frameinfo
00516 {
00517 enum mpg123_version version;
00518 int layer;
00519 long rate;
00520 enum mpg123_mode mode;
00521 int mode_ext;
00522 int framesize;
00523 enum mpg123_flags flags;
00524 int emphasis;
00525 int bitrate;
00526 int abr_rate;
00527 enum mpg123_vbr vbr;
00528 };
00529
00531 EXPORT int mpg123_info(mpg123_handle *mh, struct mpg123_frameinfo *mi);
00532
00534 EXPORT size_t mpg123_safe_buffer();
00535
00542 EXPORT int mpg123_scan(mpg123_handle *mh);
00543
00546 EXPORT off_t mpg123_length(mpg123_handle *mh);
00547
00551 EXPORT int mpg123_set_filesize(mpg123_handle *mh, off_t size);
00552
00554 EXPORT double mpg123_tpf(mpg123_handle *mh);
00555
00557 EXPORT long mpg123_clip(mpg123_handle *mh);
00558
00572 typedef struct
00573 {
00574 char* p;
00575 size_t size;
00576 size_t fill;
00577 } mpg123_string;
00578
00580 EXPORT void mpg123_init_string(mpg123_string* sb);
00581
00583 EXPORT void mpg123_free_string(mpg123_string* sb);
00584
00587 EXPORT int mpg123_resize_string(mpg123_string* sb, size_t news);
00588
00593 EXPORT int mpg123_grow_string(mpg123_string* sb, size_t news);
00594
00597 EXPORT int mpg123_copy_string(mpg123_string* from, mpg123_string* to);
00598
00601 EXPORT int mpg123_add_string(mpg123_string* sb, const char* stuff);
00602
00607 EXPORT int mpg123_add_substring(mpg123_string *sb, const char *stuff, size_t from, size_t count);
00608
00611 EXPORT int mpg123_set_string(mpg123_string* sb, const char* stuff);
00612
00617 EXPORT int mpg123_set_substring(mpg123_string *sb, const char *stuff, size_t from, size_t count);
00618
00619
00624 typedef struct
00625 {
00626 char lang[3];
00627 char id[4];
00628 mpg123_string description;
00629 mpg123_string text;
00630 } mpg123_text;
00631
00637 typedef struct
00638 {
00639 unsigned char version;
00640 mpg123_string *title;
00641 mpg123_string *artist;
00642 mpg123_string *album;
00643 mpg123_string *year;
00644 mpg123_string *genre;
00645 mpg123_string *comment;
00646
00647
00648 mpg123_text *comment_list;
00649 size_t comments;
00650 mpg123_text *text;
00651 size_t texts;
00652 mpg123_text *extra;
00653 size_t extras;
00654 } mpg123_id3v2;
00655
00660 typedef struct
00661 {
00662 char tag[3];
00663 char title[30];
00664 char artist[30];
00665 char album[30];
00666 char year[4];
00667 char comment[30];
00668 unsigned char genre;
00669 } mpg123_id3v1;
00670
00671 #define MPG123_ID3 0x3
00672 #define MPG123_NEW_ID3 0x1
00673 #define MPG123_ICY 0xc
00674 #define MPG123_NEW_ICY 0x4
00678 EXPORT int mpg123_meta_check(mpg123_handle *mh);
00679
00683 EXPORT int mpg123_id3(mpg123_handle *mh, mpg123_id3v1 **v1, mpg123_id3v2 **v2);
00684
00687 EXPORT int mpg123_icy(mpg123_handle *mh, char **icy_meta);
00688
00692 EXPORT char* mpg123_icy2utf8(const char* icy_text);
00693
00694
00695
00696
00697
00714 struct mpg123_pars_struct;
00715
00717 typedef struct mpg123_pars_struct mpg123_pars;
00718
00720 EXPORT mpg123_handle *mpg123_parnew(mpg123_pars *mp, const char* decoder, int *error);
00721
00723 EXPORT mpg123_pars *mpg123_new_pars(int *error);
00724
00726 EXPORT void mpg123_delete_pars(mpg123_pars* mp);
00727
00730 EXPORT int mpg123_fmt_none(mpg123_pars *mp);
00731
00734 EXPORT int mpg123_fmt_all(mpg123_pars *mp);
00735
00742 EXPORT int mpg123_fmt(mpg123_pars *mh, long rate, int channels, int encodings);
00743
00748 EXPORT int mpg123_fmt_support(mpg123_pars *mh, long rate, int encoding);
00749
00752 EXPORT int mpg123_par(mpg123_pars *mp, enum mpg123_parms type, long value, double fvalue);
00753
00756 EXPORT int mpg123_getpar(mpg123_pars *mp, enum mpg123_parms type, long *val, double *fval);
00757
00758
00759
00760
00768 EXPORT int mpg123_replace_buffer(mpg123_handle *mh, unsigned char *data, size_t size);
00769
00772 EXPORT size_t mpg123_outblock(mpg123_handle *mh);
00773
00779 EXPORT int mpg123_replace_reader( mpg123_handle *mh,
00780 ssize_t (*r_read) (int, void *, size_t),
00781 off_t (*r_lseek)(int, off_t, int) );
00782
00783
00784
00785
00786 #ifdef __cplusplus
00787 }
00788 #endif
00789
00790 #endif