33 #ifndef MP3SPLT_MP3SPLT_H
35 #include <sys/types.h>
119 #define SPLT_MAXCD 512
122 #define SPLT_DISCIDLEN 8
126 char discid[SPLT_DISCIDLEN+1];
131 struct splt_cd discs[SPLT_MAXCD];
173 off_t *serrors_points;
183 #define SPLT_MAXOLEN 255
184 #define SPLT_OUTNUM 20
191 char output_format_digits;
192 int output_alpha_format_digits;
194 char format[SPLT_OUTNUM+1][SPLT_MAXOLEN];
252 int set_original_tags;
257 void *all_original_tags;
258 int last_plugin_used;
287 double begin_position;
339 void *progress_cb_data;
397 void (*file_split)(
const char *,int,
void *);
398 void *file_split_cb_data;
403 void (*get_silence_level)(
long time,
float level,
void *user_data);
408 void *put_message_cb_data;
482 #define SPLT_DEFAULT_PARAM_THRESHOLD -48.0
486 #define SPLT_DEFAULT_PARAM_OFFSET 0.8
490 #define SPLT_DEFAULT_PARAM_MINIMUM_LENGTH 0.0
494 #define SPLT_DEFAULT_PARAM_MINIMUM_TRACK_LENGTH 0.0
498 #define SPLT_DEFAULT_PARAM_MIN_TRACK_JOIN 0.0
502 #define SPLT_DEFAULT_PARAM_GAP 30
506 #define SPLT_DEFAULT_PARAM_TRACKS 0
510 #define SPLT_DEFAULT_PARAM_SHOTS 25
538 #define SPLT_ORIGINAL_TAGS_DEFAULT "%[@o,@N=1]"
540 #define SPLT_DEFAULT_OUTPUT "@f_@mm_@ss_@hh__@Mm_@Ss_@Hh"
546 #define SPLT_DEFAULT_CDDB_CUE_OUTPUT "@A - @n - @t"
551 #define SPLT_DEFAULT_SYNCERROR_OUTPUT "@f_error_@n"
556 #define SPLT_DEFAULT_SILENCE_OUTPUT "@f_silence_@n"
561 #define SPLT_DEFAULT_TRIM_SILENCE_OUTPUT "@f_trimmed"
729 int replace_tags_in_tags;
759 char *upper_extension;
764 int (*check_plugin_is_for_file)(
void *state,
int *error);
766 void (*search_syncerrors)(
void *state,
int *error);
767 void (*dewrap)(
void *state,
int listonly,
const char *dir,
int *error);
768 void (*set_total_time)(
void *state,
int *error);
769 int (*simple_split)(
void *state,
const char *output_fname, off_t begin, off_t end);
770 double (*split)(
void *state,
const char *final_fname,
double begin_point,
771 double end_point,
int *error,
int save_end_point);
772 int (*scan_silence)(
void *state,
int *error);
773 int (*scan_trim_silence)(
void *state,
int *error);
774 void (*set_original_tags)(
void *state,
int *error);
776 void (*init)(
void *state,
int *error);
777 void (*end)(
void *state,
int *error);
797 int number_of_dirs_to_scan;
827 char *default_comment_tag;
828 char *default_genre_tag;
884 SPLT_SPLITPOINT_BIGGER_THAN_LENGTH = 4,
886 SPLT_TIME_SPLIT_OK = 6,
887 SPLT_NO_SILENCE_SPLITPOINTS_FOUND = 7,
888 SPLT_OK_SPLIT_EOF = 8,
889 SPLT_LENGTH_SPLIT_OK = 9,
890 SPLT_TRIM_SILENCE_OK = 10,
892 SPLT_FREEDB_OK = 100,
893 SPLT_FREEDB_FILE_OK = 101,
896 SPLT_FREEDB_MAX_CD_REACHED = 104,
897 SPLT_AUDACITY_OK = 105,
899 SPLT_DEWRAP_OK = 200,
902 SPLT_MIGHT_BE_VBR = 301,
904 SPLT_ERR_SYNC = -300,
905 SPLT_ERR_NO_SYNC_FOUND = -301,
906 SPLT_ERR_TOO_MANY_SYNC_ERR = -302,
908 SPLT_OUTPUT_FORMAT_OK = 400,
909 SPLT_OUTPUT_FORMAT_AMBIGUOUS = 401,
913 SPLT_ERROR_SPLITPOINTS = -1,
914 SPLT_ERROR_CANNOT_OPEN_FILE = -2,
915 SPLT_ERROR_INVALID = -3,
916 SPLT_ERROR_EQUAL_SPLITPOINTS = -5,
917 SPLT_ERROR_SPLITPOINTS_NOT_IN_ORDER = -6,
918 SPLT_ERROR_NEGATIVE_SPLITPOINT = -7,
919 SPLT_ERROR_INCORRECT_PATH = -8,
920 SPLT_ERROR_INCOMPATIBLE_OPTIONS = -10,
921 SPLT_ERROR_INPUT_OUTPUT_SAME_FILE = -12,
922 SPLT_ERROR_CANNOT_ALLOCATE_MEMORY = -15,
923 SPLT_ERROR_CANNOT_OPEN_DEST_FILE = -16,
924 SPLT_ERROR_CANT_WRITE_TO_OUTPUT_FILE = -17,
925 SPLT_ERROR_WHILE_READING_FILE = -18,
926 SPLT_ERROR_SEEKING_FILE = -19,
927 SPLT_ERROR_BEGIN_OUT_OF_FILE = -20,
928 SPLT_ERROR_INEXISTENT_FILE = -21,
929 SPLT_SPLIT_CANCELLED = -22,
930 SPLT_ERROR_LIBRARY_LOCKED = -24,
931 SPLT_ERROR_STATE_NULL = -25,
932 SPLT_ERROR_NEGATIVE_TIME_SPLIT = -26,
933 SPLT_ERROR_CANNOT_CREATE_DIRECTORY = -27,
934 SPLT_ERROR_CANNOT_CLOSE_FILE = -28,
935 SPLT_ERROR_NO_PLUGIN_FOUND = -29,
936 SPLT_ERROR_CANNOT_INIT_LIBLTDL = -30,
937 SPLT_ERROR_CRC_FAILED = -31,
938 SPLT_ERROR_NO_PLUGIN_FOUND_FOR_FILE = -32,
939 SPLT_ERROR_PLUGIN_ERROR = -33,
940 SPLT_ERROR_TIME_SPLIT_VALUE_INVALID = -34,
941 SPLT_ERROR_LENGTH_SPLIT_VALUE_INVALID = -35,
942 SPLT_ERROR_CANNOT_GET_TOTAL_TIME = -36,
943 SPLT_ERROR_LIBID3 = -37,
945 SPLT_FREEDB_ERROR_INITIALISE_SOCKET = -101,
946 SPLT_FREEDB_ERROR_CANNOT_GET_HOST = -102,
947 SPLT_FREEDB_ERROR_CANNOT_OPEN_SOCKET = -103,
948 SPLT_FREEDB_ERROR_CANNOT_CONNECT = -104,
949 SPLT_FREEDB_ERROR_CANNOT_SEND_MESSAGE = -105,
950 SPLT_FREEDB_ERROR_INVALID_SERVER_ANSWER = -106,
951 SPLT_FREEDB_ERROR_SITE_201 = -107,
952 SPLT_FREEDB_ERROR_SITE_200 = -108,
953 SPLT_FREEDB_ERROR_BAD_COMMUNICATION = -109,
954 SPLT_FREEDB_ERROR_GETTING_INFOS = -110,
955 SPLT_FREEDB_NO_CD_FOUND = -111,
956 SPLT_FREEDB_ERROR_CANNOT_RECV_MESSAGE = -112,
957 SPLT_INVALID_CUE_FILE = -115,
958 SPLT_INVALID_CDDB_FILE = -116,
959 SPLT_FREEDB_NO_SUCH_CD_IN_DATABASE = -118,
960 SPLT_FREEDB_ERROR_SITE = -119,
961 SPLT_FREEDB_ERROR_CANNOT_DISCONNECT = -120,
963 SPLT_DEWRAP_ERR_FILE_LENGTH = -200,
964 SPLT_DEWRAP_ERR_VERSION_OLD = -201,
965 SPLT_DEWRAP_ERR_NO_FILE_OR_BAD_INDEX = -202,
966 SPLT_DEWRAP_ERR_FILE_DAMAGED_INCOMPLETE = -203,
967 SPLT_DEWRAP_ERR_FILE_NOT_WRAPED_DAMAGED = -204,
969 SPLT_OUTPUT_FORMAT_ERROR = -400,
971 SPLT_ERROR_INEXISTENT_SPLITPOINT = -500,
973 SPLT_PLUGIN_ERROR_UNSUPPORTED_FEATURE = -600,
975 SPLT_INVALID_AUDACITY_FILE = -700,
977 SPLT_INVALID_REGEX = -800,
978 SPLT_REGEX_NO_MATCH = -801,
979 SPLT_REGEX_UNAVAILABLE = -802,
983 #define SPLT_INTERNAL_PROGRESS_RATE 1
984 #define SPLT_INTERNAL_FRAME_MODE_ENABLED 2
1028 SPLT_OPT_QUIET_MODE,
1169 SPLT_OPT_REPLACE_TAGS_IN_TAGS,
1270 SPLT_TO_FIRST_UPPERCASE,
1271 SPLT_TO_WORD_FIRST_UPPERCASE
1286 #define SPLT_UNDEFINED_GENRE "Other"
1288 #define SPLT_ID3V1_NUMBER_OF_GENRES 127
1292 static const char splt_id3v1_genres[SPLT_ID3V1_NUMBER_OF_GENRES][25] = {
1294 {
"Classic Rock"}, {
"Country"}, {
"Dance"},
1295 {
"Disco"},{
"Funk"},{
"Grunge"},{
"Hip-Hop"},{
"Jazz"},
1296 {
"Metal"},{
"New Age"},{
"Oldies"}, {
"Other"}, {
"Pop"},
1297 {
"R&B"}, {
"Rap"}, {
"Reggae"}, {
"Rock"}, {
"Techno"},
1298 {
"Industrial"}, {
"Alternative"}, {
"Ska"}, {
"Death metal"},
1299 {
"Pranks"}, {
"Soundtrack"}, {
"Euro-Techno"},
1300 {
"Ambient"}, {
"Trip-hop"}, {
"Vocal"}, {
"Jazz+Funk"},
1301 {
"Fusion"}, {
"Trance"}, {
"Classical"}, {
"Instrumental"},
1302 {
"Acid"}, {
"House"}, {
"Game"}, {
"Sound clip"}, {
"Gospel"},
1303 {
"Noise"}, {
"Alt. Rock"}, {
"Bass"}, {
"Soul"}, {
"Punk"},
1304 {
"Space"}, {
"Meditative"}, {
"Instrumental pop"},
1305 {
"Instrumental rock"}, {
"Ethnic"}, {
"Gothic"},{
"Darkwave"},
1306 {
"Techno-Industrial"},{
"Electronic"},{
"Pop-Folk"},{
"Eurodance"},
1307 {
"Dream"},{
"Southern Rock"},{
"Comedy"}, {
"Cult"},{
"Gangsta"},
1308 {
"Top 40"},{
"Christian Rap"},{
"Pop/Funk"}, {
"Jungle"},
1309 {
"Native American"},{
"Cabaret"},{
"New Wave"}, {
"Psychedelic"},
1310 {
"Rave"},{
"Showtunes"},{
"Trailer"}, {
"Lo-Fi"},{
"Tribal"},
1311 {
"Acid Punk"},{
"Acid Jazz"}, {
"Polka"}, {
"Retro"},
1312 {
"Musical"},{
"Rock & Roll"},{
"Hard Rock"},
1314 {
"Folk"}, {
"Folk-Rock"}, {
"National Folk"}, {
"Swing"},
1315 {
"Fast Fusion"}, {
"Bebob"}, {
"Latin"}, {
"Revival"},
1316 {
"Celtic"}, {
"Bluegrass"}, {
"Avantgarde"}, {
"Gothic Rock"},
1317 {
"Progressive Rock"}, {
"Psychedelic Rock"}, {
"Symphonic Rock"},
1318 {
"Slow Rock"}, {
"Big Band"}, {
"Chorus"}, {
"Easy Listening"},
1319 {
"Acoustic"}, {
"Humour"}, {
"Speech"}, {
"Chanson"}, {
"Opera"},
1320 {
"Chamber Music"}, {
"Sonata"}, {
"Symphony"}, {
"Booty Bass"},
1321 {
"Primus"}, {
"Porn Groove"}, {
"Satire"}, {
"Slow Jam"},
1322 {
"Club"}, {
"Tango"}, {
"Samba"}, {
"Folklore"}, {
"Ballad"},
1323 {
"Power Ballad"}, {
"Rhythmic Soul"}, {
"Freestyle"}, {
"Duet"},
1324 {
"Punk Rock"}, {
"Drum Solo"}, {
"A capella"}, {
"Euro-House"},
1337 #define SPLT_FREEDB_SEARCH_TYPE_CDDB_CGI 1
1341 #define SPLT_FREEDB_SEARCH_TYPE_CDDB 2
1347 #define SPLT_FREEDB_GET_FILE_TYPE_CDDB_CGI 3
1352 #define SPLT_FREEDB_GET_FILE_TYPE_CDDB 4
1356 #define SPLT_FREEDB_CDDB_CGI_PORT 80
1360 #define SPLT_FREEDB_CDDB_PORT 8880
1364 #define SPLT_FREEDB_CGI_SITE "freedb.org/~cddb/cddb.cgi"
1365 #define SPLT_FREEDB2_CGI_SITE "tracktype.org/~cddb/cddb.cgi"
1368 #ifndef SPLT_PACKAGE_NAME
1372 #define SPLT_PACKAGE_NAME "libmp3splt"
1374 #ifndef SPLT_PACKAGE_VERSION
1378 #define SPLT_PACKAGE_VERSION "0.7.3"
1383 #define SPLT_AUTHOR "Matteo Trotta | Munteanu Alexandru"
1384 #define SPLT_EMAIL "<mtrotta@users.sourceforge.net> | <io_fx@yahoo.fr>"
1388 #define SPLT_WEBSITE "http://mp3splt.sourceforge.net"
1392 #define MP3SPLT_LIB_GETTEXT_DOMAIN "libmp3splt"
1395 #ifndef SPLT_DIRCHAR
1397 #define SPLT_DIRCHAR '\\'
1398 #define SPLT_DIRSTR "\\"
1399 #define SPLT_NDIRCHAR '/'
1401 #define SPLT_DIRCHAR '/'
1402 #define SPLT_DIRSTR "/"
1403 #define SPLT_NDIRCHAR '\\'
1432 void mp3splt_free_state(
splt_state *state,
int *error);
1467 int mp3splt_set_m3u_filename(
splt_state *state,
const char *filename);
1468 int mp3splt_set_silence_log_filename(
splt_state *state,
const char *filename);
1479 int mp3splt_set_default_comment_tag(
splt_state *state,
const char *default_comment_tag);
1481 int mp3splt_set_default_genre_tag(
splt_state *state,
const char *default_genre_tag);
1507 void (*file_cb)(
const char *,
int,
void *),
void *data);
1516 void (*progress_cb)(
splt_progress *p_bar,
void *),
void *cb_data);
1518 int mp3splt_set_silence_level_function(
splt_state *state,
1519 void (*get_silence_cb)(
long time,
float level,
void *user_data),
1538 long split_value,
const char *name,
int type);
1549 int *splitpoints_number,
int *error);
1565 const char *title,
const char *artist,
1566 const char *album,
const char *performer,
1567 const char *year,
const char *comment,
1568 int track,
const char *genre);
1572 int *tags_number,
int *error);
1575 int mp3splt_put_tags_from_string(
splt_state *state,
const char *tags,
1578 void mp3splt_erase_all_tags(
splt_state *state,
1584 int mp3splt_set_int_option(
splt_state *state,
int option_name,
int value);
1585 int mp3splt_set_long_option(
splt_state *state,
int option_name,
long value);
1586 int mp3splt_set_float_option(
splt_state *state,
int option_name,
float value);
1588 int mp3splt_get_int_option(
splt_state *state,
int option_name,
int *error);
1589 long mp3splt_get_long_option(
splt_state *state,
int option_name,
int *error);
1590 float mp3splt_get_float_option(
splt_state *state,
int option_name,
int *error);
1608 void mp3splt_put_cue_splitpoints_from_file(
splt_state *state,
1609 const char *cue_file,
int *error);
1612 void mp3splt_put_cddb_splitpoints_from_file(
splt_state *state,
1613 const char *cddb_file,
int *error);
1615 void mp3splt_put_audacity_labels_splitpoints_from_file(
splt_state *state,
1616 const char *file,
int *error);
1626 const char *searched_string,
1629 const char *search_server,
1632 void mp3splt_write_freedb_file_result(
splt_state *state,
1634 const char *cddb_file,
1637 const char *cddb_get_server,
1640 void mp3splt_export_to_cue(
splt_state *state,
const char *out_file,
1641 short stop_at_total_time,
int *error);
1644 const char *format_string,
int *error);
1650 int mp3splt_count_silence_points(
splt_state *state,
int *error);
1652 int mp3splt_set_silence_points(
splt_state *state,
int *error);
1653 void mp3splt_set_trim_silence_points(
splt_state *state,
int *error);
1656 void mp3splt_get_version(
char *version);
1659 char *mp3splt_get_strerror(
splt_state *state,
int error_code);
1669 int mp3splt_append_plugins_scan_dir(
splt_state *state,
char *dir);
1672 char *mp3splt_win32_utf16_to_utf8(
const wchar_t *source);
1675 char **mp3splt_find_filenames(
splt_state *state,
const char *filename,
1676 int *num_of_files_found,
int *error);
1678 int mp3splt_u_check_if_directory(
const char *fname);
1680 void mp3splt_free_one_tag(
splt_tags *tags);
1683 int mp3splt_library_is_locked(
splt_state *state);
1685 #define MP3SPLT_MP3SPLT_H