mirror of
https://github.com/AynaLivePlayer/miaosic.git
synced 2025-12-06 13:02:48 +08:00
68 lines
1.4 KiB
Go
68 lines
1.4 KiB
Go
package tag
|
|
|
|
import (
|
|
"github.com/dhowden/tag"
|
|
"github.com/gabriel-vasile/mimetype"
|
|
"io"
|
|
)
|
|
|
|
func Read(r io.ReadSeeker) (Metadata, error) {
|
|
_, err := r.Seek(0, io.SeekStart)
|
|
if err != nil {
|
|
return Metadata{}, err
|
|
}
|
|
|
|
b := make([]byte, 512)
|
|
_, err = io.ReadFull(r, b)
|
|
if err != nil {
|
|
return Metadata{}, err
|
|
}
|
|
mimeType := mimetype.Detect(b).String()
|
|
_, err = r.Seek(0, io.SeekStart)
|
|
switch {
|
|
case string(b[0:4]) == "fLaC":
|
|
return ReadFLACTags(r, mimeType)
|
|
//case string(b[0:4]) == "OggS":
|
|
// return ReadOGGTags(r)
|
|
//case string(b[4:8]) == "ftyp":
|
|
// return ReadAtoms(r)
|
|
case string(b[0:3]) == "ID3":
|
|
return ReadID3v2Tags(r, mimeType)
|
|
//case string(b[0:4]) == "DSD ":
|
|
// return ReadDSFTags(r)
|
|
}
|
|
return fallbackRead(r, mimeType)
|
|
}
|
|
|
|
func fallbackRead(r io.ReadSeeker, mime string) (Metadata, error) {
|
|
meta := Metadata{
|
|
Mimetype: mime,
|
|
}
|
|
m, err := tag.ReadFrom(r)
|
|
if err != nil {
|
|
return Metadata{}, err
|
|
}
|
|
meta.Format = string(m.Format())
|
|
meta.Title = m.Title()
|
|
meta.Artist = m.Artist()
|
|
meta.Album = m.Album()
|
|
meta.Lyrics = []Lyrics{}
|
|
if m.Lyrics() != "" {
|
|
meta.Lyrics = append(meta.Lyrics, Lyrics{
|
|
Lang: "unk",
|
|
Lyrics: m.Lyrics(),
|
|
})
|
|
}
|
|
meta.Pictures = []Picture{}
|
|
if m.Picture() != nil {
|
|
p := m.Picture()
|
|
meta.Pictures = append(meta.Pictures, Picture{
|
|
Mimetype: p.MIMEType,
|
|
Type: PictureTypeFrontCover,
|
|
Description: p.Description,
|
|
Data: p.Data,
|
|
})
|
|
}
|
|
return meta, nil
|
|
}
|