Large Untagged Library

I have a very large, untagged, randomly named library. Filenames, for instance, might be SP1234.wav, DF4345.wav. All of the tracks are popular music, radio type plays. However, all of the metadata has been stripped. I’ve used MusicBrainz Picard in the past, but I’m hoping to do this completely in bash cli so I can later automate the process.

So, these tracks aren’t in any particular file structure either. There are no albums or artists. Just the tracks. I tried setting up adsubmit and chroma, but I’m not sure that I got it correct. I also went ahead and signed up with discogs, but that returned erroneous data. One directory only matched a handful of tracks and they were certainly all incorrect.

The idea is to import from one directory and copy to another such that artist and track only remain. I would also not mind converting the tracks to something else like ogg or flac.

Of course, I will be continuing to try to figure this out with the docs, but any help would be appreciated. Beets seems like a bit of a behemoth to tackle…

Using chroma is the right idea! Acoustic fingerprinting is the way to recover structure from this.

I would also import all the tracks in singleton mode, i.e., with beet import -s. You may be able to recover album structure later, but this seems like the way to go as a first cut.

1 Like

Aye, that’s not bad. It’s kind of annoying that it keeps asking me questions, but I get it. Another kind of annoying thing is that it puts tracks in LIBRARY/Non-Album/$Artist/$Track.wav

I would like to output like:
LIBRARY/$artist - $track.wav

Fairly confident this is just a config thing.

As I was going through this, I thought it’d it would be cool:

if beet_unsure(track):
    output_dir = Path('~/unsure_tracks').expanduser()
    finish_beets_stuff(output_dir=output_dir)
else:
    finish_beets_stuff(output_dir=normal_dir)

whatever, something like that so I don’t have to keep pushing buttons…

Fortunately, you can customize those paths to your heart’s content (you will want to change the singleton path):
https://beets.readthedocs.io/en/stable/reference/config.html#path-format-config

Maybe the --quiet and --quiet-fallback flags are useful, as well as the strong_rec_thresh setting of the autotagger—although I don’t know how the latter interacts (if at all) with zero-metadata chroma-only type matches.

I am not a beets super-expert, but I am confident you can get beets to do your imports in a way that never prompts you for confirmation, and sorts results into three categories/directories: tagged correctly (i.e. strong recommendation), tagged but possibly incorrectly (i.e. non-strong recommendation), and unknown (i.e. no fingerprint match).

My config has some examples on how to tweak the autotagger. I can’t guarantee it works. (And don’t just copy paste the whole thing.)

1 Like

I certainly wouldn’t just copy-pasta such a complex config. However, it is jam packed with notes and lots of helpful hints. Thanks for that.

(Also, as a matter of personal principal, I never copy-pasta anything. Even if I want that exact bit of code, I still hand type it out. Makes me think very carefully about every line.)