41 static List<char *> strings;
42 static bool stringManagementEnabled =
false;
46 stringManagementEnabled = bool(management);
52 if(!stringManagementEnabled)
55 for(List<char *>::Iterator it = strings.begin(); it != strings.end(); ++it)
61 static char **string_list_to_c_array(
const StringList &list,
int *out_length) {
66 uint len = list.size();
67 char **array = (
char**)malloc(len *
sizeof(
char*));
69 for(StringList::ConstIterator it = list.begin(); it != list.end(); ++it) {
70 array[j] = ::strdup((*it).toCString(
false));
71 if(stringManagementEnabled && array[j])
72 strings.prepend(array[j]);
79 static StringList string_list_from_c_array(
const char*
const* array,
int length) {
81 for(
int j = 0; j < length; j++) {
83 list.append(array[j]);
99 return reinterpret_cast<TagInfo_Info *
>(Info::create(filename));
110 return reinterpret_cast<TagInfo_Info *
>(Info::create_with_file_type(filename,
111 (MediaFileType)media_file_type)
122 return reinterpret_cast<TagInfo_Info *
>(Info::create_from_mime(filename,
129 Info *i =
reinterpret_cast<Info *
>(info);
130 return i != NULL && i->is_valid();
139 delete reinterpret_cast<Info *
>(info);
148 Info *i =
reinterpret_cast<Info *
>(info);
154 Info *i =
reinterpret_cast<Info *
>(info);
164 const Info *i =
reinterpret_cast<const Info *
>(info);
165 String artist = i->get_artist();
166 char *s = ::strdup(artist.toCString(
true));
167 if(stringManagementEnabled && s)
177 Info *i =
reinterpret_cast<Info *
>(info);
178 i->set_artist(String(artist, String::UTF8));
187 const Info *i =
reinterpret_cast<const Info *
>(info);
188 String artist = i->get_original_artist ();
189 char *s = ::strdup(artist.toCString(
true));
190 if(stringManagementEnabled && s)
200 Info *i =
reinterpret_cast<Info *
>(info);
201 i->set_original_artist (String(artist, String::UTF8));
210 const Info *i =
reinterpret_cast<const Info *
>(info);
211 String album = i->get_album();
212 char *s = ::strdup(album.toCString(
true));
213 if(stringManagementEnabled && s)
223 Info *i =
reinterpret_cast<Info *
>(info);
224 i->set_album(String(album, String::UTF8));
233 const Info *i =
reinterpret_cast<const Info *
>(info);
234 String title = i->get_title();
235 char *s = ::strdup(title.toCString(
true));
236 if(stringManagementEnabled && s)
246 Info *i =
reinterpret_cast<Info *
>(info);
247 i->set_title(String(title, String::UTF8));
256 const Info *i =
reinterpret_cast<const Info *
>(info);
257 String album_artist = i->get_album_artist();
258 char *s = ::strdup(album_artist.toCString(
true));
259 if(stringManagementEnabled && s)
269 Info *i =
reinterpret_cast<Info *
>(info);
270 i->set_album_artist(String(albumartist, String::UTF8));
279 const Info *i =
reinterpret_cast<const Info *
>(info);
280 String comments = i->get_comments();
281 char *s = ::strdup(comments.toCString(
true));
282 if(stringManagementEnabled && s)
292 Info *i =
reinterpret_cast<Info *
>(info);
293 i->set_comments(String(comment, String::UTF8));
302 const Info *i =
reinterpret_cast<const Info *
>(info);
303 String composer = i->get_composer();
304 char *s = ::strdup(composer.toCString(
true));
305 if(stringManagementEnabled && s)
315 Info *i =
reinterpret_cast<Info *
>(info);
316 i->set_composer(String(composer, String::UTF8));
325 const Info *i =
reinterpret_cast<const Info *
>(info);
326 String homepage = i->get_homepage();
327 char *s = ::strdup(homepage.toCString(
true));
328 if(stringManagementEnabled && s)
338 Info *i =
reinterpret_cast<Info *
>(info);
339 i->set_homepage(String(homepage, String::UTF8));
348 const Info *i =
reinterpret_cast<const Info *
>(info);
349 String encoder = i->get_encoder();
350 char *s = ::strdup(encoder.toCString(
true));
351 if(stringManagementEnabled && s)
361 Info *i =
reinterpret_cast<Info *
>(info);
362 i->set_encoder(String(encoder, String::UTF8));
371 const Info *i =
reinterpret_cast<const Info *
>(info);
372 String copyright = i->get_copyright();
373 char *s = ::strdup(copyright.toCString(
true));
374 if(stringManagementEnabled && s)
384 Info *i =
reinterpret_cast<Info *
>(info);
385 i->set_copyright(String(copyright, String::UTF8));
394 const Info *i =
reinterpret_cast<const Info *
>(info);
395 String genre = i->get_genre();
396 char *s = ::strdup(genre.toCString(
true));
397 if(stringManagementEnabled && s)
407 Info *i =
reinterpret_cast<Info *
>(info);
408 i->set_genre(String(genre, String::UTF8));
417 const Info *i =
reinterpret_cast<const Info *
>(info);
418 return i->get_track_number();
426 Info *i =
reinterpret_cast<Info *
>(info);
427 i->set_track_number(track_number);
436 const Info *i =
reinterpret_cast<const Info *
>(info);
437 return i->get_track_count();
445 Info *i =
reinterpret_cast<Info *
>(info);
446 i->set_track_count(track_count);
455 const Info *i =
reinterpret_cast<const Info *
>(info);
456 return i->get_year();
464 Info *i =
reinterpret_cast<Info *
>(info);
474 const Info *i =
reinterpret_cast<const Info *
>(info);
475 return i->get_bitrate();
484 const Info *i =
reinterpret_cast<const Info *
>(info);
485 return i->get_samplerate();
494 const Info *i =
reinterpret_cast<const Info *
>(info);
495 return i->get_channels();
504 const Info *i =
reinterpret_cast<const Info *
>(info);
505 return i->get_length_seconds();
514 const Info *i =
reinterpret_cast<const Info *
>(info);
516 return i->get_has_image();
525 const Info *i =
reinterpret_cast<const Info *
>(info);
526 return i->get_volume_number();
534 Info *i =
reinterpret_cast<Info *
>(info);
535 i->set_volume_number(number);
545 const Info * i =
reinterpret_cast<const Info *
>(info);
546 return i->get_beats_per_minute();
554 Info * i =
reinterpret_cast<Info *
>(info);
555 i->set_beats_per_minute(new_bpm);
564 const Info *i =
reinterpret_cast<const Info *
>(info);
565 return i->get_volume_count();
573 Info *i =
reinterpret_cast<Info *
>(info);
574 i->set_volume_count(count);
583 const Info *i =
reinterpret_cast<const Info *
>(info);
584 return i->get_rating();
592 Info *i =
reinterpret_cast<Info *
>(info);
593 i->set_rating(rating);
602 const Info *i =
reinterpret_cast<const Info *
>(info);
603 return i->get_playcount();
611 Info *i =
reinterpret_cast<Info *
>(info);
612 i->set_playcount(count);
621 const Info *i =
reinterpret_cast<const Info *
>(info);
622 BOOL s = i->get_is_compilation();
631 Info *i =
reinterpret_cast<Info *
>(info);
632 i->set_is_compilation((
bool)is_compilation);
642 int *labels_length) {
643 const Info *i =
reinterpret_cast<const Info *
>(info);
644 StringList list = i->get_track_labels_list();
645 return string_list_to_c_array(list, labels_length);
654 const char*
const* labels,
int labels_length) {
655 Info *i =
reinterpret_cast<Info *
>(info);
656 StringList list = string_list_from_c_array(labels, labels_length);
657 i->set_track_labels_list(list);
667 int *labels_length) {
668 const Info *i =
reinterpret_cast<const Info *
>(info);
669 StringList list = i->get_album_labels_list();
670 return string_list_to_c_array(list, labels_length);
679 const char*
const* labels,
int labels_length) {
680 Info *i =
reinterpret_cast<Info *
>(info);
681 StringList list = string_list_from_c_array(labels, labels_length);
682 i->set_album_labels_list(list);
692 int * labels_length) {
693 const Info *i =
reinterpret_cast<const Info *
>(info);
694 StringList list = i->get_artist_labels_list();
695 return string_list_to_c_array(list, labels_length);
704 const char*
const* labels,
int labels_length) {
705 Info *i =
reinterpret_cast<Info *
>(info);
706 StringList list = string_list_from_c_array(labels, labels_length);
707 i->set_artist_labels_list(list);
715 Image ** image_list_to_image_array(
const ImageList &images,
int &image_count) {
717 if(0 < images.size()) {
718 Image ** image_array =
new Image*[images.size()];
720 for(ImageList::ConstIterator it = images.begin(); it != images.end(); ++it) {
721 image_array[i] = *it;
738 const Info *i =
reinterpret_cast<const Info *
>(info);
739 ImageList image_list = i->get_images();
740 image_list.setAutoDelete(
false);
746 ImageList image_array_to_image_list(Image ** image_array,
int image_count) {
748 list.setAutoDelete(
false);
749 for(
int i = 0; i < image_count; i++) {
750 list.append(reinterpret_cast<Image *>(image_array[i]));
763 Info *i =
reinterpret_cast<Info *
>(info);
764 const ImageList img_list = image_array_to_image_list(reinterpret_cast<Image **>(images), image_count);
765 i->set_images(img_list);
771 Image * i =
new Image();
784 const Image *i =
reinterpret_cast<const Image *
>(img);
785 return i->get_data(*bin_data_length);
795 if(!img || bin_data_length <= 0)
797 Image *i =
reinterpret_cast<Image *
>(img);
798 i->set_data(bin_data, bin_data_length);
809 const Image *i =
reinterpret_cast<const Image *
>(img);
821 Image *i =
reinterpret_cast<Image *
>(img);
822 i->set_content_type(static_cast<Image::ContentType>(itype));
833 const Image *i =
reinterpret_cast<const Image *
>(img);
845 Image *i =
reinterpret_cast<Image *
>(img);
846 i->set_file_type(static_cast<Image::FileType>(image_f_type));
857 const Image *i =
reinterpret_cast<const Image *
>(img);
858 return ::strdup(i->get_description().toCString(
false));
869 Image *i =
reinterpret_cast<Image *
>(img);
872 i->set_description(s);
874 i->set_description(new_description);
885 Image *i =
reinterpret_cast<Image *
>(img);
912 const Info *i =
reinterpret_cast<const Info *
>(info);
913 String lyrics = i->get_lyrics();
914 char *s = ::strdup(lyrics.toCString(
true));
915 if(stringManagementEnabled && s)
926 Info *i =
reinterpret_cast<Info *
>(info);
927 i->set_lyrics(String(lyrics));
char * taginfo_info_get_composer(const TagInfo_Info *info)
int taginfo_info_get_track_count(const TagInfo_Info *info)
TagInfo_Info * taginfo_info_create_from_mime(const char *filename, const char *mime_type)
BOOL taginfo_info_save(TagInfo_Info *info)
void taginfo_info_set_track_labels(TagInfo_Info *info, const char *const *data, int data_length)
Set an array of user defined track labels.
void taginfo_info_set_artist(TagInfo_Info *info, const char *artist)
TagInfo_Image ** taginfo_info_get_images(const TagInfo_Info *info, int *image_count)
Get an array of images copied from the file embedded images.
void taginfo_image_set_content_type(TagInfo_Image *img, TagInfo_ImageContentType itype)
Set the content's type of the image.
TagInfo_Info * taginfo_info_create(const char *filename)
BOOL taginfo_info_get_has_image(const TagInfo_Info *info)
Get information on the availability of an image that is embedded in the media file.
int taginfo_info_get_playcount(const TagInfo_Info *info)
Get the play count of a media track.
char * taginfo_info_get_artist(const TagInfo_Info *info)
Get the artist tag of a media track.
int taginfo_info_get_channels(const TagInfo_Info *info)
void taginfo_info_set_title(TagInfo_Info *info, const char *title)
TagInfo_ImageFileType
is an enumeration of image file types for embedded images
#define BOOL
Boolean value as integer.
void taginfo_info_set_rating(TagInfo_Info *info, int rating)
Set the rating tag of a media track. rating 1 - 5; 0 -> not set.
void taginfo_info_set_track_number(TagInfo_Info *info, int track_number)
int taginfo_info_get_rating(const TagInfo_Info *info)
Get the rating of a media track. rating 1 - 5; 0 -> not set.
char * taginfo_info_get_homepage(const TagInfo_Info *info)
BOOL taginfo_info_load(TagInfo_Info *info)
char * taginfo_info_get_albumartist(const TagInfo_Info *info)
void taginfo_image_set_file_type(TagInfo_Image *img, TagInfo_ImageFileType image_f_type)
Set the file's type of the image.
void taginfo_info_set_encoder(TagInfo_Info *info, const char *encoder)
char * taginfo_info_get_album(const TagInfo_Info *info)
void taginfo_info_set_original_artist(TagInfo_Info *info, const char *artist)
void taginfo_info_set_is_compilation(TagInfo_Info *info, BOOL is_compilation)
Set the information if the media file is part of a compilation / VA album.
char * taginfo_info_get_encoder(const TagInfo_Info *info)
int taginfo_info_get_length(const TagInfo_Info *info)
void taginfo_image_free(TagInfo_Image *img)
void taginfo_info_set_comment(TagInfo_Info *info, const char *comment)
TagInfo_ImageFileType taginfo_image_get_file_type(const TagInfo_Image *img)
Get the file's type of the image.
void taginfo_info_set_albumartist(TagInfo_Info *info, const char *albumartist)
TagInfo_MediaFileType
is an enumeration of media file types supported in libtaginfo
int taginfo_info_get_beats_per_minute(const TagInfo_Info *info)
Get the BPM of a media track.
void taginfo_info_set_track_count(TagInfo_Info *info, int track_number)
void taginfo_info_set_artist_labels(TagInfo_Info *info, const char *const *data, int data_length)
Set an array of user defined artist labels.
void taginfo_info_set_volume_number(TagInfo_Info *info, int number)
Set the volume number tag of a media track.
void taginfo_info_set_copyright(TagInfo_Info *info, const char *copyright)
TagInfo_ImageContentType taginfo_image_get_content_type(const TagInfo_Image *img)
Get the content's type of the image.
int taginfo_info_get_volume_number(const TagInfo_Info *info)
Get the volume number of a media track.
TagInfo_ImageContentType
enumeration for image content description
TagInfo_Image * taginfo_image_new()
void taginfo_image_array_free(TagInfo_Image **img_arr)
char * taginfo_info_get_lyrics(const TagInfo_Info *info)
Get a lyrics string from the media file.
void taginfo_info_free_strings()
char ** taginfo_info_get_album_labels(const TagInfo_Info *info, int *data_length)
Get an array of user defined album labels.
void taginfo_info_set_album_labels(TagInfo_Info *info, const char *const *data, int data_length)
Set an array of user defined album labels.
void taginfo_info_set_composer(TagInfo_Info *info, const char *composer)
An image type not listed here.
void taginfo_info_set_year(TagInfo_Info *info, int year)
int taginfo_info_get_volume_count(const TagInfo_Info *info)
Get the volume count of a media track.
int taginfo_info_get_bitrate(const TagInfo_Info *info)
char ** taginfo_info_get_artist_labels(const TagInfo_Info *info, int *data_length)
Get an array of user defined artist labels.
void taginfo_info_set_playcount(TagInfo_Info *info, int count)
Set the play count tag of a media track.
void taginfo_info_set_lyrics(TagInfo_Info *info, const char *lyrics)
Set a lyrics string to the media file.
char * taginfo_info_get_title(const TagInfo_Info *info)
char * taginfo_info_get_original_artist(const TagInfo_Info *info)
void taginfo_info_set_volume_count(TagInfo_Info *info, int count)
Set the volume count tag of a media track.
char * taginfo_info_get_copyright(const TagInfo_Info *info)
void taginfo_info_set_homepage(TagInfo_Info *info, const char *homepage)
void taginfo_info_set_beats_per_minute(TagInfo_Info *info, int new_bpm)
Set the BPM of a media track.
char * taginfo_info_get_genre(const TagInfo_Info *info)
void taginfo_info_set_genre(TagInfo_Info *info, const char *genre)
void taginfo_image_set_description(TagInfo_Image *img, const char *new_description)
Set the file's type of the image.
char ** taginfo_info_get_track_labels(const TagInfo_Info *info, int *data_length)
Get an array of user defined track labels.
char * taginfo_image_get_description(const TagInfo_Image *img)
Get the file's type of the image.
char * taginfo_info_get_comment(const TagInfo_Info *info)
void taginfo_info_set_album(TagInfo_Info *info, const char *album)
int taginfo_info_get_samplerate(const TagInfo_Info *info)
int taginfo_info_get_year(const TagInfo_Info *info)
BOOL taginfo_info_get_is_compilation(const TagInfo_Info *info)
Get the information if the media file is part of a compilation / VA album.
char * taginfo_image_get_data(const TagInfo_Image *img, unsigned int *bin_data_length)
Get the binary data of the image.
void taginfo_image_set_data(TagInfo_Image *img, char *bin_data, unsigned int bin_data_length)
Set the binary data of the image.
void taginfo_info_free(TagInfo_Info *info)
void taginfo_info_enable_string_management(BOOL management)
Enable string management for libtaginfo.
int taginfo_info_get_track_number(const TagInfo_Info *info)
void taginfo_info_set_images(TagInfo_Info *info, TagInfo_Image **images, const int image_count)
Set an array of TagInfo_Image to be embedded into the media file.
TagInfo_Info * taginfo_info_create_with_file_type(const char *filename, TagInfo_MediaFileType format)