func (f flacParser) Tag(name string) string {
	return f.tags[strings.ToUpper(name)]
}
Tag attempts to return the raw, unprocessed tag with the specified name for this stream
package taggolib
import (
	"encoding/binary"
	"fmt"
	"io"
	"strconv"
	"strings"
	"time"
	"github.com/eaburns/bit"
)
const (
	flacStreamInfo = 0
	flacVorbisComment = 4
)
var (
	flacMagicNumber = []byte("fLaC")
)
type flacParser struct {
	encoder    string
	endPos     int64
	properties *flacStreamInfoBlock
	reader     io.ReadSeeker
	tags       map[string]string
	buffer []byte
}
func (f flacParser) Album() string {
	return f.tags[tagAlbum]
}
func (f flacParser) AlbumArtist() string {
	return f.tags[tagAlbumArtist]
}
func (f flacParser) Artist() string {
	return f.tags[tagArtist]
}
func (f flacParser) BitDepth() int {
	return int(f.properties.BitsPerSample)
}
func (f flacParser) Bitrate() int {
	seconds := f.Duration().Seconds()
	if f.endPos == 0 || seconds == 0 {
		return 0
	}
	return int(((f.endPos * 8) / int64(f.Duration().Seconds())) / 1024)
}
func (f flacParser) Channels() int {
	return int(f.properties.ChannelCount)
}
func (f flacParser) Checksum() string {
	return f.properties.MD5Checksum
}
func (f flacParser) Comment() string {
	return f.tags[tagComment]
}
func (f flacParser) Date() string {
	return f.tags[tagDate]
}
func (f flacParser) DiscNumber() int {
	disc, err := strconv.Atoi(f.tags[tagDiscNumber])
	if err != nil {
		return 0
	}
	return disc
}
func (f flacParser) Duration() time.Duration {
	return time.Duration(int64(f.properties.SampleCount)/int64(f.SampleRate())) * time.Second
}
func (f flacParser) Encoder() string {
	return f.encoder
}
func (f flacParser) Format() string {
	return "FLAC"
}
func (f flacParser) Genre() string {
	return f.tags[tagGenre]
}
func (f flacParser) Publisher() string {
	return f.tags[tagPublisher]
}
func (f flacParser) SampleRate() int {
	return int(f.properties.SampleRate)
}