ID3, MP4 and OGG/FLAC metadata parsing in Go
1e646522d6
TCON The 'Content type', which previously was stored as a one byte numeric value only, is now a numeric string. You may use one or several of the types as ID3v1.1 did or, since the category list would be impossible to maintain with accurate and up to date categories, define your own. References to the ID3v1 genres can be made by, as first byte, enter "(" followed by a number from the genres list (appendix A) and ended with a ")" character. This is optionally followed by a refinement, e.g. "(21)" or "(4)Eurodisco". Several references can be made in the same frame, e.g. "(51)(39)". If the refinement should begin with a "(" character it should be replaced with "((", e.g. "((I can figure out any genre)" or "(55)((I think...)". The following new content types is defined in ID3v2 and is implemented in the same way as the numerig content types, e.g. "(RX)". To test it, use the id3v2 tool % id3v2 -g 79 test.mp3 % id3v2 -l test.mp3| grep TCON TCON (Content type): Hard Rock (79) % ./tag test.mp3| grep Genre Genre: (79) With the patch : % go build && ./tag test.mp3| grep Genre Genre: Hard Rock |
||
---|---|---|
check | ||
mbz | ||
sum | ||
tag | ||
.editorconfig | ||
.travis.yml | ||
flac.go | ||
id3v1.go | ||
id3v2_test.go | ||
id3v2.go | ||
id3v2frames.go | ||
id3v2metadata_test.go | ||
id3v2metadata.go | ||
id.go | ||
LICENSE | ||
mp4.go | ||
ogg.go | ||
README.md | ||
sum.go | ||
tag.go | ||
util_test.go | ||
util.go | ||
vorbis.go |
MP3/MP4/OGG/FLAC metadata parsing library
This package provides MP3 (ID3v1,2.{2,3,4}) and MP4 (ACC, M4A, ALAC), OGG and FLAC metadata detection, parsing and artwork extraction.
Detect and parse tag metadata from an io.ReadSeeker
(i.e. an *os.File
):
m, err := tag.ReadFrom(f)
if err != nil {
log.Fatal(err)
}
log.Print(m.Format()) // The detected format.
log.Print(m.Title()) // The title of the track (see Metadata interface for more details).
Parsed metadata is exported via a single interface (giving a consistent API for all supported metadata formats).
// Metadata is an interface which is used to describe metadata retrieved by this package.
type Metadata interface {
Format() Format
FileType() FileType
Title() string
Album() string
Artist() string
AlbumArtist() string
Composer() string
Genre() string
Year() int
Track() (int, int) // Number, Total
Disc() (int, int) // Number, Total
Picture() *Picture // Artwork
Lyrics() string
Raw() map[string]interface{} // NB: raw tag names are not consistent across formats.
}
Audio Data Checksum (SHA1)
This package also provides a metadata-invariant checksum for audio files: only the audio data is used to construct the checksum.
http://godoc.org/github.com/dhowden/tag#Sum
Tools
There are simple command-line tools which demonstrate basic tag extraction and summing:
$ go get github.com/dhowden/tag/...
$ cd $GOPATH/bin
$ ./tag 11\ High\ Hopes.m4a
Metadata Format: MP4
Title: High Hopes
Album: The Division Bell
Artist: Pink Floyd
Composer: Abbey Road Recording Studios/David Gilmour/Polly Samson
Year: 1994
Track: 11 of 11
Disc: 1 of 1
Picture: Picture{Ext: jpeg, MIMEType: image/jpeg, Type: , Description: , Data.Size: 606109}
$ ./sum 11\ High\ Hopes.m4a
2ae208c5f00a1f21f5fac9b7f6e0b8e52c06da29