What I'm doing sounds a bit like the classical music individual. In my case, a large portion of my collection is from a very unusual genre: Video Game Music. There are some unique aspects to this genre, and it's taken me a good amount of trial-and-error to handle the idiosyncracies well. Most of that trial-and-error was done in foobar2000, and I am basically replicating that structure here in MC.
Here is a basic rundown of the situations which need handling:
- My library has music in the Game genre, as well as music from other non-Game genres.
- If I choose genre Game, a lot of unique handling needs to happen.
- But if I choose any other genre, all of that handling should be completely skipped over: I just want to pick the Album Artist, and then the Album.
- For the Game genre, there are a few subgenres to pick from, for which we use the Subgenre tag. Here, the subgenre basically describes the kind of game the music is from. For example, the music could be from an "Action-Adventure" game (e.g. Super Mario Bros.), or from a Role Playing Game (e.g. Final Fantasy).
- Within a subgenre, there are different styles of album, and so Style is the next thing we'll pick.
- As an example of styles, some songs will be the actual original music from the same (Original Sound Track), and some will be musical arrangements of these (Arranged).
- Some albums will even contain a combination of original and arranged songs, and for these albums, each track will be tagged with the correct style. This means an album can be split across multiple styles.
- The next level varies depending on which style we picked.
- If we're looking at Arranged, the next level simply shows the album names. Here, there is no need to see the album artist, as I don't make my selection based on which game company happened to produce an album.
- If we're looking at Original Sound Track, the next level shows the actual game that the music is from, which is a natural way to browse original scores. This is accomplished using the Game tag.
- It's then the case that some games were published on multiple different platforms, each with their own music. Here, think of a game which was originally released to arcades, and which was then ported to several home consoles. For these games, we'll then choose which platform we want to hear the music from, using the Platform tag.
- Finally, even within a platform (or if a game was never released for multiple platforms), I might own more than one album which matches my chosen game/platform combination.
- For example, imagine album A, which has music from games 1 and 2, as well as album B, which has music from games 2 and 3, both coexisting in the same library.
- As a result, the next level is Album, where there might be more than one to choose from.
To me, this all seems like a logical structure. However, it's also a structure with highly variable depth, where the only "mainstays" are Genre at the beginning, and Album at the end. Everything in-between is a toss-up. Given that state, the structure can't be represented in a rigid GUI, e.g. a fixed number of panes. This is where I see the tree excelling: it lets me add the complexity I need, without worrying about how that complexity fits into an existing GUI. In the tree, it always fits.
While I'm browsing the tree in Standard View, the list in my Content Pane shows me which tracks I've selected. I use this list for visualizing the selection only (never for browsing) - and so all I need here is for the list to display my selection in a minimally-sensible order. The bar here is pretty low, but is still above what the "Album" grouping offers. After using my own expression to group, the list is now in good shape.
If you're interested in knowing how my tree is defined: it has a single category called "Hierarchy", and the formula which populates that hierarchy is as follows (below). There are a few other features which aren't described above, including handling for Fan-Made albums, as well as replacing semicolons with other characterics in certain fields (as these semicolons "confuse" the list builder).
listbuild(
1,
\,
[Genre],
if(isequal([Genre], Game), [Subgenre], ),
if(isequal([Genre], Game), [Style], ),
if(isequal([Style], Original Sound Track), replace([Game], /#;#/, /# +#/ ), ),
if(isequal([Style], Original Sound Track), [Platform], ),
if(math(!isequal([Genre], Game) + isequal([Subgenre], Fan-Made)), [Album Artist (auto)], ),
replace([Album], /#;#/, /#:#/)
)&datatype=[list]
That all said, I am still quite new to MC, and any thoughts on the above are very much appreciated