From 56c335377584f4230ac4f4cf372b2b010459096e Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Sat, 4 Jan 2014 13:48:26 -0500 Subject: [PATCH] Rename constructors to Go conventions --- frame.go | 10 ++-- id3.go | 2 +- id3v2.go | 12 ++--- id3v22.go | 128 +++++++++++++++++++++++----------------------- id3v23.go | 150 +++++++++++++++++++++++++++--------------------------- 5 files changed, 151 insertions(+), 151 deletions(-) diff --git a/frame.go b/frame.go index ae27e2c..38855ca 100644 --- a/frame.go +++ b/frame.go @@ -81,7 +81,7 @@ type DataFrame struct { data []byte } -func NewDataFrame(head FrameHead, data []byte) Framer { +func ParseDataFrame(head FrameHead, data []byte) Framer { return &DataFrame{head, data} } @@ -119,7 +119,7 @@ type TextFrame struct { text string } -func NewTextFrame(head FrameHead, data []byte) Framer { +func ParseTextFrame(head FrameHead, data []byte) Framer { var err error f := &TextFrame{FrameHead: head} rd := newReader(data) @@ -191,7 +191,7 @@ type DescTextFrame struct { } // DescTextFrame represents frames that contain encoded text and descriptions -func NewDescTextFrame(head FrameHead, data []byte) Framer { +func ParseDescTextFrame(head FrameHead, data []byte) Framer { var err error f := &DescTextFrame{FrameHead: head} rd := newReader(data) @@ -257,7 +257,7 @@ type UnsynchTextFrame struct { language string } -func NewUnsynchTextFrame(head FrameHead, data []byte) Framer { +func ParseUnsynchTextFrame(head FrameHead, data []byte) Framer { var err error f := &UnsynchTextFrame{FrameHead: head} rd := newReader(data) @@ -332,7 +332,7 @@ type ImageFrame struct { description string } -func NewImageFrame(head FrameHead, data []byte) Framer { +func ParseImageFrame(head FrameHead, data []byte) Framer { var err error f := &ImageFrame{FrameHead: head} rd := newReader(data) diff --git a/id3.go b/id3.go index 185c691..7f17779 100644 --- a/id3.go +++ b/id3.go @@ -50,7 +50,7 @@ func Open(name string) (*File, error) { } rd := bufio.NewReader(fi) - tag := NewTag(rd) + tag := ParseTag(rd) data, err := ioutil.ReadAll(rd) if err != nil { return nil, err diff --git a/id3v2.go b/id3v2.go index 67668a0..1d09994 100644 --- a/id3v2.go +++ b/id3v2.go @@ -24,9 +24,9 @@ type Tag struct { } // Creates a new tag -func NewTag(reader io.Reader) *Tag { +func ParseTag(reader io.Reader) *Tag { t := &Tag{ - Header: NewHeader(reader), + Header: ParseHeader(reader), frames: make(map[string][]Framer), } @@ -37,17 +37,17 @@ func NewTag(reader io.Reader) *Tag { switch t.Header.Version() { case "2.2.0": t.commonMap = V22CommonFrame - t.frameConstructor = NewV22Frame + t.frameConstructor = ParseV22Frame t.frameHeaderSize = V22FrameHeaderSize t.frameBytesConstructor = V22Bytes case "2.3.0": t.commonMap = V23CommonFrame - t.frameConstructor = NewV23Frame + t.frameConstructor = ParseV23Frame t.frameHeaderSize = FrameHeaderSize t.frameBytesConstructor = V23Bytes default: t.commonMap = V23CommonFrame - t.frameConstructor = NewV23Frame + t.frameConstructor = ParseV23Frame t.frameHeaderSize = FrameHeaderSize t.frameBytesConstructor = V23Bytes } @@ -267,7 +267,7 @@ func (t *Tag) setTextFrameText(id, text string) { } } -func NewHeader(reader io.Reader) Header { +func ParseHeader(reader io.Reader) Header { data := make([]byte, HeaderSize) n, err := io.ReadFull(reader, data) if n < HeaderSize || err != nil || string(data[:3]) != "ID3" { diff --git a/id3v22.go b/id3v22.go index 63e6cf6..c43881f 100644 --- a/id3v22.go +++ b/id3v22.go @@ -24,73 +24,73 @@ var ( // V22FrameTypeMap specifies the frame IDs and constructors allowed in ID3v2.2 V22FrameTypeMap = map[string]FrameType{ - "BUF": FrameType{id: "BUF", description: "Recommended buffer size", constructor: NewDataFrame}, - "CNT": FrameType{id: "CNT", description: "Play counter", constructor: NewDataFrame}, - "COM": FrameType{id: "COM", description: "Comments", constructor: NewUnsynchTextFrame}, - "CRA": FrameType{id: "CRA", description: "Audio encryption", constructor: NewDataFrame}, - "CRM": FrameType{id: "CRM", description: "Encrypted meta frame", constructor: NewDataFrame}, - "ETC": FrameType{id: "ETC", description: "Event timing codes", constructor: NewDataFrame}, - "EQU": FrameType{id: "EQU", description: "Equalization", constructor: NewDataFrame}, - "GEO": FrameType{id: "GEO", description: "General encapsulated object", constructor: NewDataFrame}, - "IPL": FrameType{id: "IPL", description: "Involved people list", constructor: NewDataFrame}, - "LNK": FrameType{id: "LNK", description: "Linked information", constructor: NewDataFrame}, - "MCI": FrameType{id: "MCI", description: "Music CD Identifier", constructor: NewDataFrame}, - "MLL": FrameType{id: "MLL", description: "MPEG location lookup table", constructor: NewDataFrame}, - "PIC": FrameType{id: "PIC", description: "Attached picture", constructor: NewDataFrame}, - "POP": FrameType{id: "POP", description: "Popularimeter", constructor: NewDataFrame}, - "REV": FrameType{id: "REV", description: "Reverb", constructor: NewDataFrame}, - "RVA": FrameType{id: "RVA", description: "Relative volume adjustment", constructor: NewDataFrame}, - "SLT": FrameType{id: "SLT", description: "Synchronized lyric/text", constructor: NewDataFrame}, - "STC": FrameType{id: "STC", description: "Synced tempo codes", constructor: NewDataFrame}, - "TAL": FrameType{id: "TAL", description: "Album/Movie/Show title", constructor: NewTextFrame}, - "TBP": FrameType{id: "TBP", description: "BPM (Beats Per Minute)", constructor: NewTextFrame}, - "TCM": FrameType{id: "TCM", description: "Composer", constructor: NewTextFrame}, - "TCO": FrameType{id: "TCO", description: "Content type", constructor: NewTextFrame}, - "TCR": FrameType{id: "TCR", description: "Copyright message", constructor: NewTextFrame}, - "TDA": FrameType{id: "TDA", description: "Date", constructor: NewTextFrame}, - "TDY": FrameType{id: "TDY", description: "Playlist delay", constructor: NewTextFrame}, - "TEN": FrameType{id: "TEN", description: "Encoded by", constructor: NewTextFrame}, - "TFT": FrameType{id: "TFT", description: "File type", constructor: NewTextFrame}, - "TIM": FrameType{id: "TIM", description: "Time", constructor: NewTextFrame}, - "TKE": FrameType{id: "TKE", description: "Initial key", constructor: NewTextFrame}, - "TLA": FrameType{id: "TLA", description: "Language(s)", constructor: NewTextFrame}, - "TLE": FrameType{id: "TLE", description: "Length", constructor: NewTextFrame}, - "TMT": FrameType{id: "TMT", description: "Media type", constructor: NewTextFrame}, - "TOA": FrameType{id: "TOA", description: "Original artist(s)/performer(s)", constructor: NewTextFrame}, - "TOF": FrameType{id: "TOF", description: "Original filename", constructor: NewTextFrame}, - "TOL": FrameType{id: "TOL", description: "Original Lyricist(s)/text writer(s)", constructor: NewTextFrame}, - "TOR": FrameType{id: "TOR", description: "Original release year", constructor: NewTextFrame}, - "TOT": FrameType{id: "TOT", description: "Original album/Movie/Show title", constructor: NewTextFrame}, - "TP1": FrameType{id: "TP1", description: "Lead artist(s)/Lead performer(s)/Soloist(s)/Performing group", constructor: NewTextFrame}, - "TP2": FrameType{id: "TP2", description: "Band/Orchestra/Accompaniment", constructor: NewTextFrame}, - "TP3": FrameType{id: "TP3", description: "Conductor/Performer refinement", constructor: NewTextFrame}, - "TP4": FrameType{id: "TP4", description: "Interpreted, remixed, or otherwise modified by", constructor: NewTextFrame}, - "TPA": FrameType{id: "TPA", description: "Part of a set", constructor: NewTextFrame}, - "TPB": FrameType{id: "TPB", description: "Publisher", constructor: NewTextFrame}, - "TRC": FrameType{id: "TRC", description: "ISRC (International Standard Recording Code)", constructor: NewTextFrame}, - "TRD": FrameType{id: "TRD", description: "Recording dates", constructor: NewTextFrame}, - "TRK": FrameType{id: "TRK", description: "Track number/Position in set", constructor: NewTextFrame}, - "TSI": FrameType{id: "TSI", description: "Size", constructor: NewTextFrame}, - "TSS": FrameType{id: "TSS", description: "Software/hardware and settings used for encoding", constructor: NewTextFrame}, - "TT1": FrameType{id: "TT1", description: "Content group description", constructor: NewTextFrame}, - "TT2": FrameType{id: "TT2", description: "Title/Songname/Content description", constructor: NewTextFrame}, - "TT3": FrameType{id: "TT3", description: "Subtitle/Description refinement", constructor: NewTextFrame}, - "TXT": FrameType{id: "TXT", description: "Lyricist/text writer", constructor: NewTextFrame}, - "TXX": FrameType{id: "TXX", description: "User defined text information frame", constructor: NewDescTextFrame}, - "TYE": FrameType{id: "TYE", description: "Year", constructor: NewTextFrame}, - "UFI": FrameType{id: "UFI", description: "Unique file identifier", constructor: NewDataFrame}, - "ULT": FrameType{id: "ULT", description: "Unsychronized lyric/text transcription", constructor: NewDataFrame}, - "WAF": FrameType{id: "WAF", description: "Official audio file webpage", constructor: NewDataFrame}, - "WAR": FrameType{id: "WAR", description: "Official artist/performer webpage", constructor: NewDataFrame}, - "WAS": FrameType{id: "WAS", description: "Official audio source webpage", constructor: NewDataFrame}, - "WCM": FrameType{id: "WCM", description: "Commercial information", constructor: NewDataFrame}, - "WCP": FrameType{id: "WCP", description: "Copyright/Legal information", constructor: NewDataFrame}, - "WPB": FrameType{id: "WPB", description: "Publishers official webpage", constructor: NewDataFrame}, - "WXX": FrameType{id: "WXX", description: "User defined URL link frame", constructor: NewDataFrame}, + "BUF": FrameType{id: "BUF", description: "Recommended buffer size", constructor: ParseDataFrame}, + "CNT": FrameType{id: "CNT", description: "Play counter", constructor: ParseDataFrame}, + "COM": FrameType{id: "COM", description: "Comments", constructor: ParseUnsynchTextFrame}, + "CRA": FrameType{id: "CRA", description: "Audio encryption", constructor: ParseDataFrame}, + "CRM": FrameType{id: "CRM", description: "Encrypted meta frame", constructor: ParseDataFrame}, + "ETC": FrameType{id: "ETC", description: "Event timing codes", constructor: ParseDataFrame}, + "EQU": FrameType{id: "EQU", description: "Equalization", constructor: ParseDataFrame}, + "GEO": FrameType{id: "GEO", description: "General encapsulated object", constructor: ParseDataFrame}, + "IPL": FrameType{id: "IPL", description: "Involved people list", constructor: ParseDataFrame}, + "LNK": FrameType{id: "LNK", description: "Linked information", constructor: ParseDataFrame}, + "MCI": FrameType{id: "MCI", description: "Music CD Identifier", constructor: ParseDataFrame}, + "MLL": FrameType{id: "MLL", description: "MPEG location lookup table", constructor: ParseDataFrame}, + "PIC": FrameType{id: "PIC", description: "Attached picture", constructor: ParseDataFrame}, + "POP": FrameType{id: "POP", description: "Popularimeter", constructor: ParseDataFrame}, + "REV": FrameType{id: "REV", description: "Reverb", constructor: ParseDataFrame}, + "RVA": FrameType{id: "RVA", description: "Relative volume adjustment", constructor: ParseDataFrame}, + "SLT": FrameType{id: "SLT", description: "Synchronized lyric/text", constructor: ParseDataFrame}, + "STC": FrameType{id: "STC", description: "Synced tempo codes", constructor: ParseDataFrame}, + "TAL": FrameType{id: "TAL", description: "Album/Movie/Show title", constructor: ParseTextFrame}, + "TBP": FrameType{id: "TBP", description: "BPM (Beats Per Minute)", constructor: ParseTextFrame}, + "TCM": FrameType{id: "TCM", description: "Composer", constructor: ParseTextFrame}, + "TCO": FrameType{id: "TCO", description: "Content type", constructor: ParseTextFrame}, + "TCR": FrameType{id: "TCR", description: "Copyright message", constructor: ParseTextFrame}, + "TDA": FrameType{id: "TDA", description: "Date", constructor: ParseTextFrame}, + "TDY": FrameType{id: "TDY", description: "Playlist delay", constructor: ParseTextFrame}, + "TEN": FrameType{id: "TEN", description: "Encoded by", constructor: ParseTextFrame}, + "TFT": FrameType{id: "TFT", description: "File type", constructor: ParseTextFrame}, + "TIM": FrameType{id: "TIM", description: "Time", constructor: ParseTextFrame}, + "TKE": FrameType{id: "TKE", description: "Initial key", constructor: ParseTextFrame}, + "TLA": FrameType{id: "TLA", description: "Language(s)", constructor: ParseTextFrame}, + "TLE": FrameType{id: "TLE", description: "Length", constructor: ParseTextFrame}, + "TMT": FrameType{id: "TMT", description: "Media type", constructor: ParseTextFrame}, + "TOA": FrameType{id: "TOA", description: "Original artist(s)/performer(s)", constructor: ParseTextFrame}, + "TOF": FrameType{id: "TOF", description: "Original filename", constructor: ParseTextFrame}, + "TOL": FrameType{id: "TOL", description: "Original Lyricist(s)/text writer(s)", constructor: ParseTextFrame}, + "TOR": FrameType{id: "TOR", description: "Original release year", constructor: ParseTextFrame}, + "TOT": FrameType{id: "TOT", description: "Original album/Movie/Show title", constructor: ParseTextFrame}, + "TP1": FrameType{id: "TP1", description: "Lead artist(s)/Lead performer(s)/Soloist(s)/Performing group", constructor: ParseTextFrame}, + "TP2": FrameType{id: "TP2", description: "Band/Orchestra/Accompaniment", constructor: ParseTextFrame}, + "TP3": FrameType{id: "TP3", description: "Conductor/Performer refinement", constructor: ParseTextFrame}, + "TP4": FrameType{id: "TP4", description: "Interpreted, remixed, or otherwise modified by", constructor: ParseTextFrame}, + "TPA": FrameType{id: "TPA", description: "Part of a set", constructor: ParseTextFrame}, + "TPB": FrameType{id: "TPB", description: "Publisher", constructor: ParseTextFrame}, + "TRC": FrameType{id: "TRC", description: "ISRC (International Standard Recording Code)", constructor: ParseTextFrame}, + "TRD": FrameType{id: "TRD", description: "Recording dates", constructor: ParseTextFrame}, + "TRK": FrameType{id: "TRK", description: "Track number/Position in set", constructor: ParseTextFrame}, + "TSI": FrameType{id: "TSI", description: "Size", constructor: ParseTextFrame}, + "TSS": FrameType{id: "TSS", description: "Software/hardware and settings used for encoding", constructor: ParseTextFrame}, + "TT1": FrameType{id: "TT1", description: "Content group description", constructor: ParseTextFrame}, + "TT2": FrameType{id: "TT2", description: "Title/Songname/Content description", constructor: ParseTextFrame}, + "TT3": FrameType{id: "TT3", description: "Subtitle/Description refinement", constructor: ParseTextFrame}, + "TXT": FrameType{id: "TXT", description: "Lyricist/text writer", constructor: ParseTextFrame}, + "TXX": FrameType{id: "TXX", description: "User defined text information frame", constructor: ParseDescTextFrame}, + "TYE": FrameType{id: "TYE", description: "Year", constructor: ParseTextFrame}, + "UFI": FrameType{id: "UFI", description: "Unique file identifier", constructor: ParseDataFrame}, + "ULT": FrameType{id: "ULT", description: "Unsychronized lyric/text transcription", constructor: ParseDataFrame}, + "WAF": FrameType{id: "WAF", description: "Official audio file webpage", constructor: ParseDataFrame}, + "WAR": FrameType{id: "WAR", description: "Official artist/performer webpage", constructor: ParseDataFrame}, + "WAS": FrameType{id: "WAS", description: "Official audio source webpage", constructor: ParseDataFrame}, + "WCM": FrameType{id: "WCM", description: "Commercial information", constructor: ParseDataFrame}, + "WCP": FrameType{id: "WCP", description: "Copyright/Legal information", constructor: ParseDataFrame}, + "WPB": FrameType{id: "WPB", description: "Publishers official webpage", constructor: ParseDataFrame}, + "WXX": FrameType{id: "WXX", description: "User defined URL link frame", constructor: ParseDataFrame}, } ) -func NewV22Frame(reader io.Reader) Framer { +func ParseV22Frame(reader io.Reader) Framer { data := make([]byte, V22FrameHeaderSize) if n, err := io.ReadFull(reader, data); n < V22FrameHeaderSize || err != nil { return nil diff --git a/id3v23.go b/id3v23.go index 855a2c7..73493ba 100644 --- a/id3v23.go +++ b/id3v23.go @@ -39,84 +39,84 @@ var ( // V23FrameTypeMap specifies the frame IDs and constructors allowed in ID3v2.3 V23FrameTypeMap = map[string]FrameType{ - "AENC": FrameType{id: "AENC", description: "Audio encryption", constructor: NewDataFrame}, - "APIC": FrameType{id: "APIC", description: "Attached picture", constructor: NewImageFrame}, - "COMM": FrameType{id: "COMM", description: "Comments", constructor: NewUnsynchTextFrame}, - "COMR": FrameType{id: "COMR", description: "Commercial frame", constructor: NewDataFrame}, - "ENCR": FrameType{id: "ENCR", description: "Encryption method registration", constructor: NewDataFrame}, - "EQUA": FrameType{id: "EQUA", description: "Equalization", constructor: NewDataFrame}, - "ETCO": FrameType{id: "ETCO", description: "Event timing codes", constructor: NewDataFrame}, - "GEOB": FrameType{id: "GEOB", description: "General encapsulated object", constructor: NewDataFrame}, - "GRID": FrameType{id: "GRID", description: "Group identification registration", constructor: NewDataFrame}, - "IPLS": FrameType{id: "IPLS", description: "Involved people list", constructor: NewDataFrame}, - "LINK": FrameType{id: "LINK", description: "Linked information", constructor: NewDataFrame}, - "MCDI": FrameType{id: "MCDI", description: "Music CD identifier", constructor: NewDataFrame}, - "MLLT": FrameType{id: "MLLT", description: "MPEG location lookup table", constructor: NewDataFrame}, - "OWNE": FrameType{id: "OWNE", description: "Ownership frame", constructor: NewDataFrame}, - "PRIV": FrameType{id: "PRIV", description: "Private frame", constructor: NewDataFrame}, - "PCNT": FrameType{id: "PCNT", description: "Play counter", constructor: NewDataFrame}, - "POPM": FrameType{id: "POPM", description: "Popularimeter", constructor: NewDataFrame}, - "POSS": FrameType{id: "POSS", description: "Position synchronisation frame", constructor: NewDataFrame}, - "RBUF": FrameType{id: "RBUF", description: "Recommended buffer size", constructor: NewDataFrame}, - "RVAD": FrameType{id: "RVAD", description: "Relative volume adjustment", constructor: NewDataFrame}, - "RVRB": FrameType{id: "RVRB", description: "Reverb", constructor: NewDataFrame}, - "SYLT": FrameType{id: "SYLT", description: "Synchronized lyric/text", constructor: NewDataFrame}, - "SYTC": FrameType{id: "SYTC", description: "Synchronized tempo codes", constructor: NewDataFrame}, - "TALB": FrameType{id: "TALB", description: "Album/Movie/Show title", constructor: NewTextFrame}, - "TBPM": FrameType{id: "TBPM", description: "BPM (beats per minute)", constructor: NewTextFrame}, - "TCOM": FrameType{id: "TCOM", description: "Composer", constructor: NewTextFrame}, - "TCON": FrameType{id: "TCON", description: "Content type", constructor: NewTextFrame}, - "TCOP": FrameType{id: "TCOP", description: "Copyright message", constructor: NewTextFrame}, - "TDAT": FrameType{id: "TDAT", description: "Date", constructor: NewTextFrame}, - "TDLY": FrameType{id: "TDLY", description: "Playlist delay", constructor: NewTextFrame}, - "TENC": FrameType{id: "TENC", description: "Encoded by", constructor: NewTextFrame}, - "TEXT": FrameType{id: "TEXT", description: "Lyricist/Text writer", constructor: NewTextFrame}, - "TFLT": FrameType{id: "TFLT", description: "File type", constructor: NewTextFrame}, - "TIME": FrameType{id: "TIME", description: "Time", constructor: NewTextFrame}, - "TIT1": FrameType{id: "TIT1", description: "Content group description", constructor: NewTextFrame}, - "TIT2": FrameType{id: "TIT2", description: "Title/songname/content description", constructor: NewTextFrame}, - "TIT3": FrameType{id: "TIT3", description: "Subtitle/Description refinement", constructor: NewTextFrame}, - "TKEY": FrameType{id: "TKEY", description: "Initial key", constructor: NewTextFrame}, - "TLAN": FrameType{id: "TLAN", description: "Language(s)", constructor: NewTextFrame}, - "TLEN": FrameType{id: "TLEN", description: "Length", constructor: NewTextFrame}, - "TMED": FrameType{id: "TMED", description: "Media type", constructor: NewTextFrame}, - "TOAL": FrameType{id: "TOAL", description: "Original album/movie/show title", constructor: NewTextFrame}, - "TOFN": FrameType{id: "TOFN", description: "Original filename", constructor: NewTextFrame}, - "TOLY": FrameType{id: "TOLY", description: "Original lyricist(s)/text writer(s)", constructor: NewTextFrame}, - "TOPE": FrameType{id: "TOPE", description: "Original artist(s)/performer(s)", constructor: NewTextFrame}, - "TORY": FrameType{id: "TORY", description: "Original release year", constructor: NewTextFrame}, - "TOWN": FrameType{id: "TOWN", description: "File owner/licensee", constructor: NewTextFrame}, - "TPE1": FrameType{id: "TPE1", description: "Lead performer(s)/Soloist(s)", constructor: NewTextFrame}, - "TPE2": FrameType{id: "TPE2", description: "Band/orchestra/accompaniment", constructor: NewTextFrame}, - "TPE3": FrameType{id: "TPE3", description: "Conductor/performer refinement", constructor: NewTextFrame}, - "TPE4": FrameType{id: "TPE4", description: "Interpreted, remixed, or otherwise modified by", constructor: NewTextFrame}, - "TPOS": FrameType{id: "TPOS", description: "Part of a set", constructor: NewTextFrame}, - "TPUB": FrameType{id: "TPUB", description: "Publisher", constructor: NewTextFrame}, - "TRCK": FrameType{id: "TRCK", description: "Track number/Position in set", constructor: NewTextFrame}, - "TRDA": FrameType{id: "TRDA", description: "Recording dates", constructor: NewTextFrame}, - "TRSN": FrameType{id: "TRSN", description: "Internet radio station name", constructor: NewTextFrame}, - "TRSO": FrameType{id: "TRSO", description: "Internet radio station owner", constructor: NewTextFrame}, - "TSIZ": FrameType{id: "TSIZ", description: "Size", constructor: NewTextFrame}, - "TSRC": FrameType{id: "TSRC", description: "ISRC (international standard recording code)", constructor: NewTextFrame}, - "TSSE": FrameType{id: "TSSE", description: "Software/Hardware and settings used for encoding", constructor: NewTextFrame}, - "TYER": FrameType{id: "TYER", description: "Year", constructor: NewTextFrame}, - "TXXX": FrameType{id: "TXXX", description: "User defined text information frame", constructor: NewDescTextFrame}, - "UFID": FrameType{id: "UFID", description: "Unique file identifier", constructor: NewDataFrame}, - "USER": FrameType{id: "USER", description: "Terms of use", constructor: NewDataFrame}, - "USLT": FrameType{id: "USLT", description: "Unsychronized lyric/text transcription", constructor: NewUnsynchTextFrame}, - "WCOM": FrameType{id: "WCOM", description: "Commercial information", constructor: NewDataFrame}, - "WCOP": FrameType{id: "WCOP", description: "Copyright/Legal information", constructor: NewDataFrame}, - "WOAF": FrameType{id: "WOAF", description: "Official audio file webpage", constructor: NewDataFrame}, - "WOAR": FrameType{id: "WOAR", description: "Official artist/performer webpage", constructor: NewDataFrame}, - "WOAS": FrameType{id: "WOAS", description: "Official audio source webpage", constructor: NewDataFrame}, - "WORS": FrameType{id: "WORS", description: "Official internet radio station homepage", constructor: NewDataFrame}, - "WPAY": FrameType{id: "WPAY", description: "Payment", constructor: NewDataFrame}, - "WPUB": FrameType{id: "WPUB", description: "Publishers official webpage", constructor: NewDataFrame}, - "WXXX": FrameType{id: "WXXX", description: "User defined URL link frame", constructor: NewDataFrame}, + "AENC": FrameType{id: "AENC", description: "Audio encryption", constructor: ParseDataFrame}, + "APIC": FrameType{id: "APIC", description: "Attached picture", constructor: ParseImageFrame}, + "COMM": FrameType{id: "COMM", description: "Comments", constructor: ParseUnsynchTextFrame}, + "COMR": FrameType{id: "COMR", description: "Commercial frame", constructor: ParseDataFrame}, + "ENCR": FrameType{id: "ENCR", description: "Encryption method registration", constructor: ParseDataFrame}, + "EQUA": FrameType{id: "EQUA", description: "Equalization", constructor: ParseDataFrame}, + "ETCO": FrameType{id: "ETCO", description: "Event timing codes", constructor: ParseDataFrame}, + "GEOB": FrameType{id: "GEOB", description: "General encapsulated object", constructor: ParseDataFrame}, + "GRID": FrameType{id: "GRID", description: "Group identification registration", constructor: ParseDataFrame}, + "IPLS": FrameType{id: "IPLS", description: "Involved people list", constructor: ParseDataFrame}, + "LINK": FrameType{id: "LINK", description: "Linked information", constructor: ParseDataFrame}, + "MCDI": FrameType{id: "MCDI", description: "Music CD identifier", constructor: ParseDataFrame}, + "MLLT": FrameType{id: "MLLT", description: "MPEG location lookup table", constructor: ParseDataFrame}, + "OWNE": FrameType{id: "OWNE", description: "Ownership frame", constructor: ParseDataFrame}, + "PRIV": FrameType{id: "PRIV", description: "Private frame", constructor: ParseDataFrame}, + "PCNT": FrameType{id: "PCNT", description: "Play counter", constructor: ParseDataFrame}, + "POPM": FrameType{id: "POPM", description: "Popularimeter", constructor: ParseDataFrame}, + "POSS": FrameType{id: "POSS", description: "Position synchronisation frame", constructor: ParseDataFrame}, + "RBUF": FrameType{id: "RBUF", description: "Recommended buffer size", constructor: ParseDataFrame}, + "RVAD": FrameType{id: "RVAD", description: "Relative volume adjustment", constructor: ParseDataFrame}, + "RVRB": FrameType{id: "RVRB", description: "Reverb", constructor: ParseDataFrame}, + "SYLT": FrameType{id: "SYLT", description: "Synchronized lyric/text", constructor: ParseDataFrame}, + "SYTC": FrameType{id: "SYTC", description: "Synchronized tempo codes", constructor: ParseDataFrame}, + "TALB": FrameType{id: "TALB", description: "Album/Movie/Show title", constructor: ParseTextFrame}, + "TBPM": FrameType{id: "TBPM", description: "BPM (beats per minute)", constructor: ParseTextFrame}, + "TCOM": FrameType{id: "TCOM", description: "Composer", constructor: ParseTextFrame}, + "TCON": FrameType{id: "TCON", description: "Content type", constructor: ParseTextFrame}, + "TCOP": FrameType{id: "TCOP", description: "Copyright message", constructor: ParseTextFrame}, + "TDAT": FrameType{id: "TDAT", description: "Date", constructor: ParseTextFrame}, + "TDLY": FrameType{id: "TDLY", description: "Playlist delay", constructor: ParseTextFrame}, + "TENC": FrameType{id: "TENC", description: "Encoded by", constructor: ParseTextFrame}, + "TEXT": FrameType{id: "TEXT", description: "Lyricist/Text writer", constructor: ParseTextFrame}, + "TFLT": FrameType{id: "TFLT", description: "File type", constructor: ParseTextFrame}, + "TIME": FrameType{id: "TIME", description: "Time", constructor: ParseTextFrame}, + "TIT1": FrameType{id: "TIT1", description: "Content group description", constructor: ParseTextFrame}, + "TIT2": FrameType{id: "TIT2", description: "Title/songname/content description", constructor: ParseTextFrame}, + "TIT3": FrameType{id: "TIT3", description: "Subtitle/Description refinement", constructor: ParseTextFrame}, + "TKEY": FrameType{id: "TKEY", description: "Initial key", constructor: ParseTextFrame}, + "TLAN": FrameType{id: "TLAN", description: "Language(s)", constructor: ParseTextFrame}, + "TLEN": FrameType{id: "TLEN", description: "Length", constructor: ParseTextFrame}, + "TMED": FrameType{id: "TMED", description: "Media type", constructor: ParseTextFrame}, + "TOAL": FrameType{id: "TOAL", description: "Original album/movie/show title", constructor: ParseTextFrame}, + "TOFN": FrameType{id: "TOFN", description: "Original filename", constructor: ParseTextFrame}, + "TOLY": FrameType{id: "TOLY", description: "Original lyricist(s)/text writer(s)", constructor: ParseTextFrame}, + "TOPE": FrameType{id: "TOPE", description: "Original artist(s)/performer(s)", constructor: ParseTextFrame}, + "TORY": FrameType{id: "TORY", description: "Original release year", constructor: ParseTextFrame}, + "TOWN": FrameType{id: "TOWN", description: "File owner/licensee", constructor: ParseTextFrame}, + "TPE1": FrameType{id: "TPE1", description: "Lead performer(s)/Soloist(s)", constructor: ParseTextFrame}, + "TPE2": FrameType{id: "TPE2", description: "Band/orchestra/accompaniment", constructor: ParseTextFrame}, + "TPE3": FrameType{id: "TPE3", description: "Conductor/performer refinement", constructor: ParseTextFrame}, + "TPE4": FrameType{id: "TPE4", description: "Interpreted, remixed, or otherwise modified by", constructor: ParseTextFrame}, + "TPOS": FrameType{id: "TPOS", description: "Part of a set", constructor: ParseTextFrame}, + "TPUB": FrameType{id: "TPUB", description: "Publisher", constructor: ParseTextFrame}, + "TRCK": FrameType{id: "TRCK", description: "Track number/Position in set", constructor: ParseTextFrame}, + "TRDA": FrameType{id: "TRDA", description: "Recording dates", constructor: ParseTextFrame}, + "TRSN": FrameType{id: "TRSN", description: "Internet radio station name", constructor: ParseTextFrame}, + "TRSO": FrameType{id: "TRSO", description: "Internet radio station owner", constructor: ParseTextFrame}, + "TSIZ": FrameType{id: "TSIZ", description: "Size", constructor: ParseTextFrame}, + "TSRC": FrameType{id: "TSRC", description: "ISRC (international standard recording code)", constructor: ParseTextFrame}, + "TSSE": FrameType{id: "TSSE", description: "Software/Hardware and settings used for encoding", constructor: ParseTextFrame}, + "TYER": FrameType{id: "TYER", description: "Year", constructor: ParseTextFrame}, + "TXXX": FrameType{id: "TXXX", description: "User defined text information frame", constructor: ParseDescTextFrame}, + "UFID": FrameType{id: "UFID", description: "Unique file identifier", constructor: ParseDataFrame}, + "USER": FrameType{id: "USER", description: "Terms of use", constructor: ParseDataFrame}, + "USLT": FrameType{id: "USLT", description: "Unsychronized lyric/text transcription", constructor: ParseUnsynchTextFrame}, + "WCOM": FrameType{id: "WCOM", description: "Commercial information", constructor: ParseDataFrame}, + "WCOP": FrameType{id: "WCOP", description: "Copyright/Legal information", constructor: ParseDataFrame}, + "WOAF": FrameType{id: "WOAF", description: "Official audio file webpage", constructor: ParseDataFrame}, + "WOAR": FrameType{id: "WOAR", description: "Official artist/performer webpage", constructor: ParseDataFrame}, + "WOAS": FrameType{id: "WOAS", description: "Official audio source webpage", constructor: ParseDataFrame}, + "WORS": FrameType{id: "WORS", description: "Official internet radio station homepage", constructor: ParseDataFrame}, + "WPAY": FrameType{id: "WPAY", description: "Payment", constructor: ParseDataFrame}, + "WPUB": FrameType{id: "WPUB", description: "Publishers official webpage", constructor: ParseDataFrame}, + "WXXX": FrameType{id: "WXXX", description: "User defined URL link frame", constructor: ParseDataFrame}, } ) -func NewV23Frame(reader io.Reader) Framer { +func ParseV23Frame(reader io.Reader) Framer { data := make([]byte, FrameHeaderSize) if n, err := io.ReadFull(reader, data); n < FrameHeaderSize || err != nil { return nil