|
|
@ -674,35 +674,65 @@ func writeM4a(w *mp4.Writer, info *SongInfo, meta *AutoGenerated, data []byte, t |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
err = addMeta(mp4.BoxType{'s', 'o', 'n', 'm'}, meta.Data[0].Relationships.Tracks.Data[index].Attributes.Name) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
return err |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
err = addMeta(mp4.BoxType{'\251', 'a', 'l', 'b'}, meta.Data[0].Attributes.Name) |
|
|
|
err = addMeta(mp4.BoxType{'\251', 'a', 'l', 'b'}, meta.Data[0].Attributes.Name) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
err = addMeta(mp4.BoxType{'s', 'o', 'a', 'l'}, meta.Data[0].Attributes.Name) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
return err |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
err = addMeta(mp4.BoxType{'\251', 'A', 'R', 'T'}, meta.Data[0].Relationships.Tracks.Data[index].Attributes.ArtistName) |
|
|
|
err = addMeta(mp4.BoxType{'\251', 'A', 'R', 'T'}, meta.Data[0].Relationships.Tracks.Data[index].Attributes.ArtistName) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
err = addMeta(mp4.BoxType{'s', 'o', 'a', 'r'}, meta.Data[0].Relationships.Tracks.Data[index].Attributes.ArtistName) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
return err |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
err = addMeta(mp4.BoxType{'\251', 'p', 'r', 'f'}, meta.Data[0].Relationships.Tracks.Data[index].Attributes.ArtistName) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
return err |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
err = addExtendedMeta("PERFORMER", meta.Data[0].Relationships.Tracks.Data[index].Attributes.ArtistName) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
return err |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
err = addMeta(mp4.BoxType{'\251', 'w', 'r', 't'}, meta.Data[0].Relationships.Tracks.Data[index].Attributes.ComposerName) |
|
|
|
err = addMeta(mp4.BoxType{'\251', 'w', 'r', 't'}, meta.Data[0].Relationships.Tracks.Data[index].Attributes.ComposerName) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
err = addMeta(mp4.BoxType{'\251', 'd', 'a', 'y'}, strings.Split(meta.Data[0].Attributes.ReleaseDate, "-")[0]) |
|
|
|
err = addMeta(mp4.BoxType{'s', 'o', 'c', 'o'}, meta.Data[0].Relationships.Tracks.Data[index].Attributes.ComposerName) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// cnID, err := strconv.ParseUint(meta.Data[0].Relationships.Tracks.Data[index].ID, 10, 32)
|
|
|
|
err = addMeta(mp4.BoxType{'\251', 'd', 'a', 'y'}, meta.Data[0].Attributes.ReleaseDate) |
|
|
|
// if err != nil {
|
|
|
|
if err != nil { |
|
|
|
// return err
|
|
|
|
return err |
|
|
|
// }
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cnID, err := strconv.ParseUint(meta.Data[0].Relationships.Tracks.Data[index].ID, 10, 32) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
return err |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// err = addMeta(mp4.BoxType{'c', 'n', 'I', 'D'}, uint32(cnID))
|
|
|
|
err = addMeta(mp4.BoxType{'c', 'n', 'I', 'D'}, uint32(cnID)) |
|
|
|
// if err != nil {
|
|
|
|
if err != nil { |
|
|
|
// return err
|
|
|
|
return err |
|
|
|
// }
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
err = addExtendedMeta("ISRC", meta.Data[0].Relationships.Tracks.Data[index].Attributes.Isrc) |
|
|
|
err = addExtendedMeta("ISRC", meta.Data[0].Relationships.Tracks.Data[index].Attributes.Isrc) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
@ -724,6 +754,11 @@ func writeM4a(w *mp4.Writer, info *SongInfo, meta *AutoGenerated, data []byte, t |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
err = addMeta(mp4.BoxType{'s', 'o', 'a', 'a'}, album.Attributes.ArtistName) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
return err |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
err = addMeta(mp4.BoxType{'c', 'p', 'r', 't'}, album.Attributes.Copyright) |
|
|
|
err = addMeta(mp4.BoxType{'c', 'p', 'r', 't'}, album.Attributes.Copyright) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
return err |
|
|
|
return err |
|
|
@ -738,6 +773,11 @@ func writeM4a(w *mp4.Writer, info *SongInfo, meta *AutoGenerated, data []byte, t |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
err = addMeta(mp4.BoxType{'\251', 'p', 'u', 'b'}, album.Attributes.RecordLabel) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
return err |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
err = addExtendedMeta("LABEL", album.Attributes.RecordLabel) |
|
|
|
err = addExtendedMeta("LABEL", album.Attributes.RecordLabel) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
return err |
|
|
|
return err |
|
|
@ -748,28 +788,28 @@ func writeM4a(w *mp4.Writer, info *SongInfo, meta *AutoGenerated, data []byte, t |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// plID, err := strconv.ParseUint(album.ID, 10, 32)
|
|
|
|
plID, err := strconv.ParseUint(meta.Data[0].ID, 10, 32) |
|
|
|
// if err != nil {
|
|
|
|
if err != nil { |
|
|
|
// return err
|
|
|
|
return err |
|
|
|
// }
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// err = addMeta(mp4.BoxType{'p', 'l', 'I', 'D'}, uint32(plID))
|
|
|
|
err = addMeta(mp4.BoxType{'p', 'l', 'I', 'D'}, uint32(plID)) |
|
|
|
// if err != nil {
|
|
|
|
if err != nil { |
|
|
|
// return err
|
|
|
|
return err |
|
|
|
// }
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// if len(meta.Data[0].Relationships.Artists.Data) > 0 {
|
|
|
|
if len(meta.Data[0].Relationships.Tracks.Data[index].Relationships.Artists.Data[0].ID) > 0 { |
|
|
|
// atID, err := strconv.ParseUint(meta.Data[0].Relationships.Artists.Data[index].ID, 10, 32)
|
|
|
|
atID, err := strconv.ParseUint(meta.Data[0].Relationships.Tracks.Data[index].Relationships.Artists.Data[0].ID, 10, 32) |
|
|
|
// if err != nil {
|
|
|
|
if err != nil { |
|
|
|
// return err
|
|
|
|
return err |
|
|
|
// }
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// err = addMeta(mp4.BoxType{'a', 't', 'I', 'D'}, uint32(atID))
|
|
|
|
err = addMeta(mp4.BoxType{'a', 't', 'I', 'D'}, uint32(atID)) |
|
|
|
// if err != nil {
|
|
|
|
if err != nil { |
|
|
|
// return err
|
|
|
|
return err |
|
|
|
// }
|
|
|
|
} |
|
|
|
// }
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
trkn := make([]byte, 8) |
|
|
|
trkn := make([]byte, 8) |
|
|
|
binary.BigEndian.PutUint32(trkn, uint32(trackNum)) |
|
|
|
binary.BigEndian.PutUint32(trkn, uint32(trackNum)) |
|
|
@ -779,12 +819,12 @@ func writeM4a(w *mp4.Writer, info *SongInfo, meta *AutoGenerated, data []byte, t |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// disk := make([]byte, 8)
|
|
|
|
disk := make([]byte, 8) |
|
|
|
// binary.BigEndian.PutUint32(disk, uint32(meta.Attributes.DiscNumber))
|
|
|
|
binary.BigEndian.PutUint32(disk, uint32(meta.Data[0].Relationships.Tracks.Data[index].Attributes.DiscNumber)) |
|
|
|
// err = addMeta(mp4.BoxType{'d', 'i', 's', 'k'}, disk)
|
|
|
|
err = addMeta(mp4.BoxType{'d', 'i', 's', 'k'}, disk) |
|
|
|
// if err != nil {
|
|
|
|
if err != nil { |
|
|
|
// return err
|
|
|
|
return err |
|
|
|
// }
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
ctx.UnderIlst = false |
|
|
|
ctx.UnderIlst = false |
|
|
|
|
|
|
|
|
|
|
|