My music directory structure starts with a high-level basic genre - Classical / Jazz / Pop / Spoken / Soundtrack.
You can determine Spoken / Soundtrack from the Release Group type. But Classical/Pop/Jazz are more difficult because there is no official metadata for these major groupings. Genre would the be obvious location, but in MusicBrainz genre is a tag-based system rather than an official, curated, voted metadata.
So anyway, I have an idea for a plugin - but development is non-trivial and I don’t have time. The basic concept is this:
We identify a list of classical artists - composers or performers who only do classical works - and include this list (MBIDs as an internal list, artist sort name as user friendly list).
Any album who has one or more of these artists in the albumartists metadata is flagged as Classical by setting variable _isClassical to 1.
The challenge is to produce the list of artists!!
Enhanced functionality would include:
a. Visibility of this list in a table on a plugin Options page.
b. Ability to search for (a subset of) artists
c. Ability to mark a system provided artist as disabled.
d. Ability to add a user provided artist - by MBID? using green tagger button in browser?
e. Comparison of current plugin version at startup with version at previous startup, and if greater to trigger a background, intelligent merge of the old list with the new system list (preserving disabled entries and keeping manually added entries even if they were later provided as system entries and then removed as system entries).
Even more advanced functionality:
i. Submit manually added artists to a Rest API somewhere - with a privacy option to enable / disable this.
ii. Submit artists whose plugin sort-order name is different to the albumartistsort name to the Rest API (to indicate a name has been changed in the MB artists list.
This would allow a regular update of the plugin list by an autogenerated PR.
Once isClassical plugin is working well, we could use the same code to generate an isJazz plugin etc.
So - two reasons I have posted this idea:
A) To see whether people think this idea has merit and see it prompts anyone to come up with a better idea or alternative approach.
B) To see whether there are any volunteers to code this (as I don’t have any time for any coding at present, and as and when I do get time, I have higher priority items on my to-do list).