beetbox / beetbox/mediafile

ID3v2.3 multi-value field separator is always "/"

Open
#21 3 comments 0 reactions 0 assignees View on GitHub
enhancement
Dominant language
Python
Stars
120
Forks
41
PR merge metrics
No merged PRs in 30d

Description

For some libraries, users might decide to store ID3v2.3 tags for greater compatibility with older software (as opposed to the ID3v2.4 default).

Now ID3v2.4 allows storing multiple tags of the same name (for multi-value entries like artists, genres and so on) and ID3v2.3 traditionally used a slash "/" character (which brought us the "AC/DC problem").

People (and tagging software like MusicBrainz Picard) have started to support other separators to store multiple values on _one_ ID3v2.3 field. Typical separators used today are the semicolon `;`, the vertical bar `|`, a comma `,` the NULL character `\0` and even character sequences like semicolon blank `; ` for better readability. The underlying Mutagen supports all of these by specifying `v23_sep`.

This is a missing feature in MediaFile (and beets) and I’d like to add it to the MediaFile class so it could also be supported via a beets config entry:
```python
class MediaFile(object):
"""Represents a multimedia file on disk and provides access to its
metadata.
"""
def __init__(self, path, id3v23=False, id3v23_sep='/'):
"""Constructs a new `MediaFile` reflecting the file at path. May
throw `UnreadableFileError`.

By default, MP3 files are saved with ID3v2.4 tags. You can use
the older ID3v2.3 standard by specifying the `id3v23` option
and (optionally) the desired separator `id3v23_sep` for
multi-value fields (defaults to a slash character).

To use a NULL character as terminator, pass `id3v23_sep=None`.
"""
```

Objections?
Would it need a `u'/'` instead?

N.B.: Making this a core config entry in beets should also help some plugins who currently specify their own separators.

Contributor guide

Open the contributing guide

Research direction

Start by locating the MediaFile class and its existing ID3v2.3 save path, then inspect how beets exposes related configuration. Add support for configuring the multi-value separator, including the documented NULL-character case, and verify that ID3v2.3 fields are written with the selected separator.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.