/* Load the tag editor */ gboolean gimmix_tag_editor_populate (const gchar *song) { GtkTreeModel *genre_model; gchar *info; gint min; gint sec; gint n; const TagLib_AudioProperties *properties; if (!song) return FALSE; if (!g_file_test (song, G_FILE_TEST_EXISTS)) return FALSE; file = taglib_file_new (song); if (file == NULL) return FALSE; taglib_set_strings_unicode (FALSE); tag = taglib_file_tag (file); properties = taglib_file_audioproperties (file); gtk_spin_button_set_value (GTK_SPIN_BUTTON(tag_year_spin), taglib_tag_year(tag)); gtk_spin_button_set_value (GTK_SPIN_BUTTON(tag_track_spin), taglib_tag_track(tag)); gtk_label_set_text (GTK_LABEL(tag_file), song); gtk_entry_set_text (GTK_ENTRY(tag_title), g_strstrip(taglib_tag_title(tag))); gtk_entry_set_text (GTK_ENTRY(tag_artist), g_strstrip(taglib_tag_artist(tag))); gtk_entry_set_text (GTK_ENTRY(tag_album), g_strstrip(taglib_tag_album(tag))); gtk_entry_set_text (GTK_ENTRY(tag_comment), g_strstrip(taglib_tag_comment(tag))); gtk_combo_box_append_text (GTK_COMBO_BOX(tag_genre), taglib_tag_genre(tag)); genre_model = gtk_combo_box_get_model (GTK_COMBO_BOX(tag_genre)); n = gtk_tree_model_iter_n_children (genre_model, NULL); gtk_combo_box_set_active (GTK_COMBO_BOX(tag_genre), n-1); /* Audio Information */ sec = taglib_audioproperties_length(properties) % 60; min = (taglib_audioproperties_length(properties) - sec) / 60; info = g_strdup_printf ("%02i:%02i", min, sec); gtk_label_set_text (GTK_LABEL(tag_info_length), info); g_free (info); info = g_strdup_printf ("%i Kbps", taglib_audioproperties_bitrate(properties)); gtk_label_set_text (GTK_LABEL(tag_info_bitrate), info); g_free (info); info = g_strdup_printf ("%i", taglib_audioproperties_channels(properties)); gtk_label_set_text (GTK_LABEL(tag_info_channels), info); g_free (info); taglib_tag_free_strings (); return TRUE; }
int main() { int i; int seconds; int minutes; TagLib_File *file; TagLib_Tag *tag; const TagLib_AudioProperties *properties; //taglib_set_strings_unicode(FALSE); //file = taglib_file_new("/home/milo/Downloads/State_Of_My_Head.mp3"); if(file == NULL) { printf("Err: Can't opne new tab file\n"); exit(1); } tag = taglib_file_tag(file); if(tag != NULL) { printf("-- TAG --\n"); printf("title - \"%s\"\n", taglib_tag_title(tag)); printf("artist - \"%s\"\n", taglib_tag_artist(tag)); printf("album - \"%s\"\n", taglib_tag_album(tag)); printf("year - \"%i\"\n", taglib_tag_year(tag)); printf("comment - \"%s\"\n", taglib_tag_comment(tag)); printf("track - \"%i\"\n", taglib_tag_track(tag)); printf("genre - \"%s\"\n", taglib_tag_genre(tag)); } #if 0 if(properties != NULL) { seconds = taglib_audioproperties_length(properties) % 60; minutes = (taglib_audioproperties_length(properties) - seconds) / 60; printf("-- AUDIO --\n"); printf("bitrate - %i\n", taglib_audioproperties_bitrate(properties)); printf("sample rate - %i\n", taglib_audioproperties_samplerate(properties)); printf("channels - %i\n", taglib_audioproperties_channels(properties)); printf("length - %i:%02i\n", minutes, seconds); } #endif taglib_tag_free_strings(); taglib_file_free(file); return 0; }
int main(int argc, char *argv[]) { int i; int seconds; int minutes; TagLib_File *file; TagLib_Tag *tag; const TagLib_AudioProperties *properties; taglib_set_strings_unicode(FALSE); for(i = 1; i < argc; i++) { printf("******************** \"%s\" ********************\n", argv[i]); file = taglib_file_new(argv[i]); if(file == NULL) break; tag = taglib_file_tag(file); properties = taglib_file_audioproperties(file); if(tag != NULL) { printf("-- TAG --\n"); printf("title - \"%s\"\n", taglib_tag_title(tag)); printf("artist - \"%s\"\n", taglib_tag_artist(tag)); printf("album - \"%s\"\n", taglib_tag_album(tag)); printf("year - \"%i\"\n", taglib_tag_year(tag)); printf("comment - \"%s\"\n", taglib_tag_comment(tag)); printf("track - \"%i\"\n", taglib_tag_track(tag)); printf("genre - \"%s\"\n", taglib_tag_genre(tag)); } if(properties != NULL) { seconds = taglib_audioproperties_length(properties) % 60; minutes = (taglib_audioproperties_length(properties) - seconds) / 60; printf("-- AUDIO --\n"); printf("bitrate - %i\n", taglib_audioproperties_bitrate(properties)); printf("sample rate - %i\n", taglib_audioproperties_samplerate(properties)); printf("channels - %i\n", taglib_audioproperties_channels(properties)); printf("length - %i:%02i\n", minutes, seconds); } taglib_tag_free_strings(); taglib_file_free(file); } return 0; }
static gboolean get_info_taglib(gchar *file, struct tags *tags) { gboolean ret = FALSE; TagLib_File *tfile; TagLib_Tag *tag; const TagLib_AudioProperties *audio_prop; tfile = taglib_file_new(file); if (!tfile) { g_warning("Unable to open file using taglib : %s", file); ret = FALSE; goto exit; } tag = taglib_file_tag(tfile); if (!tag) { g_warning("Unable to locate tag"); ret = FALSE; goto exit; } audio_prop = taglib_file_audioproperties(tfile); if (!audio_prop) { g_warning("Unable to locate audio properties"); ret = FALSE; goto exit; } tags->title = g_strdup(taglib_tag_title(tag)); tags->artist = g_strdup(taglib_tag_artist(tag)); tags->album = g_strdup(taglib_tag_album(tag)); tags->genre = g_strdup(taglib_tag_genre(tag)); tags->comment = g_strdup(taglib_tag_comment(tag)); tags->track_no = taglib_tag_track(tag); tags->year = taglib_tag_year(tag); tags->bitrate = taglib_audioproperties_bitrate(audio_prop); tags->length = taglib_audioproperties_length(audio_prop); tags->channels = taglib_audioproperties_channels(audio_prop); tags->samplerate = taglib_audioproperties_samplerate(audio_prop); ret = TRUE; exit: taglib_tag_free_strings(); taglib_file_free(tfile); return ret; }
static int get_track_info(char *fullPath, mps_library_track_info_t *track_info) { int rv = MPS_LIBRARYDBD_SUCCESS; TagLib_File *tagLibFile; TagLib_Tag *tagLibTag; TagLib_File_Type tagLibType; mps_library_element_type_t mpsFileType; const TagLib_AudioProperties *tagLibProp; char *tmpString; MPS_DBG_PRINT("Entering %s(0x%08x)\n", __func__, (unsigned int) track_info); taglib_set_strings_unicode(true); mpsFileType = track_info->file_type; tagLibType = (mpsFileType==MPS_LIBRARY_MP3_FILE?TagLib_File_MPEG: mpsFileType==MPS_LIBRARY_FLAC_FILE?TagLib_File_FLAC: mpsFileType==MPS_LIBRARY_OGG_FILE?TagLib_File_OggVorbis: mpsFileType==MPS_LIBRARY_AAC_FILE?TagLib_File_MP4: mpsFileType==MPS_LIBRARY_APPLE_LOSSLESS_FILE?TagLib_File_MP4: mpsFileType==MPS_LIBRARY_WMA_FILE?TagLib_File_ASF: mpsFileType==MPS_LIBRARY_AIF_FILE?TagLib_File_AIFF: mpsFileType==MPS_LIBRARY_WAV_FILE?TagLib_File_WAV: 0); tagLibFile = taglib_file_new_type(fullPath, tagLibType); if(tagLibFile == NULL) { MPS_DBG_PRINT("Call to taglib_file_new(%s) failed.\n", fullPath); rv = MPS_LIBRARYDBD_FAILURE; goto ERR_OUT; } tagLibTag = taglib_file_tag(tagLibFile); tagLibProp = taglib_file_audioproperties(tagLibFile); /* TODO: need to go one step further to determine whether a file with an "m4a", etc. header is actually an apple lossless */ track_info->file_type = mpsFileType; tmpString = taglib_tag_title(tagLibTag); if (tmpString != NULL) { copy_string_without_edge_whitespace(track_info->title, tmpString, MPS_MAX_TRACK_INFO_FIELD_LENGTH); MPS_DBG_PRINT("Copied \"%s\" into track_title->title\n", track_info->title); } tmpString = taglib_tag_album(tagLibTag); if (tmpString != NULL) { copy_string_without_edge_whitespace(track_info->album, tmpString, MPS_MAX_TRACK_INFO_FIELD_LENGTH); MPS_DBG_PRINT("Copied \"%s\" into track_title->album\n", track_info->album); } tmpString = taglib_tag_artist(tagLibTag); if (tmpString != NULL) { copy_string_without_edge_whitespace(track_info->artist, tmpString, MPS_MAX_TRACK_INFO_FIELD_LENGTH); MPS_DBG_PRINT("Copied \"%s\" into track_title->artist\n", track_info->artist); } track_info->year = taglib_tag_year(tagLibTag); MPS_DBG_PRINT("Copied \"%d\" into track_title->year\n", track_info->year); tmpString = taglib_tag_genre(tagLibTag); if (tmpString != NULL) { copy_string_without_edge_whitespace(track_info->genre, tmpString, MPS_MAX_TRACK_INFO_FIELD_LENGTH); MPS_DBG_PRINT("Copied \"%s\" into track_title->genre\n", track_info->genre); } track_info->ordinal_track_number = taglib_tag_track(tagLibTag); MPS_DBG_PRINT("Copied \"%d\" into track_title->ordinal_track_number\n", track_info->ordinal_track_number); if (tagLibProp != NULL) { MPS_DBG_PRINT("Setting bitrate, etc.\n"); track_info->bitrate = taglib_audioproperties_bitrate(tagLibProp); track_info->sampling_rate = taglib_audioproperties_samplerate(tagLibProp); track_info->channel_mode = (taglib_audioproperties_channels(tagLibProp) < 2 ? MPS_CHANNEL_MODE_MONO: MPS_CHANNEL_MODE_STEREO); track_info->vbr_mode = MPS_VBR_MODE_UNKNOWN; track_info->time_length = taglib_audioproperties_length(tagLibProp); #if 0 track_info->channel_mode = ((finfo.mode==MPG123_M_STEREO)?MPS_CHANNEL_MODE_STEREO: ((finfo.mode==MPG123_M_JOINT)?MPS_CHANNEL_MODE_JOINT_STEREO: ((finfo.mode==MPG123_M_DUAL)?MPS_CHANNEL_MODE_DUAL_CHANNEL: ((finfo.mode==MPG123_M_MONO)?MPS_CHANNEL_MODE_MONO: MPS_CHANNEL_MODE_UNKNOWN)))); track_info->vbr_mode = ((finfo.vbr==MPG123_CBR)?MPS_VBR_MODE_CONSTANT: ((finfo.vbr==MPG123_VBR)?MPS_VBR_MODE_VARIABLE: ((finfo.vbr==MPG123_ABR)?MPS_VBR_MODE_AVERAGE: MPS_VBR_MODE_UNKNOWN))); if (track_info->sampling_rate > 0) { total_samples = mpg123_length_64(m); track_info->time_length = total_samples/track_info->sampling_rate; } #endif } else { MPS_LOG("taglib_file_audioproperties() returned NULL"); } ERR_OUT: taglib_tag_free_strings(); taglib_file_free(tagLibFile); MPS_DBG_PRINT("Leaving %s() - return value %d\n", __func__, rv); return rv; }
int hgd_get_tag_metadata(char *filename, struct hgd_media_tag *meta) { #ifdef HAVE_TAGLIB TagLib_File *file; TagLib_Tag *tag; const TagLib_AudioProperties *ap; #endif DPRINTF(HGD_D_DEBUG, "Attempting to read tags for '%s'", filename); meta->artist = xstrdup(""); meta->title = xstrdup(""); meta->album = xstrdup(""); meta->genre = xstrdup(""); meta->year = 0; meta->duration = 0; meta->samplerate = 0; meta->channels = 0; meta->bitrate = 0; #ifdef HAVE_TAGLIB file = taglib_file_new(filename); if (file == NULL) { DPRINTF(HGD_D_DEBUG, "taglib could not open '%s'", filename); return (HGD_FAIL); } if (!taglib_file_is_valid(file)) { DPRINTF(HGD_D_WARN, "invalid tag in '%s'", filename); return (HGD_FAIL); } tag = taglib_file_tag(file); if (tag == NULL) { DPRINTF(HGD_D_WARN, "failed to get tag of '%s'", filename); return (HGD_FAIL); } free(meta->artist); free(meta->title); free(meta->album); free(meta->genre); meta->artist = xstrdup(taglib_tag_artist(tag)); meta->title = xstrdup(taglib_tag_title(tag)); meta->album = xstrdup(taglib_tag_album(tag)); meta->genre = xstrdup(taglib_tag_genre(tag)); meta->year = taglib_tag_year(tag); /* now audio properties: i dont consider this failing fatal */ ap = taglib_file_audioproperties(file); if (ap != NULL) { meta->duration = taglib_audioproperties_length(ap); meta->samplerate = taglib_audioproperties_samplerate(ap); meta->channels = taglib_audioproperties_channels(ap); meta->bitrate = taglib_audioproperties_bitrate(ap); } else { DPRINTF(HGD_D_WARN, "failed to get audio properties: %s", filename); } DPRINTF(HGD_D_INFO, "Got tag from '%s': '%s' by '%s' from the album '%s' from the year" "'%u' of genre '%s' [%d secs, %d chans, %d Hz, %d bps]\n", filename, meta->title, meta->artist, meta->album, meta->year, meta->genre, meta->duration, meta->channels, meta->samplerate, meta->bitrate); taglib_tag_free_strings(); #else DPRINTF(HGD_D_DEBUG, "No taglib support, skipping tag retrieval"); #endif return (HGD_OK); }
/* Load the tag editor */ gboolean gimmix_tag_editor_populate (const void *song) { GtkTreeModel *genre_model; gchar *info; gint n; guint year = 0; guint track = 0; gchar *title = NULL; gchar *artist = NULL; gchar *album = NULL; gchar *genre = NULL; gchar *comment = NULL; if (!song) return FALSE; #ifdef HAVE_TAGEDITOR const TagLib_AudioProperties *properties; if (!g_file_test(song,G_FILE_TEST_EXISTS)) return FALSE; file = taglib_file_new (song); if (file == NULL) return FALSE; taglib_set_strings_unicode (FALSE); tag = taglib_file_tag (file); properties = taglib_file_audioproperties (file); #else mpd_Song *foo = (mpd_Song*) g_malloc0 (sizeof(mpd_Song)); memcpy (foo, song, sizeof(mpd_Song)); #endif #ifdef HAVE_TAGEDITOR year = taglib_tag_year (tag); track = taglib_tag_track (tag); title = g_strstrip (taglib_tag_title(tag)); artist = g_strstrip (taglib_tag_artist(tag)); album = g_strstrip (taglib_tag_album(tag)); comment = g_strstrip (taglib_tag_comment(tag)); genre = taglib_tag_genre (tag); #else if (foo->date) { year = atoi (foo->date); } if (foo->track) { track = atoi (foo->track); } title = foo->title; artist = foo->artist; album = foo->album; comment = foo->comment; genre = foo->genre; #endif gtk_spin_button_set_value (GTK_SPIN_BUTTON(tag_year_spin), year); gtk_spin_button_set_value (GTK_SPIN_BUTTON(tag_track_spin), track); gtk_entry_set_text (GTK_ENTRY(tag_file), #ifdef HAVE_TAGEDITOR song #else foo->file #endif ); if (title) { gtk_entry_set_text (GTK_ENTRY(tag_title), title); } if (artist) { gtk_entry_set_text (GTK_ENTRY(tag_artist), artist); } if (album) { gtk_entry_set_text (GTK_ENTRY(tag_album), album); } if (comment) { gtk_entry_set_text (GTK_ENTRY(tag_comment), comment); } if (genre) { gtk_combo_box_append_text (GTK_COMBO_BOX(tag_genre), genre); } genre_model = gtk_combo_box_get_model (GTK_COMBO_BOX(tag_genre)); n = gtk_tree_model_iter_n_children (genre_model, NULL); gtk_combo_box_set_active (GTK_COMBO_BOX(tag_genre), n-1); /* Audio Information */ #ifdef HAVE_TAGEDITOR guint sec = taglib_audioproperties_length(properties) % 60; guint min = (taglib_audioproperties_length(properties) - sec) / 60; info = g_strdup_printf ("%02i:%02i", min, sec); gtk_label_set_text (GTK_LABEL(tag_info_length), info); #else char *tok = NULL; info = (char*) g_malloc0 (sizeof(char)*32); gimmix_get_progress_status (gmo, NULL, info); tok = strtok (info, "/"); tok = strtok (NULL, "/"); g_strstrip (tok); gtk_label_set_text (GTK_LABEL(tag_info_length), tok); #endif g_free (info); #ifdef HAVE_TAGEDITOR info = g_strdup_printf ("%i Kbps", taglib_audioproperties_bitrate(properties)); #else info = g_strdup_printf ("%i Kbps", mpd_status_get_bitrate(gmo)); #endif gtk_label_set_text (GTK_LABEL(tag_info_bitrate), info); g_free (info); #ifdef HAVE_TAGEDITOR info = g_strdup_printf ("%i", taglib_audioproperties_channels(properties)); #else info = g_strdup_printf ("%i", mpd_status_get_channels(gmo)); #endif gtk_label_set_text (GTK_LABEL(tag_info_channels), info); g_free (info); #ifdef HAVE_TAGEDITOR taglib_tag_free_strings (); #else free (foo); #endif return TRUE; }