libopenmpt  0.4.11+release.autotools
cross-platform C++ and C library to decode tracked music files
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
libopenmpt.h
Go to the documentation of this file.
1 /*
2  * libopenmpt.h
3  * ------------
4  * Purpose: libopenmpt public c interface
5  * Notes : (currently none)
6  * Authors: OpenMPT Devs
7  * The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
8  */
9 
10 #ifndef LIBOPENMPT_H
11 #define LIBOPENMPT_H
12 
13 #include "libopenmpt_config.h"
14 #include <stddef.h>
15 #include <stdint.h>
16 
173 #ifdef __cplusplus
174 extern "C" {
175 #endif
176 
183 LIBOPENMPT_API uint32_t openmpt_get_library_version(void);
184 
190 LIBOPENMPT_API uint32_t openmpt_get_core_version(void);
191 
193 #define OPENMPT_STRING_LIBRARY_VERSION LIBOPENMPT_DEPRECATED_STRING( "library_version" )
194 
195 #define OPENMPT_STRING_LIBRARY_FEATURES LIBOPENMPT_DEPRECATED_STRING( "library_features" )
196 
197 #define OPENMPT_STRING_CORE_VERSION LIBOPENMPT_DEPRECATED_STRING( "core_version" )
198 
199 #define OPENMPT_STRING_BUILD LIBOPENMPT_DEPRECATED_STRING( "build" )
200 
201 #define OPENMPT_STRING_CREDITS LIBOPENMPT_DEPRECATED_STRING( "credits" )
202 
203 #define OPENMPT_STRING_CONTACT LIBOPENMPT_DEPRECATED_STRING( "contact" )
204 
205 #define OPENMPT_STRING_LICENSE LIBOPENMPT_DEPRECATED_STRING( "license" )
206 
211 LIBOPENMPT_API void openmpt_free_string( const char * str );
212 
237 LIBOPENMPT_API const char * openmpt_get_string( const char * key );
238 
243 LIBOPENMPT_API const char * openmpt_get_supported_extensions(void);
244 
250 LIBOPENMPT_API int openmpt_is_extension_supported( const char * extension );
251 
253 #define OPENMPT_STREAM_SEEK_SET 0
254 
255 #define OPENMPT_STREAM_SEEK_CUR 1
256 
257 #define OPENMPT_STREAM_SEEK_END 2
258 
269 typedef size_t (*openmpt_stream_read_func)( void * stream, void * dst, size_t bytes );
270 
282 typedef int (*openmpt_stream_seek_func)( void * stream, int64_t offset, int whence );
283 
291 typedef int64_t (*openmpt_stream_tell_func)( void * stream );
292 
300 typedef struct openmpt_stream_callbacks {
301 
307 
314 
321 
323 
329 typedef void (*openmpt_log_func)( const char * message, void * user );
330 
335 LIBOPENMPT_API void openmpt_log_func_default( const char * message, void * user );
336 
341 LIBOPENMPT_API void openmpt_log_func_silent( const char * message, void * user );
342 
344 #define OPENMPT_ERROR_OK 0
345 
347 #define OPENMPT_ERROR_BASE 256
348 
350 #define OPENMPT_ERROR_UNKNOWN ( OPENMPT_ERROR_BASE + 1 )
351 
353 #define OPENMPT_ERROR_EXCEPTION ( OPENMPT_ERROR_BASE + 11 )
354 
356 #define OPENMPT_ERROR_OUT_OF_MEMORY ( OPENMPT_ERROR_BASE + 21 )
357 
359 #define OPENMPT_ERROR_RUNTIME ( OPENMPT_ERROR_BASE + 30 )
360 
361 #define OPENMPT_ERROR_RANGE ( OPENMPT_ERROR_BASE + 31 )
362 
363 #define OPENMPT_ERROR_OVERFLOW ( OPENMPT_ERROR_BASE + 32 )
364 
365 #define OPENMPT_ERROR_UNDERFLOW ( OPENMPT_ERROR_BASE + 33 )
366 
368 #define OPENMPT_ERROR_LOGIC ( OPENMPT_ERROR_BASE + 40 )
369 
370 #define OPENMPT_ERROR_DOMAIN ( OPENMPT_ERROR_BASE + 41 )
371 
372 #define OPENMPT_ERROR_LENGTH ( OPENMPT_ERROR_BASE + 42 )
373 
374 #define OPENMPT_ERROR_OUT_OF_RANGE ( OPENMPT_ERROR_BASE + 43 )
375 
376 #define OPENMPT_ERROR_INVALID_ARGUMENT ( OPENMPT_ERROR_BASE + 44 )
377 
379 #define OPENMPT_ERROR_GENERAL ( OPENMPT_ERROR_BASE + 101 )
380 
381 #define OPENMPT_ERROR_INVALID_MODULE_POINTER ( OPENMPT_ERROR_BASE + 102 )
382 
383 #define OPENMPT_ERROR_ARGUMENT_NULL_POINTER ( OPENMPT_ERROR_BASE + 103 )
384 
394 LIBOPENMPT_API int openmpt_error_is_transient( int error );
395 
404 LIBOPENMPT_API const char * openmpt_error_string( int error );
405 
407 #define OPENMPT_ERROR_FUNC_RESULT_NONE 0
408 
409 #define OPENMPT_ERROR_FUNC_RESULT_LOG ( 1 << 0 )
410 
411 #define OPENMPT_ERROR_FUNC_RESULT_STORE ( 1 << 1 )
412 
413 #define OPENMPT_ERROR_FUNC_RESULT_DEFAULT ( OPENMPT_ERROR_FUNC_RESULT_LOG | OPENMPT_ERROR_FUNC_RESULT_STORE )
414 
435 typedef int (*openmpt_error_func)( int error, void * user );
436 
445 LIBOPENMPT_API int openmpt_error_func_default( int error, void * user );
446 
455 LIBOPENMPT_API int openmpt_error_func_log( int error, void * user );
456 
465 LIBOPENMPT_API int openmpt_error_func_store( int error, void * user );
466 
475 LIBOPENMPT_API int openmpt_error_func_ignore( int error, void * user );
476 
486 LIBOPENMPT_API int openmpt_error_func_errno( int error, void * user );
487 
495 LIBOPENMPT_API void * openmpt_error_func_errno_userdata( int * error );
496 
512 LIBOPENMPT_API LIBOPENMPT_DEPRECATED double openmpt_could_open_probability( openmpt_stream_callbacks stream_callbacks, void * stream, double effort, openmpt_log_func logfunc, void * user );
513 
528 LIBOPENMPT_API LIBOPENMPT_DEPRECATED double openmpt_could_open_propability( openmpt_stream_callbacks stream_callbacks, void * stream, double effort, openmpt_log_func logfunc, void * user );
529 
551 LIBOPENMPT_API double openmpt_could_open_probability2( openmpt_stream_callbacks stream_callbacks, void * stream, double effort, openmpt_log_func logfunc, void * loguser, openmpt_error_func errfunc, void * erruser, int * error, const char * * error_message );
552 
559 LIBOPENMPT_API size_t openmpt_probe_file_header_get_recommended_size(void);
560 
562 #define OPENMPT_PROBE_FILE_HEADER_FLAGS_MODULES 0x1ul
563 
564 #define OPENMPT_PROBE_FILE_HEADER_FLAGS_CONTAINERS 0x2ul
565 
567 #define OPENMPT_PROBE_FILE_HEADER_FLAGS_DEFAULT ( OPENMPT_PROBE_FILE_HEADER_FLAGS_MODULES | OPENMPT_PROBE_FILE_HEADER_FLAGS_CONTAINERS )
568 
569 #define OPENMPT_PROBE_FILE_HEADER_FLAGS_NONE 0x0ul
570 
572 #define OPENMPT_PROBE_FILE_HEADER_RESULT_SUCCESS 1
573 
574 #define OPENMPT_PROBE_FILE_HEADER_RESULT_FAILURE 0
575 
576 #define OPENMPT_PROBE_FILE_HEADER_RESULT_WANTMOREDATA (-1)
577 
578 #define OPENMPT_PROBE_FILE_HEADER_RESULT_ERROR (-255)
579 
604 LIBOPENMPT_API int openmpt_probe_file_header( uint64_t flags, const void * data, size_t size, uint64_t filesize, openmpt_log_func logfunc, void * loguser, openmpt_error_func errfunc, void * erruser, int * error, const char * * error_message );
629 LIBOPENMPT_API int openmpt_probe_file_header_without_filesize( uint64_t flags, const void * data, size_t size, openmpt_log_func logfunc, void * loguser, openmpt_error_func errfunc, void * erruser, int * error, const char * * error_message );
630 
655 LIBOPENMPT_API int openmpt_probe_file_header_from_stream( uint64_t flags, openmpt_stream_callbacks stream_callbacks, void * stream, openmpt_log_func logfunc, void * loguser, openmpt_error_func errfunc, void * erruser, int * error, const char * * error_message );
656 
657 
661 
663  const char * ctl;
664  const char * value;
666 
680 LIBOPENMPT_API LIBOPENMPT_DEPRECATED openmpt_module * openmpt_module_create( openmpt_stream_callbacks stream_callbacks, void * stream, openmpt_log_func logfunc, void * loguser, const openmpt_module_initial_ctl * ctls );
681 
699 LIBOPENMPT_API openmpt_module * openmpt_module_create2( openmpt_stream_callbacks stream_callbacks, void * stream, openmpt_log_func logfunc, void * loguser, openmpt_error_func errfunc, void * erruser, int * error, const char * * error_message, const openmpt_module_initial_ctl * ctls );
700 
713 LIBOPENMPT_API LIBOPENMPT_DEPRECATED openmpt_module * openmpt_module_create_from_memory( const void * filedata, size_t filesize, openmpt_log_func logfunc, void * loguser, const openmpt_module_initial_ctl * ctls );
714 
731 LIBOPENMPT_API openmpt_module * openmpt_module_create_from_memory2( const void * filedata, size_t filesize, openmpt_log_func logfunc, void * loguser, openmpt_error_func errfunc, void * erruser, int * error, const char * * error_message, const openmpt_module_initial_ctl * ctls );
732 
737 LIBOPENMPT_API void openmpt_module_destroy( openmpt_module * mod );
738 
747 LIBOPENMPT_API void openmpt_module_set_log_func( openmpt_module * mod, openmpt_log_func logfunc, void * loguser );
748 
757 LIBOPENMPT_API void openmpt_module_set_error_func( openmpt_module * mod, openmpt_error_func errfunc, void * erruser );
758 
769 LIBOPENMPT_API int openmpt_module_error_get_last( openmpt_module * mod );
770 
780 LIBOPENMPT_API const char * openmpt_module_error_get_last_message( openmpt_module * mod );
781 
791 LIBOPENMPT_API void openmpt_module_error_set_last( openmpt_module * mod, int error );
792 
801 LIBOPENMPT_API void openmpt_module_error_clear( openmpt_module * mod );
802 
815 #define OPENMPT_MODULE_RENDER_MASTERGAIN_MILLIBEL 1
816 
822 #define OPENMPT_MODULE_RENDER_STEREOSEPARATION_PERCENT 2
823 
835 #define OPENMPT_MODULE_RENDER_INTERPOLATIONFILTER_LENGTH 3
836 
844 #define OPENMPT_MODULE_RENDER_VOLUMERAMPING_STRENGTH 4
845 
853 #define OPENMPT_MODULE_COMMAND_NOTE 0
854 #define OPENMPT_MODULE_COMMAND_INSTRUMENT 1
855 #define OPENMPT_MODULE_COMMAND_VOLUMEEFFECT 2
856 #define OPENMPT_MODULE_COMMAND_EFFECT 3
857 #define OPENMPT_MODULE_COMMAND_VOLUME 4
858 #define OPENMPT_MODULE_COMMAND_PARAMETER 5
859 
869 LIBOPENMPT_API int openmpt_module_select_subsong( openmpt_module * mod, int32_t subsong );
877 LIBOPENMPT_API int32_t openmpt_module_get_selected_subsong( openmpt_module * mod );
888 LIBOPENMPT_API int openmpt_module_set_repeat_count( openmpt_module * mod, int32_t repeat_count );
898 LIBOPENMPT_API int32_t openmpt_module_get_repeat_count( openmpt_module * mod );
899 
905 LIBOPENMPT_API double openmpt_module_get_duration_seconds( openmpt_module * mod );
906 
914 LIBOPENMPT_API double openmpt_module_set_position_seconds( openmpt_module * mod, double seconds );
921 LIBOPENMPT_API double openmpt_module_get_position_seconds( openmpt_module * mod );
922 
933 LIBOPENMPT_API double openmpt_module_set_position_order_row( openmpt_module * mod, int32_t order, int32_t row );
934 
947 LIBOPENMPT_API int openmpt_module_get_render_param( openmpt_module * mod, int param, int32_t * value );
960 LIBOPENMPT_API int openmpt_module_set_render_param( openmpt_module * mod, int param, int32_t value );
961 
976 LIBOPENMPT_API size_t openmpt_module_read_mono( openmpt_module * mod, int32_t samplerate, size_t count, int16_t * mono );
991 LIBOPENMPT_API size_t openmpt_module_read_stereo( openmpt_module * mod, int32_t samplerate, size_t count, int16_t * left, int16_t * right );
1008 LIBOPENMPT_API size_t openmpt_module_read_quad( openmpt_module * mod, int32_t samplerate, size_t count, int16_t * left, int16_t * right, int16_t * rear_left, int16_t * rear_right );
1022 LIBOPENMPT_API size_t openmpt_module_read_float_mono( openmpt_module * mod, int32_t samplerate, size_t count, float * mono );
1037 LIBOPENMPT_API size_t openmpt_module_read_float_stereo( openmpt_module * mod, int32_t samplerate, size_t count, float * left, float * right );
1054 LIBOPENMPT_API size_t openmpt_module_read_float_quad( openmpt_module * mod, int32_t samplerate, size_t count, float * left, float * right, float * rear_left, float * rear_right );
1068 LIBOPENMPT_API size_t openmpt_module_read_interleaved_stereo( openmpt_module * mod, int32_t samplerate, size_t count, int16_t * interleaved_stereo );
1082 LIBOPENMPT_API size_t openmpt_module_read_interleaved_quad( openmpt_module * mod, int32_t samplerate, size_t count, int16_t * interleaved_quad );
1096 LIBOPENMPT_API size_t openmpt_module_read_interleaved_float_stereo( openmpt_module * mod, int32_t samplerate, size_t count, float * interleaved_stereo );
1110 LIBOPENMPT_API size_t openmpt_module_read_interleaved_float_quad( openmpt_module * mod, int32_t samplerate, size_t count, float * interleaved_quad );
1119 LIBOPENMPT_API const char * openmpt_module_get_metadata_keys( openmpt_module * mod );
1141 LIBOPENMPT_API const char * openmpt_module_get_metadata( openmpt_module * mod, const char * key );
1142 
1148 LIBOPENMPT_API int32_t openmpt_module_get_current_speed( openmpt_module * mod );
1154 LIBOPENMPT_API int32_t openmpt_module_get_current_tempo( openmpt_module * mod );
1160 LIBOPENMPT_API int32_t openmpt_module_get_current_order( openmpt_module * mod );
1166 LIBOPENMPT_API int32_t openmpt_module_get_current_pattern( openmpt_module * mod );
1172 LIBOPENMPT_API int32_t openmpt_module_get_current_row( openmpt_module * mod );
1178 LIBOPENMPT_API int32_t openmpt_module_get_current_playing_channels( openmpt_module * mod );
1179 
1187 LIBOPENMPT_API float openmpt_module_get_current_channel_vu_mono( openmpt_module * mod, int32_t channel );
1195 LIBOPENMPT_API float openmpt_module_get_current_channel_vu_left( openmpt_module * mod, int32_t channel );
1203 LIBOPENMPT_API float openmpt_module_get_current_channel_vu_right( openmpt_module * mod, int32_t channel );
1211 LIBOPENMPT_API float openmpt_module_get_current_channel_vu_rear_left( openmpt_module * mod, int32_t channel );
1219 LIBOPENMPT_API float openmpt_module_get_current_channel_vu_rear_right( openmpt_module * mod, int32_t channel );
1220 
1227 LIBOPENMPT_API int32_t openmpt_module_get_num_subsongs( openmpt_module * mod );
1234 LIBOPENMPT_API int32_t openmpt_module_get_num_channels( openmpt_module * mod );
1240 LIBOPENMPT_API int32_t openmpt_module_get_num_orders( openmpt_module * mod );
1246 LIBOPENMPT_API int32_t openmpt_module_get_num_patterns( openmpt_module * mod );
1252 LIBOPENMPT_API int32_t openmpt_module_get_num_instruments( openmpt_module * mod );
1258 LIBOPENMPT_API int32_t openmpt_module_get_num_samples( openmpt_module * mod );
1259 
1267 LIBOPENMPT_API const char * openmpt_module_get_subsong_name( openmpt_module * mod, int32_t index );
1275 LIBOPENMPT_API const char * openmpt_module_get_channel_name( openmpt_module * mod, int32_t index );
1283 LIBOPENMPT_API const char * openmpt_module_get_order_name( openmpt_module * mod, int32_t index );
1291 LIBOPENMPT_API const char * openmpt_module_get_pattern_name( openmpt_module * mod, int32_t index );
1299 LIBOPENMPT_API const char * openmpt_module_get_instrument_name( openmpt_module * mod, int32_t index );
1307 LIBOPENMPT_API const char * openmpt_module_get_sample_name( openmpt_module * mod, int32_t index );
1308 
1315 LIBOPENMPT_API int32_t openmpt_module_get_order_pattern( openmpt_module * mod, int32_t order );
1322 LIBOPENMPT_API int32_t openmpt_module_get_pattern_num_rows( openmpt_module * mod, int32_t pattern );
1323 
1333 LIBOPENMPT_API uint8_t openmpt_module_get_pattern_row_channel_command( openmpt_module * mod, int32_t pattern, int32_t row, int32_t channel, int command );
1334 
1345 LIBOPENMPT_API const char * openmpt_module_format_pattern_row_channel_command( openmpt_module * mod, int32_t pattern, int32_t row, int32_t channel, int command );
1367 LIBOPENMPT_API const char * openmpt_module_highlight_pattern_row_channel_command( openmpt_module * mod, int32_t pattern, int32_t row, int32_t channel, int command );
1368 
1380 LIBOPENMPT_API const char * openmpt_module_format_pattern_row_channel( openmpt_module * mod, int32_t pattern, int32_t row, int32_t channel, size_t width, int pad );
1392 LIBOPENMPT_API const char * openmpt_module_highlight_pattern_row_channel( openmpt_module * mod, int32_t pattern, int32_t row, int32_t channel, size_t width, int pad );
1393 
1419 LIBOPENMPT_API const char * openmpt_module_get_ctls( openmpt_module * mod );
1427 LIBOPENMPT_API const char * openmpt_module_ctl_get( openmpt_module * mod, const char * ctl );
1436 LIBOPENMPT_API int openmpt_module_ctl_set( openmpt_module * mod, const char * ctl, const char * value );
1437 
1438 /* remember to add new functions to both C and C++ interfaces and to increase OPENMPT_API_VERSION_MINOR */
1439 
1440 #ifdef __cplusplus
1441 }
1442 #endif
1443 
1448 #endif /* LIBOPENMPT_H */
1449