package metadata import ( "log/slog" "strconv" "github.com/go-flac/flacvorbis/v2" "github.com/go-flac/go-flac/v2" ) func updateFlacMetadata(m Metadata, input, output string) error { f, err := flac.ParseFile(input) if err != nil { return err } vorbisMeta := createVorbisMetaBlock(m) meta := vorbisMeta.Marshal() replaced := false for i, block := range f.Meta { if block.Type == flac.VorbisComment { f.Meta[i] = &meta replaced = true break } } if !replaced { f.Meta = append(f.Meta, &meta) } return f.Save(output) } func createVorbisMetaBlock(m Metadata) flacvorbis.MetaDataBlockVorbisComment { vorbisMeta := flacvorbis.New() vorbisMeta.Add(flacvorbis.FIELD_TITLE, m.Title) vorbisMeta.Add(flacvorbis.FIELD_ALBUM, m.Album) vorbisMeta.Add("COMMENT", m.Comment) vorbisMeta.Add("TRACKNUMBER", strconv.Itoa(m.Track)) vorbisMeta.Add("TOTALTRACKS", strconv.Itoa(m.TotalTracks)) vorbisMeta.Add("DISCNUMBER", strconv.Itoa(m.Disc)) vorbisMeta.Add("TOTALDISCS", strconv.Itoa(m.TotalDiscs)) for _, artist := range m.Artist { vorbisMeta.Add(flacvorbis.FIELD_ARTIST, artist) slog.Debug("Added ARTIST filed to metadata", "artist", artist) } for _, albumArtist := range m.AlbumArtist { vorbisMeta.Add("ALBUMARTIST", albumArtist) } return *vorbisMeta }