func (f *File) GetProperties() *Properties { ap := C.taglib_file_audioproperties((*C.TagLib_File)(f)) if ap == nil { return nil } p := Properties{} p.Length = int(C.taglib_audioproperties_length(ap)) p.Bitrate = int(C.taglib_audioproperties_bitrate(ap)) p.Samplerate = int(C.taglib_audioproperties_samplerate(ap)) p.Channels = int(C.taglib_audioproperties_channels(ap)) return &p }
// 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 }
// Returns the number of channels in the audio stream. func (file *File) Channels() int { glock.Lock() defer glock.Unlock() return int(C.taglib_audioproperties_channels(file.props)) }