Example #1
0
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
}
Example #2
0
// 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
}
Example #3
0
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
}
Example #4
0
// Returns the tag's track number or 0 if track number is not set.
func (file *File) Track() int {
	glock.Lock()
	defer glock.Unlock()

	return int(C.taglib_tag_track(file.tag))
}
Example #5
0
func (t *TagLib_Tag) Track() (track uint) {
	ctrack := C.taglib_tag_track(t._Ctype_TagLib_Tag)
	track = uint(ctrack)
	return
}