ID3, MP4 and OGG/FLAC metadata parsing in Go

audio-data, checksum, flac, go, id3, id3v1, id3v2, mp3, mp4, ogg, parsing
go get


MP3/MP4/OGG/FLAC metadata parsing library

Build Status GoDoc

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.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.


There are simple command-line tools which demonstrate basic tag extraction and summing:

$ go get
$ 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