While you can of course create an <id3v2-tag>
instance “from
scratch” (in-memory, as a result of a call to (make <id3v2-tag>
...)
you will more frequently be reading them from files on
disk.
The function for doing this is read-tagset
. The name is intended
as a reminder that a file can have multiple ID3v2 tags, so you are in
general reading a tag set, not just a tag.
scheme@(guile-user)> (define tags (read-tagset "opium.mp3")) scheme@(guile-user)> tags $1 = ((#<<id3v2-tag> 56188c2a3d80> 3 #f))
read-tagset
returns a list of three-tuples, one tuple for
each tag (so it could return '()
, if the file contained no
ID3v2 tags). Each three tuple contains:
<id3v2-tag>
instance, representing the tag
Once you’ve created or updated your ID3v2 tag(s), you will presumably
want to write it (them) to disk, presumably in place of an existing
tagset. This is done via write-tagset(tags, file,
...)
. tags
is a list of two-tuples: the first element is
always an <id3v2-tag>
isntance to be written to disk & the
second is the ID3v2 version under which it shall be serialized
(i.e. an int, either 2, 3 or 4). file
is the file into which
the new tagset shall be written, replacing any tagset present therein.
write-tagset
takes a few optional parameters:
#:apply-unsync
governs whether the unsynchronisation scheme
See The Unsynchronisation Scheme, should be applied when writing out
the given tags: #f
(the default) means never, #t
means
it will always be applied and 'as-needed
means that it will be
applied to any tag whose serialization would contain false syncs.
#:copy
governs whether a backup copy of the target file will be
made: a value of #f
(the default) means that the new tagset
will be written in place (moving the audio data & ID3v1 tag, if any,
if needed) and a value of #t
means that the target file will be
copied to a backup, the new tagset will be written, and then the track
data & ID3v1 tag (if any) will be copied over to the new file.