func (f *File) GetTags() *Tags { ts := C.taglib_file_tag((*C.TagLib_File)(f)) a := Tags{} if ts != nil { a.Title = C.GoString(C.taglib_tag_title(ts)) a.Artist = C.GoString(C.taglib_tag_artist(ts)) a.Album = C.GoString(C.taglib_tag_album(ts)) a.Comment = C.GoString(C.taglib_tag_comment(ts)) a.Genre = C.GoString(C.taglib_tag_genre(ts)) a.Year = int(C.taglib_tag_year(ts)) a.Track = int(C.taglib_tag_track(ts)) } return &a }
// Constructor of Tags func Read(filename string) (*Tags, error) { //convert filename to a C-string and make sure to free it afterwards cfilename := C.CString(filename) defer C.free(unsafe.Pointer(cfilename)) taglib_file := C.taglib_file_new(cfilename) defer C.taglib_file_free((*C.TagLib_File)(taglib_file)) if taglib_file == nil { return nil, fmt.Errorf("Unrecognized filetype or unreadable file.") } if C.taglib_file_is_valid(taglib_file) == 0 { return nil, ErrUnreadableTag{} } taglib_tag := C.taglib_file_tag(taglib_file) if taglib_tag == nil { return nil, fmt.Errorf("Can't access 'taglib_file' in TagLib library.") } taglib_audioprop := C.taglib_file_audioproperties(taglib_file) if taglib_tag == nil { return nil, fmt.Errorf("Can't access 'taglib_audioprob' in TagLib library.") } p := Properties{ Bitrate: int(C.taglib_audioproperties_bitrate(taglib_audioprop)), Length: int(C.taglib_audioproperties_length(taglib_audioprop)), Samplerate: int(C.taglib_audioproperties_samplerate(taglib_audioprop)), Channels: int(C.taglib_audioproperties_channels(taglib_audioprop)), } return &Tags{ Filename: filename, Title: C.GoString(C.taglib_tag_title(taglib_tag)), Artist: C.GoString(C.taglib_tag_artist(taglib_tag)), Album: C.GoString(C.taglib_tag_album(taglib_tag)), Comment: C.GoString(C.taglib_tag_comment(taglib_tag)), Genre: C.GoString(C.taglib_tag_genre(taglib_tag)), Year: int(C.taglib_tag_year(taglib_tag)), Track: int(C.taglib_tag_track(taglib_tag)), Properties: p, }, nil }
func NewBasicTag(path string, info os.FileInfo) (Tag, error) { path_c := C.CString(path) defer C.free(unsafe.Pointer(path_c)) f := C.taglib_file_new(path_c) defer C.taglib_file_free(f) if unsafe.Pointer(f) == nil { return nil, errors.New(fmt.Sprintf("Tagger: Couldn't open file at %s", path)) } if C.taglib_file_is_valid(f) == 0 { return nil, errors.New(fmt.Sprintf("Tagger: File at %s is invalid.", path)) } ret := BasicTag{} f_tag := C.taglib_file_tag(f) ret.album = C.GoString(C.taglib_tag_album(f_tag)) ret.artist = C.GoString(C.taglib_tag_artist(f_tag)) ret.comment = C.GoString(C.taglib_tag_comment(f_tag)) ret.genre = C.GoString(C.taglib_tag_genre(f_tag)) ret.title = C.GoString(C.taglib_tag_title(f_tag)) ret.track_number = int64(C.taglib_tag_track(f_tag)) ret.year = int64(C.taglib_tag_year(f_tag)) f_prop := C.taglib_file_audioproperties(f) ret.bit_rate_kbit = int64(C.taglib_audioproperties_bitrate(f_prop)) ret.sample_rate_hz = int64(C.taglib_audioproperties_samplerate(f_prop)) ret.time_ms = int64(C.taglib_audioproperties_length(f_prop)) * 1000 //s->ms ret.size_byte = info.Size() return ret, nil }
// Returns a string with this tag's comment. func (file *File) Comment() string { glock.Lock() defer glock.Unlock() return convertAndFree(C.taglib_tag_comment(file.tag)) }
func (t *TagLib_Tag) Comment() (comment string) { ccomment := C.taglib_tag_comment(t._Ctype_TagLib_Tag) defer C.taglib_tag_free_strings() comment = C.GoString(ccomment) return }