id3v2

package module
v0.0.0-...-c41dbf6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 17, 2019 License: BSD-3-Clause Imports: 11 Imported by: 0

README

id3v2

GoDoc Go Report Card

A Golang package for reading ID3v2 tags. It implements v2.4.0 and v2.3.0 of the specification.

Documentation

Overview

Package id3v2 implements support for reading ID3v2 tags.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Frame

type Frame struct {
	ID      FrameID
	Version Version
	Flags   FrameFlags
	Data    []byte
}

Frame is a single ID3v2 frame.

func (*Frame) String

func (f *Frame) String() string

func (*Frame) Text

func (f *Frame) Text() (string, error)

Text interprets the frame data as a text string, according to §4 of id3v2.4.0-structure.txt.

type FrameFlags

type FrameFlags uint16

FrameFlags are the frame-level ID3v2 flags.

const (
	FrameFlagV24TagAlterPreservation FrameFlags
	FrameFlagV24FileAlterPreservation
	FrameFlagV24ReadOnly

	FrameFlagV24GroupingIdentity

	FrameFlagV24Compression
	FrameFlagV24Encryption
	FrameFlagV24Unsynchronisation
	FrameFlagV24DataLengthIndicator
)

These are the frame-level flags from v2.4.0 of the specification.

const (
	FrameFlagV23TagAlterPreservation FrameFlags = 1 << (15 - iota)
	FrameFlagV23FileAlterPreservation
	FrameFlagV23ReadOnly

	FrameFlagV23Compression
	FrameFlagV23Encryption
	FrameFlagV23GroupingIdentity
)

These are the frame-level flags from v2.3.0 of the specification.

type FrameID

type FrameID uint32

FrameID is a four-byte frame identifier.

const (
	FrameAENC FrameID = 'A'<<24 | 'E'<<16 | 'N'<<8 | 'C' // Audio encryption
	FrameAPIC FrameID = 'A'<<24 | 'P'<<16 | 'I'<<8 | 'C' // Attached picture
	FrameASPI FrameID = 'A'<<24 | 'S'<<16 | 'P'<<8 | 'I' // Audio seek point index
	FrameCOMM FrameID = 'C'<<24 | 'O'<<16 | 'M'<<8 | 'M' // Comments
	FrameCOMR FrameID = 'C'<<24 | 'O'<<16 | 'M'<<8 | 'R' // Commercial frame
	FrameENCR FrameID = 'E'<<24 | 'N'<<16 | 'C'<<8 | 'R' // Encryption method registration
	FrameEQU2 FrameID = 'E'<<24 | 'Q'<<16 | 'U'<<8 | '2' // Equalisation (2)
	FrameETCO FrameID = 'E'<<24 | 'T'<<16 | 'C'<<8 | 'O' // Event timing codes
	FrameGEOB FrameID = 'G'<<24 | 'E'<<16 | 'O'<<8 | 'B' // General encapsulated object
	FrameGRID FrameID = 'G'<<24 | 'R'<<16 | 'I'<<8 | 'D' // Group identification registration
	FrameLINK FrameID = 'L'<<24 | 'I'<<16 | 'N'<<8 | 'K' // Linked information
	FrameMCDI FrameID = 'M'<<24 | 'C'<<16 | 'D'<<8 | 'I' // Music CD identifier
	FrameMLLT FrameID = 'M'<<24 | 'L'<<16 | 'L'<<8 | 'T' // MPEG location lookup table
	FrameOWNE FrameID = 'O'<<24 | 'W'<<16 | 'N'<<8 | 'E' // Ownership frame
	FramePRIV FrameID = 'P'<<24 | 'R'<<16 | 'I'<<8 | 'V' // Private frame
	FramePCNT FrameID = 'P'<<24 | 'C'<<16 | 'N'<<8 | 'T' // Play counter
	FramePOPM FrameID = 'P'<<24 | 'O'<<16 | 'P'<<8 | 'M' // Popularimeter
	FramePOSS FrameID = 'P'<<24 | 'O'<<16 | 'S'<<8 | 'S' // Position synchronisation frame
	FrameRBUF FrameID = 'R'<<24 | 'B'<<16 | 'U'<<8 | 'F' // Recommended buffer size
	FrameRVA2 FrameID = 'R'<<24 | 'V'<<16 | 'A'<<8 | '2' // Relative volume adjustment (2)
	FrameRVRB FrameID = 'R'<<24 | 'V'<<16 | 'R'<<8 | 'B' // Reverb
	FrameSEEK FrameID = 'S'<<24 | 'E'<<16 | 'E'<<8 | 'K' // Seek frame
	FrameSIGN FrameID = 'S'<<24 | 'I'<<16 | 'G'<<8 | 'N' // Signature frame
	FrameSYLT FrameID = 'S'<<24 | 'Y'<<16 | 'L'<<8 | 'T' // Synchronised lyric/text
	FrameSYTC FrameID = 'S'<<24 | 'Y'<<16 | 'T'<<8 | 'C' // Synchronised tempo codes
	FrameTALB FrameID = 'T'<<24 | 'A'<<16 | 'L'<<8 | 'B' // Album/Movie/Show title
	FrameTBPM FrameID = 'T'<<24 | 'B'<<16 | 'P'<<8 | 'M' // BPM (beats per minute)
	FrameTCOM FrameID = 'T'<<24 | 'C'<<16 | 'O'<<8 | 'M' // Composer
	FrameTCON FrameID = 'T'<<24 | 'C'<<16 | 'O'<<8 | 'N' // Content type
	FrameTCOP FrameID = 'T'<<24 | 'C'<<16 | 'O'<<8 | 'P' // Copyright message
	FrameTDEN FrameID = 'T'<<24 | 'D'<<16 | 'E'<<8 | 'N' // Encoding time
	FrameTDLY FrameID = 'T'<<24 | 'D'<<16 | 'L'<<8 | 'Y' // Playlist delay
	FrameTDOR FrameID = 'T'<<24 | 'D'<<16 | 'O'<<8 | 'R' // Original release time
	FrameTDRC FrameID = 'T'<<24 | 'D'<<16 | 'R'<<8 | 'C' // Recording time
	FrameTDRL FrameID = 'T'<<24 | 'D'<<16 | 'R'<<8 | 'L' // Release time
	FrameTDTG FrameID = 'T'<<24 | 'D'<<16 | 'T'<<8 | 'G' // Tagging time
	FrameTENC FrameID = 'T'<<24 | 'E'<<16 | 'N'<<8 | 'C' // Encoded by
	FrameTEXT FrameID = 'T'<<24 | 'E'<<16 | 'X'<<8 | 'T' // Lyricist/Text writer
	FrameTFLT FrameID = 'T'<<24 | 'F'<<16 | 'L'<<8 | 'T' // File type
	FrameTIPL FrameID = 'T'<<24 | 'I'<<16 | 'P'<<8 | 'L' // Involved people list
	FrameTIT1 FrameID = 'T'<<24 | 'I'<<16 | 'T'<<8 | '1' // Content group description
	FrameTIT2 FrameID = 'T'<<24 | 'I'<<16 | 'T'<<8 | '2' // Title/songname/content description
	FrameTIT3 FrameID = 'T'<<24 | 'I'<<16 | 'T'<<8 | '3' // Subtitle/Description refinement
	FrameTKEY FrameID = 'T'<<24 | 'K'<<16 | 'E'<<8 | 'Y' // Initial key
	FrameTLAN FrameID = 'T'<<24 | 'L'<<16 | 'A'<<8 | 'N' // Language(s)
	FrameTLEN FrameID = 'T'<<24 | 'L'<<16 | 'E'<<8 | 'N' // Length
	FrameTMCL FrameID = 'T'<<24 | 'M'<<16 | 'C'<<8 | 'L' // Musician credits list
	FrameTMED FrameID = 'T'<<24 | 'M'<<16 | 'E'<<8 | 'D' // Media type
	FrameTMOO FrameID = 'T'<<24 | 'M'<<16 | 'O'<<8 | 'O' // Mood
	FrameTOAL FrameID = 'T'<<24 | 'O'<<16 | 'A'<<8 | 'L' // Original album/movie/show title
	FrameTOFN FrameID = 'T'<<24 | 'O'<<16 | 'F'<<8 | 'N' // Original filename
	FrameTOLY FrameID = 'T'<<24 | 'O'<<16 | 'L'<<8 | 'Y' // Original lyricist(s)/text writer(s)
	FrameTOPE FrameID = 'T'<<24 | 'O'<<16 | 'P'<<8 | 'E' // Original artist(s)/performer(s)
	FrameTOWN FrameID = 'T'<<24 | 'O'<<16 | 'W'<<8 | 'N' // File owner/licensee
	FrameTPE1 FrameID = 'T'<<24 | 'P'<<16 | 'E'<<8 | '1' // Lead performer(s)/Soloist(s)
	FrameTPE2 FrameID = 'T'<<24 | 'P'<<16 | 'E'<<8 | '2' // Band/orchestra/accompaniment
	FrameTPE3 FrameID = 'T'<<24 | 'P'<<16 | 'E'<<8 | '3' // Conductor/performer refinement
	FrameTPE4 FrameID = 'T'<<24 | 'P'<<16 | 'E'<<8 | '4' // Interpreted, remixed, or otherwise modified by
	FrameTPOS FrameID = 'T'<<24 | 'P'<<16 | 'O'<<8 | 'S' // Part of a set
	FrameTPRO FrameID = 'T'<<24 | 'P'<<16 | 'R'<<8 | 'O' // Produced notice
	FrameTPUB FrameID = 'T'<<24 | 'P'<<16 | 'U'<<8 | 'B' // Publisher
	FrameTRCK FrameID = 'T'<<24 | 'R'<<16 | 'C'<<8 | 'K' // Track number/Position in set
	FrameTRSN FrameID = 'T'<<24 | 'R'<<16 | 'S'<<8 | 'N' // Internet radio station name
	FrameTRSO FrameID = 'T'<<24 | 'R'<<16 | 'S'<<8 | 'O' // Internet radio station owner
	FrameTSOA FrameID = 'T'<<24 | 'S'<<16 | 'O'<<8 | 'A' // Album sort order
	FrameTSOP FrameID = 'T'<<24 | 'S'<<16 | 'O'<<8 | 'P' // Performer sort order
	FrameTSOT FrameID = 'T'<<24 | 'S'<<16 | 'O'<<8 | 'T' // Title sort order
	FrameTSRC FrameID = 'T'<<24 | 'S'<<16 | 'R'<<8 | 'C' // ISRC (international standard recording code)
	FrameTSSE FrameID = 'T'<<24 | 'S'<<16 | 'S'<<8 | 'E' // Software/Hardware and settings used for encoding
	FrameTSST FrameID = 'T'<<24 | 'S'<<16 | 'S'<<8 | 'T' // Set subtitle
	FrameTXXX FrameID = 'T'<<24 | 'X'<<16 | 'X'<<8 | 'X' // User defined text information frame
	FrameUFID FrameID = 'U'<<24 | 'F'<<16 | 'I'<<8 | 'D' // Unique file identifier
	FrameUSER FrameID = 'U'<<24 | 'S'<<16 | 'E'<<8 | 'R' // Terms of use
	FrameUSLT FrameID = 'U'<<24 | 'S'<<16 | 'L'<<8 | 'T' // Unsynchronised lyric/text transcription
	FrameWCOM FrameID = 'W'<<24 | 'C'<<16 | 'O'<<8 | 'M' // Commercial information
	FrameWCOP FrameID = 'W'<<24 | 'C'<<16 | 'O'<<8 | 'P' // Copyright/Legal information
	FrameWOAF FrameID = 'W'<<24 | 'O'<<16 | 'A'<<8 | 'F' // Official audio file webpage
	FrameWOAR FrameID = 'W'<<24 | 'O'<<16 | 'A'<<8 | 'R' // Official artist/performer webpage
	FrameWOAS FrameID = 'W'<<24 | 'O'<<16 | 'A'<<8 | 'S' // Official audio source webpage
	FrameWORS FrameID = 'W'<<24 | 'O'<<16 | 'R'<<8 | 'S' // Official Internet radio station homepage
	FrameWPAY FrameID = 'W'<<24 | 'P'<<16 | 'A'<<8 | 'Y' // Payment
	FrameWPUB FrameID = 'W'<<24 | 'P'<<16 | 'U'<<8 | 'B' // Publishers official webpage
	FrameWXXX FrameID = 'W'<<24 | 'X'<<16 | 'X'<<8 | 'X' // User defined URL link frame
	FrameEQUA FrameID = 'E'<<24 | 'Q'<<16 | 'U'<<8 | 'A' // Equalization
	FrameIPLS FrameID = 'I'<<24 | 'P'<<16 | 'L'<<8 | 'S' // Involved people list
	FrameRVAD FrameID = 'R'<<24 | 'V'<<16 | 'A'<<8 | 'D' // Relative volume adjustment
	FrameTDAT FrameID = 'T'<<24 | 'D'<<16 | 'A'<<8 | 'T' // Date
	FrameTIME FrameID = 'T'<<24 | 'I'<<16 | 'M'<<8 | 'E' // Time
	FrameTORY FrameID = 'T'<<24 | 'O'<<16 | 'R'<<8 | 'Y' // Original release year
	FrameTRDA FrameID = 'T'<<24 | 'R'<<16 | 'D'<<8 | 'A' // Recording dates
	FrameTSIZ FrameID = 'T'<<24 | 'S'<<16 | 'I'<<8 | 'Z' // Size
	FrameTYER FrameID = 'T'<<24 | 'Y'<<16 | 'E'<<8 | 'R' // Year
)

These are the standard frame ids as specified in the v2.4.0 and v2.3.0 specifications.

func (FrameID) String

func (id FrameID) String() string

type Frames

type Frames []*Frame

Frames is a slice of ID3v2 frames.

func Scan

func Scan(r io.Reader) (Frames, error)

Scan reads all valid ID3v2 tags from the reader and returns all the frames in order. It returns an error if the tags are invalid.

func ScanFile

func ScanFile(path string) (Frames, error)

ScanFile reads all valid ID3v2 tags from a file and returns all the frames in order. It returns an error if the tags are invalid, or the file cannot be opened.

func (Frames) Lookup

func (f Frames) Lookup(id FrameID) *Frame

Lookup returns the last frame with the given frame id, or nil.

type Version

type Version byte

Version is the version of the ID3v2 tag block.

const (
	// Version24 is v2.4.x of the ID3v2 specification.
	Version24 Version = 0x04
	// Version23 is v2.3.x of the ID3v2 specification.
	Version23 Version = 0x03
)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL