1 unit mpg123_; 2 interface 3 4 uses 5 Windows, 6 SysUtils; 7 8 // INITIAL CONVERSION BY ARTHUR 17/02/2008 9 // USE http://www.mpg123.de/api/ FOR DOCUMENTATION SINCE I STRIPED ALL THE COMMENTS FROM THE UNIT 10 11 type 12 PDWord = ^DWORD; 13 PPbyte = ^PByte; 14 PPchar = ^PChar; 15 Pdouble = ^double; 16 PPlongint = ^Plongint; 17 off_t = Longint; 18 Poff_t = ^off_t; 19 PPoff_T = ^Poff_t; 20 size_t = Cardinal; 21 Psize_t = ^size_t; 22 23 type 24 Pmpg123_handle_struct = ^Tmpg123_handle_struct; 25 Tmpg123_handle_struct = packed record 26 {undefined structure} 27 end; 28 29 Tmpg123_handle = Tmpg123_handle_struct; 30 Pmpg123_handle = ^Tmpg123_handle; 31 32 var Longintnull33 mpg123_init: function: Longint; cdecl; 34 35 mpg123_exit: procedure; cdecl; 36 ecodernull37 mpg123_new: function(decoder: PChar; Error: Plongint): Pmpg123_handle; cdecl; 38 39 mpg123_delete: procedure(mh: Pmpg123_handle); cdecl; 40 41 type 42 Tmpg123_parms = Longint; 43 const 44 MPG123_VERBOSE = 0; 45 MPG123_FLAGS = 1; 46 MPG123_ADD_FLAGS = 2; 47 MPG123_FORCE_RATE = 3; 48 MPG123_DOWN_SAMPLE = 4; 49 MPG123_RVA = 5; 50 MPG123_DOWNSPEED = 6; 51 MPG123_UPSPEED = 7; 52 MPG123_START_FRAME = 8; 53 MPG123_DECODE_FRAMES = 9; 54 MPG123_ICY_INTERVAL = 10; 55 MPG123_OUTSCALE = 11; 56 MPG123_TIMEOUT = 12; 57 MPG123_REMOVE_FLAGS = 13; 58 MPG123_RESYNC_LIMIT = 14; 59 60 type 61 Tmpg123_param_flags = Longint; 62 const 63 MPG123_FORCE_MONO = $7; 64 MPG123_MONO_LEFT = $1; 65 MPG123_MONO_RIGHT = $2; 66 MPG123_MONO_MIX = $4; 67 MPG123_FORCE_STEREO = $8; 68 MPG123_FORCE_8BIT = $10; 69 MPG123_QUIET = $20; 70 MPG123_GAPLESS = $40; 71 MPG123_NO_RESYNC = $80; 72 73 type 74 Tmpg123_param_rva = Longint; 75 const 76 MPG123_RVA_OFF = 0; 77 MPG123_RVA_MIX = 1; 78 MPG123_RVA_ALBUM = 2; 79 MPG123_RVA_MAX = MPG123_RVA_ALBUM; 80 81 var hnull82 mpg123_param: function(mh: Pmpg123_handle; _type: Tmpg123_parms; value: Longint; fvalue: double): Longint; cdecl; 83 hnull84 mpg123_getparam: function(mh: Pmpg123_handle; _type: Tmpg123_parms; val: Plongint; fval: Pdouble): Longint; cdecl; 85 86 type 87 Tmpg123_errors = Longint; 88 const 89 MPG123_DONE = -(12); 90 MPG123_NEW_FORMAT = -(11); 91 MPG123_NEED_MORE = -(10); 92 MPG123_ERR = -(1); 93 MPG123_OK = 0; 94 MPG123_BAD_OUTFORMAT = 1; 95 MPG123_BAD_CHANNEL = 2; 96 MPG123_BAD_RATE = 3; 97 MPG123_ERR_16TO8TABLE = 4; 98 MPG123_BAD_PARAM = 5; 99 MPG123_BAD_BUFFER = 6; 100 MPG123_OUT_OF_MEM = 7; 101 MPG123_NOT_INITIALIZED = 8; 102 MPG123_BAD_DECODER = 9; 103 MPG123_BAD_HANDLE = 10; 104 MPG123_NO_BUFFERS = 11; 105 MPG123_BAD_RVA = 12; 106 MPG123_NO_GAPLESS = 13; 107 MPG123_NO_SPACE = 14; 108 MPG123_BAD_TYPES = 15; 109 MPG123_BAD_BAND = 16; 110 MPG123_ERR_NULL = 17; 111 MPG123_ERR_READER = 18; 112 MPG123_NO_SEEK_FROM_END = 19; 113 MPG123_BAD_WHENCE = 20; 114 MPG123_NO_TIMEOUT = 21; 115 MPG123_BAD_FILE = 22; 116 MPG123_NO_SEEK = 23; 117 MPG123_NO_READER = 24; 118 MPG123_BAD_PARS = 25; 119 MPG123_BAD_INDEX_PAR = 26; 120 MPG123_OUT_OF_SYNC = 27; 121 MPG123_RESYNC_FAIL = 28; 122 123 var rrcodenull124 mpg123_plain_strerror: function(errcode: Longint): PChar; cdecl; 125 hnull126 mpg123_strerror: function(mh: Pmpg123_handle): PChar; cdecl; 127 hnull128 mpg123_errcode: function(mh: Pmpg123_handle): Longint; cdecl; 129 PPcharnull130 mpg123_decoders: function: PPchar; cdecl; 131 PPcharnull132 mpg123_supported_decoders: function: PPchar; cdecl; 133 hnull134 mpg123_decoder: function(mh: Pmpg123_handle; decoder_name: PChar): Longint; cdecl; 135 136 type 137 Tmpg123_enc_enum = Longint; 138 const 139 MPG123_ENC_16 = $40; 140 MPG123_ENC_SIGNED = $80; 141 MPG123_ENC_8 = $0F; 142 MPG123_ENC_SIGNED_16 = (MPG123_ENC_16 or MPG123_ENC_SIGNED) or $10; 143 MPG123_ENC_UNSIGNED_16 = MPG123_ENC_16 or $20; 144 MPG123_ENC_UNSIGNED_8 = $01; 145 MPG123_ENC_SIGNED_8 = MPG123_ENC_SIGNED or $02; 146 MPG123_ENC_ULAW_8 = $04; 147 MPG123_ENC_ALAW_8 = $08; 148 MPG123_ENC_ANY = ((((MPG123_ENC_SIGNED_16 or MPG123_ENC_UNSIGNED_16) or MPG123_ENC_UNSIGNED_8) or MPG123_ENC_SIGNED_8) or MPG123_ENC_ULAW_8) or MPG123_ENC_ALAW_8; 149 150 type 151 Tmpg123_channelcount = Longint; 152 const 153 MPG123_MONO = 1; 154 MPG123_STEREO = 2; 155 156 var 157 mpg123_rates: procedure(list: PPlongint; number: Psize_t); cdecl; 158 159 mpg123_encodings: procedure(list: PPlongint; number: Psize_t); cdecl; 160 hnull161 mpg123_format_none: function(mh: Pmpg123_handle): Longint; cdecl; 162 hnull163 mpg123_format_all: function(mh: Pmpg123_handle): Longint; cdecl; 164 hnull165 mpg123_format: function(mh: Pmpg123_handle; rate: Longint; channels: Longint; encodings: Longint): Longint; cdecl; 166 hnull167 mpg123_format_support: function(mh: Pmpg123_handle; rate: Longint; encoding: Longint): Longint; cdecl; 168 hnull169 mpg123_getformat: function(mh: Pmpg123_handle; rate: Plongint; channels: Plongint; encoding: Plongint): Longint; cdecl; 170 hnull171 mpg123_open: function(mh: Pmpg123_handle; path: PChar): Longint; cdecl; 172 hnull173 mpg123_open_fd: function(mh: Pmpg123_handle; fd: Longint): Longint; cdecl; 174 hnull175 mpg123_open_feed: function(mh: Pmpg123_handle): Longint; cdecl; 176 hnull177 mpg123_close: function(mh: Pmpg123_handle): Longint; cdecl; 178 hnull179 mpg123_read: function(mh: Pmpg123_handle; outmemory: PByte; outmemsize: size_t; done: Psize_t): Longint; cdecl; 180 hnull181 mpg123_decode: function(mh: Pmpg123_handle; inmemory: PByte; inmemsize: size_t; outmemory: PByte; outmemsize: size_t; 182 done: Psize_t): Longint; cdecl; 183 hnull184 mpg123_decode_frame: function(mh: Pmpg123_handle; num: Poff_t; audio: PPbyte; bytes: Psize_t): Longint; cdecl; 185 hnull186 mpg123_tell: function(mh: Pmpg123_handle): off_t; cdecl; 187 hnull188 mpg123_tellframe: function(mh: Pmpg123_handle): off_t; cdecl; 189 hnull190 mpg123_seek: function(mh: Pmpg123_handle; sampleoff: off_t; whence: Longint): off_t; cdecl; 191 hnull192 mpg123_feedseek: function(mh: Pmpg123_handle; sampleoff: off_t; whence: Longint; input_offset: Poff_t): off_t; cdecl; 193 hnull194 mpg123_seek_frame: function(mh: Pmpg123_handle; frameoff: off_t; whence: Longint): off_t; cdecl; 195 hnull196 mpg123_timeframe: function(mh: Pmpg123_handle; sec: double): off_t; cdecl; 197 hnull198 mpg123_index: function(mh: Pmpg123_handle; offsets: PPoff_t; step: Poff_t; fill: Psize_t): Longint; cdecl; 199 hnull200 mpg123_position: function(mh: Pmpg123_handle; frame_offset: off_t; buffered_bytes: off_t; current_frame: Poff_t; frames_left: Poff_t; 201 current_seconds: Pdouble; seconds_left: Pdouble): Longint; cdecl; 202 203 type 204 Tmpg123_channels = Longint; 205 const 206 MPG123_LEFT = $1; 207 MPG123_RIGHT = $2; 208 209 var hnull210 mpg123_eq: function(mh: Pmpg123_handle; channel: Tmpg123_channels; band: Longint; val: double): Longint; cdecl; 211 hnull212 mpg123_reset_eq: function(mh: Pmpg123_handle): Longint; cdecl; 213 hnull214 mpg123_volume: function(mh: Pmpg123_handle; vol: double): Longint; cdecl; 215 hnull216 mpg123_volume_change: function(mh: Pmpg123_handle; change: double): Longint; cdecl; 217 hnull218 mpg123_getvolume: function(mh: Pmpg123_handle; base: Pdouble; really: Pdouble; rva_db: Pdouble): Longint; cdecl; 219 220 type 221 Tmpg123_vbr = Longint; 222 const 223 MPG123_CBR = 0; 224 MPG123_VBR = 1; 225 MPG123_ABR = 2; 226 227 type 228 Tmpg123_version = Longint; 229 const 230 MPG123_1_0 = 0; 231 MPG123_2_0 = 1; 232 MPG123_2_5 = 2; 233 234 type 235 Tmpg123_mode = Longint; 236 const 237 MPG123_M_STEREO = 0; 238 MPG123_M_JOINT = 1; 239 MPG123_M_DUAL = 2; 240 MPG123_M_MONO = 3; 241 242 type 243 Tmpg123_flags = Longint; 244 const 245 MPG123_CRC = $1; 246 MPG123_COPYRIGHT = $2; 247 MPG123_PRIVATE = $4; 248 MPG123_ORIGINAL = $8; 249 250 type 251 Pmpg123_frameinfo = ^Tmpg123_frameinfo; 252 Tmpg123_frameinfo = packed record 253 version: Tmpg123_version; 254 layer: Longint; 255 rate: Longint; 256 mode: Tmpg123_mode; 257 mode_ext: Longint; 258 framesize: Longint; 259 Flags: Tmpg123_flags; 260 emphasis: Longint; 261 bitrate: Longint; 262 abr_rate: Longint; 263 vbr: Tmpg123_vbr; 264 end; 265 266 var hnull267 mpg123_info: function(mh: Pmpg123_handle; mi: Pmpg123_frameinfo): Longint; cdecl; 268 size_tnull269 mpg123_safe_buffer: function: size_t; cdecl; 270 hnull271 mpg123_scan: function(mh: Pmpg123_handle): Longint; cdecl; 272 hnull273 mpg123_length: function(mh: Pmpg123_handle): off_t; cdecl; 274 hnull275 mpg123_tpf: function(mh: Pmpg123_handle): double; cdecl; 276 hnull277 mpg123_clip: function(mh: Pmpg123_handle): Longint; cdecl; 278 279 type 280 281 Pmpg123_string = ^Tmpg123_string; 282 Tmpg123_string = packed record 283 p: PChar; 284 Size: size_t; 285 fill: size_t; 286 end; 287 288 var 289 mpg123_init_string: procedure(sb: Pmpg123_string); cdecl; 290 291 mpg123_free_string: procedure(sb: Pmpg123_string); cdecl; 292 bnull293 mpg123_resize_string: function(sb: Pmpg123_string; news: size_t): Longint; cdecl; 294 romnull295 mpg123_copy_string: function(from: Pmpg123_string; _to: Pmpg123_string): Longint; cdecl; 296 bnull297 mpg123_add_string: function(sb: Pmpg123_string; stuff: PChar): Longint; cdecl; 298 bnull299 mpg123_set_string: function(sb: Pmpg123_string; stuff: PChar): Longint; cdecl; 300 301 type 302 303 Pmpg123_text = ^Tmpg123_text; 304 Tmpg123_text = packed record 305 lang: array[0..2] of Char; 306 id: array[0..3] of Char; 307 description: Tmpg123_string; 308 Text: Tmpg123_string; 309 end; 310 311 PPmpg123_id3v2 = ^Pmpg123_id3v2; 312 Pmpg123_id3v2 = ^Tmpg123_id3v2; 313 Tmpg123_id3v2 = packed record 314 version: Byte; 315 title: Pmpg123_string; 316 artist: Pmpg123_string; 317 album: Pmpg123_string; 318 year: Pmpg123_string; 319 genre: Pmpg123_string; 320 comment: Pmpg123_string; 321 comment_list: Pmpg123_text; 322 comments: size_t; 323 Text: Pmpg123_text; 324 texts: size_t; 325 extra: Pmpg123_text; 326 extras: size_t; 327 end; 328 329 PPmpg123_id3v1 = ^Pmpg123_id3v1; 330 Pmpg123_id3v1 = ^Tmpg123_id3v1; 331 Tmpg123_id3v1 = packed record 332 tag: array[0..2] of Char; 333 title: array[0..29] of Char; 334 artist: array[0..29] of Char; 335 album: array[0..29] of Char; 336 year: array[0..3] of Char; 337 comment: array[0..29] of Char; 338 genre: Byte; 339 end; 340 341 const 342 MPG123_ID3 = $3; 343 344 MPG123_NEW_ID3 = $1; 345 346 MPG123_ICY = $C; 347 348 MPG123_NEW_ICY = $4; 349 350 var hnull351 mpg123_meta_check: function(mh: Pmpg123_handle): Longint; cdecl; 352 hnull353 mpg123_id3_: function(mh: Pmpg123_handle; var v1: Pmpg123_id3v1; var v2: Pmpg123_id3v2): Longint; cdecl; 354 hnull355 mpg123_icy_: function(mh: Pmpg123_handle; icy_meta: PPchar): Longint; cdecl; 356 357 type 358 Pmpg123_pars_struct = ^Tmpg123_pars_struct; 359 Tmpg123_pars_struct = packed record 360 {undefined structure} 361 end; 362 363 Tmpg123_pars = Tmpg123_pars_struct; 364 Pmpg123_pars = ^Tmpg123_pars; 365 366 var pnull367 mpg123_parnew: function(mp: Pmpg123_pars; decoder: PChar; Error: Plongint): Pmpg123_handle; cdecl; 368 rrornull369 mpg123_new_pars: function(Error: Plongint): Pmpg123_pars; cdecl; 370 371 mpg123_delete_pars: procedure(mp: Pmpg123_pars); cdecl; 372 pnull373 mpg123_fmt_none: function(mp: Pmpg123_pars): Longint; cdecl; 374 pnull375 mpg123_fmt_all: function(mp: Pmpg123_pars): Longint; cdecl; 376 hnull377 mpg123_fmt: function(mh: Pmpg123_pars; rate: Longint; channels: Longint; encodings: Longint): Longint; cdecl; 378 hnull379 mpg123_fmt_support: function(mh: Pmpg123_pars; rate: Longint; encoding: Longint): Longint; cdecl; 380 pnull381 mpg123_par: function(mp: Pmpg123_pars; _type: Tmpg123_parms; value: Longint; fvalue: double): Longint; cdecl; 382 pnull383 mpg123_getpar: function(mp: Pmpg123_pars; _type: Tmpg123_parms; val: Plongint; fval: Pdouble): Longint; cdecl; 384 hnull385 mpg123_replace_buffer: function(mh: Pmpg123_handle; data: PByte; Size: size_t): Longint; cdecl; 386 hnull387 mpg123_outblock: function(mh: Pmpg123_handle): size_t; cdecl; 388 hnull389 //mpg123_replace_reader : function(mh:Pmpg123_handle; r_read:function (_para1:longint; _para2:pointer; _para3:size_t):Tssize_t; r_lseek:function (_para1:longint; _para2:off_t; _para3:longint):off_t):longint; 390 391 implementation 392 393 var 394 hlib: THandle; 395 396 procedure Freempg123; 397 begin 398 FreeLibrary(hlib); 399 end; 400 401 procedure Loadmpg123(lib: PChar); 402 begin 403 hlib := LoadLibrary(lib); 404 mpg123_init := GetProcAddress(hlib, 'mpg123_init'); 405 mpg123_exit := GetProcAddress(hlib, 'mpg123_exit'); 406 mpg123_new := GetProcAddress(hlib, 'mpg123_new'); 407 mpg123_delete := GetProcAddress(hlib, 'mpg123_delete'); 408 mpg123_param := GetProcAddress(hlib, 'mpg123_param'); 409 mpg123_getparam := GetProcAddress(hlib, 'mpg123_getparam'); 410 mpg123_plain_strerror := GetProcAddress(hlib, 'mpg123_plain_strerror'); 411 mpg123_strerror := GetProcAddress(hlib, 'mpg123_strerror'); 412 mpg123_errcode := GetProcAddress(hlib, 'mpg123_errcode'); 413 mpg123_decoders := GetProcAddress(hlib, 'mpg123_decoders'); 414 mpg123_supported_decoders := GetProcAddress(hlib, 'mpg123_supported_decoders'); 415 mpg123_decoder := GetProcAddress(hlib, 'mpg123_decoder'); 416 mpg123_rates := GetProcAddress(hlib, 'mpg123_rates'); 417 mpg123_encodings := GetProcAddress(hlib, 'mpg123_encodings'); 418 mpg123_format_none := GetProcAddress(hlib, 'mpg123_format_none'); 419 mpg123_format_all := GetProcAddress(hlib, 'mpg123_format_all'); 420 mpg123_format := GetProcAddress(hlib, 'mpg123_format'); 421 mpg123_format_support := GetProcAddress(hlib, 'mpg123_format_support'); 422 mpg123_getformat := GetProcAddress(hlib, 'mpg123_getformat'); 423 mpg123_open := GetProcAddress(hlib, 'mpg123_open'); 424 mpg123_open_fd := GetProcAddress(hlib, 'mpg123_open_fd'); 425 mpg123_open_feed := GetProcAddress(hlib, 'mpg123_open_feed'); 426 mpg123_close := GetProcAddress(hlib, 'mpg123_close'); 427 mpg123_read := GetProcAddress(hlib, 'mpg123_read'); 428 mpg123_decode := GetProcAddress(hlib, 'mpg123_decode'); 429 mpg123_decode_frame := GetProcAddress(hlib, 'mpg123_decode_frame'); 430 mpg123_tell := GetProcAddress(hlib, 'mpg123_tell'); 431 mpg123_tellframe := GetProcAddress(hlib, 'mpg123_tellframe'); 432 mpg123_seek := GetProcAddress(hlib, 'mpg123_seek'); 433 mpg123_feedseek := GetProcAddress(hlib, 'mpg123_feedseek'); 434 mpg123_seek_frame := GetProcAddress(hlib, 'mpg123_seek_frame'); 435 mpg123_timeframe := GetProcAddress(hlib, 'mpg123_timeframe'); 436 mpg123_index := GetProcAddress(hlib, 'mpg123_index'); 437 mpg123_position := GetProcAddress(hlib, 'mpg123_position'); 438 mpg123_eq := GetProcAddress(hlib, 'mpg123_eq'); 439 mpg123_reset_eq := GetProcAddress(hlib, 'mpg123_reset_eq'); 440 mpg123_volume := GetProcAddress(hlib, 'mpg123_volume'); 441 mpg123_volume_change := GetProcAddress(hlib, 'mpg123_volume_change'); 442 mpg123_getvolume := GetProcAddress(hlib, 'mpg123_getvolume'); 443 mpg123_info := GetProcAddress(hlib, 'mpg123_info'); 444 mpg123_safe_buffer := GetProcAddress(hlib, 'mpg123_safe_buffer'); 445 mpg123_scan := GetProcAddress(hlib, 'mpg123_scan'); 446 mpg123_length := GetProcAddress(hlib, 'mpg123_length'); 447 mpg123_tpf := GetProcAddress(hlib, 'mpg123_tpf'); 448 mpg123_clip := GetProcAddress(hlib, 'mpg123_clip'); 449 mpg123_init_string := GetProcAddress(hlib, 'mpg123_init_string'); 450 mpg123_free_string := GetProcAddress(hlib, 'mpg123_free_string'); 451 mpg123_resize_string := GetProcAddress(hlib, 'mpg123_resize_string'); 452 mpg123_copy_string := GetProcAddress(hlib, 'mpg123_copy_string'); 453 mpg123_add_string := GetProcAddress(hlib, 'mpg123_add_string'); 454 mpg123_set_string := GetProcAddress(hlib, 'mpg123_set_string'); 455 mpg123_meta_check := GetProcAddress(hlib, 'mpg123_meta_check'); 456 mpg123_id3_ := GetProcAddress(hlib, 'mpg123_id3'); 457 mpg123_icy_ := GetProcAddress(hlib, 'mpg123_icy'); 458 mpg123_parnew := GetProcAddress(hlib, 'mpg123_parnew'); 459 mpg123_new_pars := GetProcAddress(hlib, 'mpg123_new_pars'); 460 mpg123_delete_pars := GetProcAddress(hlib, 'mpg123_delete_pars'); 461 mpg123_fmt_none := GetProcAddress(hlib, 'mpg123_fmt_none'); 462 mpg123_fmt_all := GetProcAddress(hlib, 'mpg123_fmt_all'); 463 mpg123_fmt := GetProcAddress(hlib, 'mpg123_fmt'); 464 mpg123_fmt_support := GetProcAddress(hlib, 'mpg123_fmt_support'); 465 mpg123_par := GetProcAddress(hlib, 'mpg123_par'); 466 mpg123_getpar := GetProcAddress(hlib, 'mpg123_getpar'); 467 mpg123_replace_buffer := GetProcAddress(hlib, 'mpg123_replace_buffer'); 468 mpg123_outblock := GetProcAddress(hlib, 'mpg123_outblock'); 469 //mpg123_replace_reader := GetProcAddress(hlib,'mpg123_replace_reader'); 470 end; 471 472 initialization 473 Loadmpg123('libmpg123-0.dll'); 474 finalization 475 Freempg123; 476 477 end. 478 479