Author Topic: Proposal: Extend 'Genre' hierarchy with 'Subgenre'  (Read 93683 times)

zkhcohen

  • Sr. Member
  • ****
  • Posts: 346
I'm also not quite understanding why the "No Tag Hierarchy For" feature shows that one doesn't exist for Witch House, when it clearly does:
did you ever figure out why it was showing as missing?

No, I didn't. The interesting part is that the tagged songs still appear under the supposedly-missing genre-node, so it's a problem with the validation feature itself.

Unless it has to do with encoding or line-endings or something, I'm stumped (without seeing how you've programmed that specific query). Capitalization has no effect and there are no extra/special characters.

You can try out my hierarchy here:

https://raw.githubusercontent.com/alectron/MusicBee_TagHierarchies/master/Genres/Community%20Versions/(Combined%20with%20Hiccup)%20MusicBee_3Layer.txt

Here's a list of all the "missing" tags (some of which definitely are):

Code
Genre=00S, 2014, Abstract Hip Hop, Abstract Hip-Hop, Academy Award Winner, Adam Levine, Adult Alternative Pop, Adult Alternative Pop/Rock, Adult Alternative Rock, Adult Standards, African Traditional, Album Rock, Alt Rock, Alternative & Punk, Alternative 90Er, Alternative And Punk, Alternative Pop/Rock, Alternative/Indie Rock, Alternative/Rock/Folk/Metal, Ambient Breakbeat, Ambient Dub Techno, Ambient Pop, American, American Shoegaze, Américain, Australien, Beatgen, Billboard Hot 100, Binaural, Braindance, Britannique, British, British Folk, British Soundtrack, California Dreamin, Cast Recordings, Catchy As Hell, Chill Out, Chillhop, Christmas Classics, Cinematic, Classic, Classic Motown, Classic Pop And Rock, Classical/Piano, Club/Dance, Contemporary Country, Corsican Polyphony, Country Pop, Dance And Electronica, Dance Dub, Dance Instrumental, Dance-Pop, Death By Pneumonia, Down-Tempo, Downbeat, Downtempo, Lounge & Ambient, Downtempo/Trip-Hop/Ambient Chill/Beats, Drum And Bass, DubstepBass Music, Dutch Experimental Electronic, Dvdv, E-Gitarre, Early Pop, Electra, Electronic Dance, Electronic/House/Dance/Hardstyle/Jumpstyle, Electronic/House/Pop/Jazz, Electronica Dance, ElectronicBass Music, ElectronicDowntempo/Trip-Hop/Ambient Chill/Beats, Epicore, Escape Room, Experimental Hip Hop, Funk / Soul, Future Funk, Game, Game Music, General Downtempo, General Film Music, General Hip-Hop/Rap, General Indie Rock, Gesang, Glitchcore, Grave Wave, Harlem Renaissance, Hip Hop Rap, Hip-Hop Idm, Hip-Hop/R&B, Hip-Hop/Rap, Holiday, Hot Ac, Iceland, Indie Dream Pop, Indie Garage Rock, Indie Jazz, Indie Surf, Instrumental Hip Hop, Israel, Jazz/Big Band, Jungle Drum N Bass, Ladino, Long Title, Metropopolis, Microtonal, Modern Rap/Hip-Hop, Movie/TV Soundtrack, Old School Rap, Oldies/R&B/Soul, Original Film/TV Music, Other Rap Hip-Hop, Part Ii, Podcast, Pop / Rap, Pop And Chart, Pop/Others, Post-Modern Electronic Pop, Post-Teen Pop, Punjabi, Rap/Hip Hop, Rap/Hip-Hop, Rock And Indie, Scorecore, Sephardi, Shimmer Pop, Shimmer Psych, Synthwave / Electro, Traditional, Uk Contemporary R&B, Vapor Trap, Video Game Music, Video Game Soundtrack, Wantlist, West African, Western Hip-Hop/Rap, Western Pop, Wonky, Year End Chart
Genres=00S, 2014, Abstract, Abstract Hip Hop, Abstract Hip-Hop, Academy Award Winner, Acid, Acid House, Acid Jazz, Acoustic, Acoustic Rock, Adam Levine, Adult Alternative Pop, Adult Alternative Pop/Rock, Adult Alternative Rock, Adult Contemporary, Adult Standards, African Traditional, Afro-Cuban Jazz, Album Rock, Alt Rock, Alternative, Alternative & Punk, Alternative 90Er, Alternative And Punk, Alternative Dance, Alternative Hip-Hop, Alternative Pop/Rock, Alternative Punk, Alternative R&B, Alternative Rock, Alternative/Indie Rock, Alternative/Rock/Folk/Metal, Ambient, Ambient Breakbeat, Ambient Dub Techno, Ambient House, Ambient Music, Ambient Pop, Ambient Techno, American, American Shoegaze, Americana, Américain, Art Pop, Art Rock, Australien, Avantgarde, Baroque Pop, Bass, Bass Music, Beatgen, Bhangra, Billboard Hot 100, Binaural, Bluegrass, Blues, Blues Rock, Boom Bap, Bop, Bossa Nova, Braindance, Breakbeat, Breaks, Britannique, British, British Folk, British Soundtrack, California Dreamin, Cast Recordings, Catchy As Hell, Chamber Pop, Chill Out, Chillhop, Chillout, Chillwave, Christmas, Christmas Classics, Cinematic, Classic, Classic Motown, Classic Pop And Rock, Classic Rock, Classical, Classical/Piano, Club/Dance, Concerto, Conscious Hip Hop, Contemporary Country, Contemporary R&B, Cool Jazz, Corsican Polyphony, Country, Country Pop, Dance And Electronica, Dance Dub, Dance Instrumental, Dance-Pop, Death By Pneumonia, Deep House, Disco, Down-Tempo, Downbeat, Downtempo, Downtempo, Lounge & Ambient, Downtempo/Trip-Hop/Ambient Chill/Beats, Dream Pop, Drill And Bass, Drum And Bass, Dub, Dub Techno, Dubstep, DubstepBass Music, Dutch Experimental Electronic, Dvdv, E-Gitarre, Early Pop, East Coast Hip Hop, Easy Listening, Electra, Electro, Electro House, Electronic, Electronic Dance, Electronic Rock, Electronic/House/Dance/Hardstyle/Jumpstyle, Electronic/House/Pop/Jazz, Electronica, Electronica Dance, ElectronicBass Music, ElectronicDowntempo/Trip-Hop/Ambient Chill/Beats, Electropop, Epicore, Escape Room, Ethereal, Experimental, Experimental Hip Hop, Experimental Rock, Film Score, Flamenco, Folk, Folk Pop, Folk Rock, Funk / Soul, Future Funk, Future Jazz, Game, Game Music, Gangsta, Gangsta Rap, General Downtempo, General Film Music, General Hip-Hop/Rap, General Indie Rock, Gesang, Glitch, Glitchcore, Grave Wave, Hard Bop, Hard Rock, Hardcore Hip Hop, Harlem Renaissance, Hip Hop, Hip Hop Rap, Hip-Hop, Hip-Hop Idm, Hip-Hop/R&B, Hip-Hop/Rap, Holiday, Hot Ac, House, Iceland, IDM, Indie, Indie Dream Pop, Indie Folk, Indie Garage Rock, Indie Jazz, Indie Pop, Indie R&B, Indie Rock, Indie Surf, Indietronica, Instrumental, Instrumental Hip Hop, Israel, Jangle Pop, Jazz, Jazz Blues, Jazz Pop, Jazz Rap, Jazz/Big Band, Jazztronica, Jungle Drum N Bass, Ladino, Latin, Latin Jazz, Leftfield, Lo-Fi, Long Title, Lounge, Mainstream Rock, Math Rock, Metropopolis, Microtonal, Misc, Modern Rap/Hip-Hop, Movie/TV Soundtrack, Neo-Psychedelia, New Wave, Nu-disco, Old School Rap, Oldies, Oldies/R&B/Soul, Original Film/TV Music, Other Rap Hip-Hop, Part Ii, Podcast, Pop, Pop / Rap, Pop And Chart, Pop Punk, Pop Rap, Pop Rock, Pop/Others, Post-Modern Electronic Pop, Post-Teen Pop, Progressive House, Progressive Trance, Psychedelic, Psychedelic Pop, Psychedelic Rock, Punjabi, Punk, R&B, Rap, Rap/Hip Hop, Rap/Hip-Hop, Reggae, Rhythm And Blues, Rock, Rock And Indie, Score, Scorecore, Sephardi, Shimmer Pop, Shimmer Psych, Shoegaze, Soul, Soul Jazz, Soundtrack, Synth-Pop, Synthpop, Synthwave, Synthwave / Electro, Techno, Traditional, Trance, Tribal, Trip Hop, Trip-Hop, Uk Contemporary R&B, Underground Hip Hop, Urban, Vapor Trap, Vaporwave, Video Game Music, Video Game Soundtrack, Vocal, Wantlist, West African, Western Hip-Hop/Rap, Western Pop, Witch House, Wonky, World, Year End Chart
Last Edit: August 01, 2020, 03:03:21 PM by zkhcohen

Steven

  • Administrator
  • Sr. Member
  • *****
  • Posts: 34312
You can try out my hierarchy here:

https://raw.githubusercontent.com/alectron/MusicBee_TagHierarchies/master/Genres/Community%20Versions/(Combined%20with%20Hiccup)%20MusicBee_3Layer.txt
I can reproduce the issue. In some cases you are using ::Genres instead of ::Genre
I dont know why that causes the issue just yet but if you change them to use ::Genre then it works

zkhcohen

  • Sr. Member
  • ****
  • Posts: 346
You can try out my hierarchy here:

https://raw.githubusercontent.com/alectron/MusicBee_TagHierarchies/master/Genres/Community%20Versions/(Combined%20with%20Hiccup)%20MusicBee_3Layer.txt
I can reproduce the issue. In some cases you are using ::Genres instead of ::Genre
I dont know why that causes the issue just yet but if you change them to use ::Genre then it works

Hmm. I only see one instance, but removing it does resolve the issue.

That was a silly mistake on my part.

Steven

  • Administrator
  • Sr. Member
  • *****
  • Posts: 34312
https://getmusicbee.com/patches/MusicBee34_Patched.zip

- fixed the tag hierarchy editor to handle large files
- if your hierarchy uses sub-genres, MB will make use of the sub-genres for the entered genre to populate the drop-down list box for the sub-genre in the tag editor. Given genre is on a different tab to the custom tag for sub-genre, it makes most sense to use the vertical tag editor so genre and sub-genre can be positioned beside each other

hiccup

  • Sr. Member
  • ****
  • Posts: 7781
Currently a custom hierarchy file must be named TagHierarchy.txt

That can pose problems when a user wants to use and switch between several hierarchies.
Or when he has one that he is happy with, but in testing other ones accidentally overwrites the original one so that one is lost.

A solution where a user can have several ones would be nice.
Perhaps something similar to language files or skins.

Steven

  • Administrator
  • Sr. Member
  • *****
  • Posts: 34312
I understand and appreciate you are switching files while developing the hierarchy but once that settles down why would you or anyone else need to switch files?

hiccup

  • Sr. Member
  • ****
  • Posts: 7781
I understand and appreciate you are switching files while developing the hierarchy but once that settles down why would you or anyone else need to switch files?

I can imagine users having different taxonomies. Not only for genres, but also for perhaps instruments, regions/countries.
It would be useful if they could reside in the same folder and a user could select one. (with or without a restart)

alec.tron

  • Sr. Member
  • ****
  • Posts: 752
A solution where a user can have several ones would be nice.
For me this isn't a big one as I just keep multiple copies per purpose:
TagHierarchy.all.txt
TagHierarchy.genres.txt
TagHierarchy.instruments.txt

And just duplicate & rename to the default:
TagHierarchy.txt
making sure to only write over the default from the purpose driven copies.


But, I also see value in allowing multi-files as mentioned previously.

Could this be an easy/straight forward approach ?
Instead of a singular
*\AppData\TagHierarchy.txt
could be to have a directory to hold txt files:
*\AppData\TagHierarchies\Genres_default.txt
*\AppData\TagHierarchies\MyInstrumentTags.txt
*\AppData\TagHierarchies\Regions.txt

And having something like this inside the menu:

Tag Hierarchy Explorer \/
    Hide Header Menu
    ---------------------
    Show Count
    Tag Hierarchy Files  \/
        Genres_default
        MyInstrumentTags
        Regions
    Edit Tag Hierarchy...
    ...

Whereas "Tag Hierarchy Files" shows  all (correctly formatted) .txt files from that default directotry as a list, and you pick (via tickbox to show which is active [?] ) which you want to display.
Just an idea thrown in.
c.

hiccup

  • Sr. Member
  • ****
  • Posts: 7781

…For me this isn't a big one as I just keep multiple copies per purpose…

…But, I also see value in allowing multi-files as mentioned previously…

If we agree this is useful to have I think the easiest approach would be to have a separate folder to contain hierarchy txt files.
Or if they remain to reside in appdata, it is probably better to use a somewhat unique file extension for them.
(something like .hier or whatever)

In the first case, when a user creates or edits a hierarchy file he can just name it and save it as a .txt file, in the second case he should save it as .hier (or whatever)
(I am guessing a compiling option similar to skins and language files will be a bit overkill for this)

Steven

  • Administrator
  • Sr. Member
  • *****
  • Posts: 34312
https://getmusicbee.com/patches/MusicBee34_Patched.zip

- now supports templates (.txt) files located in AppData/TagHierarchyTemplates
- you will need to move your existing templates there yourself before starting MB and the default template is "Genres.txt" so one of the files should be named that
- for new users this will be automatic

alec.tron

  • Sr. Member
  • ****
  • Posts: 752
- now supports templates (.txt) files located in AppData/TagHierarchyTemplates

Neato, that works great (for me).
c.

hiccup

  • Sr. Member
  • ****
  • Posts: 7781
if your hierarchy uses sub-genres, MB will make use of the sub-genres for the entered genre to populate the drop-down list box for the sub-genre in the tag editor.

I may misunderstand how this is supposed to work, but after (only very brief) testing I am not able to see it retrieving and proposing something that is in the hierarchy sheet. Or I just may be doing something wrong.

But before putting more work in refining such a feature, it may be helpful if I explain how I would expect it to work in proposing subgenres:

For example, usually I would tag a song with Rock as the genre, and if I wanted to refine it, I might tag it with Krautrock as the subgenre.
Or another song I would tag with Jazz as the genre, and then e.g. Bebop as subgenre.

Now looking at my genre hierarchy sheet for these two examples to see how that would work; all the genres in the coloured boxes are what I would expect to be proposed for subgenre.



So for as far as I can oversee it, it would need to check if the genre is also a category, and then select all genres at the same level, and the ones at the levels above it.
I am not sure how doable that is though.

On a sidenote,
When using such a 'subgenre workflow', all genres in the hierarchy sheet (except for the main genres) would additionally need to get an entry as subgenre so they are recognised and categorised, but it looks like that won't be a problem.
Last Edit: August 03, 2020, 07:20:47 PM by hiccup

Steven

  • Administrator
  • Sr. Member
  • *****
  • Posts: 34312
MB looks for any child nodes under a genre node (tagged with ::Genre) where there is a child node that is not tagged with ::Genre ie. MB looks at the field that child node is tagged with (likely to be a custom tag) and considers that field to be the sub-genre.
You can see if the sub-genre is detected by checking in MusicBee3Settings.ini for <ENV_SubGenre> not being 0
For the tag editor, as long as the genre is entered, the sub-genre custom tag field should be a dropdown that shows the relevant sub-genres

hiccup

  • Sr. Member
  • ****
  • Posts: 7781
I see, yes that works nicely.
There is a problem though. A genre node that has child nodes using ::subgenre, becomes a collapsible category itself as soon as a subgenre was created.

The result is either a duplicate additional category within the category:




or a new category where you don't want it to be an additional category (Jazz), and it showing the subgenre (Bop) under it, while you only want that shown in the category you designed for it.


Steven

  • Administrator
  • Sr. Member
  • *****
  • Posts: 34312