コード例 #1
0
ファイル: taglib.go プロジェクト: natemontgomery/rvrn
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
}
コード例 #2
0
ファイル: gotaglib.go プロジェクト: mokasin/gotaglib
// 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
}
コード例 #3
0
ファイル: taglib.go プロジェクト: jbrukh/go-taglib
// 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))
}