quodlibet / quodlibet

Music player and music library manager for Linux, Windows, and macOS
https://quodlibet.readthedocs.io
GNU General Public License v2.0
1.44k stars 224 forks source link

User-defined multi-categorization of tracks for filtering #1221

Open lazka opened 9 years ago

lazka commented 9 years ago

Original issue 1221 created by destinyjwoods on 2013-07-22T03:52:25.000Z:

This is sort of two features in one, but they are inextricably linked; the first is made most useful by the second and the second is made most useful by the first, if not depending on it. Hence I've described the whole system below. Let me know if I absolutely must sort them out into two feature requests.

I would like to see the ability (probably via internal tags--but ones the user can set) to "categorize" music in user-defined categories, and then filter based on that. For instance, independent of genre, I would like to mark some of my music as instrumental vs. vocal, or as "meditative" or "relaxing". I, personally, use the word "contemporary" to categorize anything with a beat (which may or may not overlap with instrumental), and a song categorized folk could also be categorized contemporary AND vocal or instrumental in addition. This is clearly not what most people use--which is why a user-defined method will work best, to accommodate people's idiosyncratic ways of thinking and organizing music. What I'm referring to is a system of categorizing and working with music that is far more complex than the single-genre mindset.

I don't think that changing the genre system is a good idea; some players have difficulty with multiple genres, the system I'm referring to is likely to be very user-specific (my definition of "meditative" is not necessarily anyone else's, and I use terms that no one else might use; I'm sure I'm not the only one), and in writing something to the actual file tags, it eliminates the possibility of importing music that cannot or should not be changed (such as a song that's being seeded in a torrent; changing the tags would cause errors with the hash). The concept of internal tags as QL has set up could be extended to cover this.

Inputting the tags could be done by checkbox (I'd prefer that, as it's far easier to quickly check, check, check tags that I use over and over again rather than type and tab-complete or something else complicated), but maybe there's a better way. The user would have control over which tags exist--adding and deleting them as need be.

Why would this system be useful and desirable to many people? Say that someone wants to filter their music by categories. Currently I have no way to easily filter my music to play only religious Christmas music (if I tag all Christmas music specifically religious vs. secular, then there's no way to sort all Christmas together, or vice versa), or to filter out folk music with singing from folk music that does not have singing (which I might not want to do all the time--other times simply playing anything folk); in college I frequently wanted to sort out instrumental music without a beat for background study music, but sometimes include all instrumental. (That's just the way I like to sort my music; I'm sure others would have different combinations of categories they would like to sort!)

With a large number of tracks (and QL boasts to be solid for large numbers of tracks, which I have), manually sorting to playlists every possible combination would be a nightmare (most users would just give up). With an initial investment in categorizing the music the way the user thinks of it, the user could then filter just the appropriate set of categories for their particular situation. This would give the user unprecedented control of their music. (If the filtering is set up to allow Boolean AND as well as OR, it would beat out even the old dBpowerAMP Audio Player, which allowed multi-genre tagging in-database and filtering by OR.) Filtering could also be extended to combine categories with information such as year, artist, even bpm, making it very useful for DJs. (Filtering should be yet another way to browse the library--this one allowing users to enter in information in various boxes by embedded and/or internal tags.)

In short, this would give users of QL more control over their music, control that few players have even come close to giving. This control is useful not just for control's sake, but will save users massive amounts of time browsing through trying to manually create the right playlists, and allow them to quickly sort their music for specific situations; it would allow the player to fit them instead of requiring them to adapt to the player. It might be a bit of work; I think the outcome will be well-worth it.

lazka commented 9 years ago

Comment #1 originally posted by spxxxk on 2013-07-22T13:17:29.000Z:

If I understood correctly, you're asking for an easier way of inputting custom tags with pre-defined tag values, and if so, I agree. If feasible. "user-defined categories" are easily done (less easily inputted) with custom tags. And filtering, whether using the searchbar or the panedbrowser, is what QL is about.

Maybe by adding a button in the bottom of the "Edit tags" tab, or right clicking in the window..

lazka commented 9 years ago

Comment #2 originally posted by destinyjwoods on 2013-07-22T15:23:48.000Z:

Sort of--I'm specifying tags that the user would create (rather than pre-built ones), that would not be edited into the song's embedded tags itself (I'd rather my songs each keep a single tag that other people would recognize, and use multiple internal tags for ones that would be specific to me, like this), and then changing/adding a browser to allow for filtering based on those internal tags. The paned browser could be adapted, yes, now that I think of it--right now it just has album/artist, which is not very useful to me. I don't sort my music by artist or album (if I want to do that, I can quickly type it in the searchbar), but more about the categories it fits into. I once called them "genre labels", because I'm the one applying the label, rather than it being an intrinsic genre that everyone can agree on. I think that's the main idea behind it. (It would also be nice to be able to save the filter once it's set up so I can easily restore it at any point. Just open a file and go "oh, I want the instrumental folk set today", click OK, and poof, all the fields I had filled in before are there again. Would save a LOT of time redoing complicated filters.)

At one point I designed a 14-page document of how a music player would look like that had the features I was looking for. This was before I switched to Linux and started using QL--I'd never found a player that even came close to giving me the amount of control I was looking for (now I have hope that I can actually have some of the control I want without spending some years just trying to learn to program in order to create it myself--time and energy I can't spare from my other projects). I can upload that document if it would help to understand the ideas behind the system of labeling and categorization I'm talking about. QL would obviously not implement things in the same way that I had come up with for a player purpose-built for those features, but it might explain my thinking.

The other thing that occurs to me is that filtering by these categories would only allow for Boolean OR, if using a Ctrl+click or checkbox method added onto the paned browser. I would be able to filter music that was either religious OR Christmas or both, but would end up with both Amazing Grace and Jingle Bells in the same filter, rather than getting only songs like Silent Night and Joy to the World (which would require a Boolean AND operation). This was one of the specific situations that I longed for a custom filter to manage, and the only way I can think of handling it was a more complicated filter system, but I'm not sure how something like that would be integrated with QL's current system so that I don't have any suggestions on.

lazka commented 9 years ago

Comment #3 originally posted by spxxxk on 2013-07-22T16:22:24.000Z:

It looks like what you're describing is exactly how I use QL, but with custom embedded tags instead of internal. You could create a "c" tag with values such as "c=folk", "c=religious", "c=christmas" .. And filter on any kind of combinations of those tags and others. Save patterns in the search bar. eg "c=|(instrumental, folk)", "&(x=christmas,x=!/religious/) Use them as columns in the paned browser (https://quodlibet.readthedocs.org/en/latest/guide/browse/paned.html, in case you didn't see that top right button). But, still need to add a tag in order to add a track in a category...

So Im guessing you're asking for custom internal tags and easier way to add tracks in those categories. The filtering part is already there.

lazka commented 9 years ago

Comment #4 originally posted by destinyjwoods on 2013-07-23T00:04:16.000Z:

Sweet, I didn't realize the filtering was already there--I hadn't fiddled with saving patterns because what there was to filter by wasn't what I would filter with anyway, so I hadn't seen it.

Yep, sounds like it--custom internal tags, and definitely easier way to mark categories. I attached a pic from years ago when I used dbpoweramp on Windows and found the checkbox method really easy--the screenshot shows editing a track. That might help to give you an idea of how easy it was to add or delete categories and mark them on songs. (It didn't do it quite right--it made them embedded in songs and only embedded the first since multi-genre embedding was a bit wonky at that time and some players still don't like it to this day. This caused some definite weirdness in my tags. I'd rather skip all of that trouble, edit my embedded tags to the standard tag that everyone uses, and then ignore embedded tags and stick with custom internal ones for my filtering.)

So yeah, looks like you nailed it. I'm excited just realizing QL has so much of the features I had envisioned (not the way I envisioned them, but the form doesn't matter so much--I can learn a new way of using a program as long as it will DO what I need)!

lazka commented 9 years ago

Comment #5 originally posted by spxxxk on 2013-07-24T09:51:05.000Z:

2 more points.

You can add multiple values per tag instead of custom tags: genre=g1 , genre=g2, .. or genre=g1,g2,... and then filter them as easily.

You can filter/grep/search by playlists too: ~playlists=&(folk,religious,!easter). "User-defined multi-categorization of tracks" is actually what playlists are for.. Maybe you didn't know you could filter them too. I forgot to mention them earlier because I don't use them (dealbreaker for libraries like mine, in constant motion).

lazka commented 9 years ago

Comment #6 originally posted by reiter.christoph on 2013-07-24T11:44:51.000Z:

One thing I could imagine is a paned like browser which uses the saved filters in each pane. Selecting multiple in one pane ORs them, all pane selections get ANDed, selecting only one filter removes it from all following panes.

With the current saved search dialog as configuration + set a number of panes (or make the number dynamic somehow)

Maybe I'll create a plugin to test that.


Regarding selecting tag values per checkbox. This could be easily added as a plugin, showing the 10 most used tag values for a specific tag (like the value suggestens).

I'll try to come up with a UI for that.

lazka commented 9 years ago

Comment #7 originally posted by destinyjwoods on 2013-07-24T14:58:08.000Z:

Right, one could do it with the actual tag. But, as I said, I have valid reasons for NOT wanting to have it be part of embedded tags (that's one thing I'm very specific about here and I've searched to find a player that DOESN'T embed them, to no avail): I'm using weird genres that I do not want to put in the files themselves (I actually need to fix a lot of the tags to show the "proper" genres for the file)--the "genres" are as much of a category as anything else (and specific to me--no one else is going to have the exact same definition of a "relaxing" song), I'd like to add some files from a seeding torrent and cannot edit the embedded tags there at all or it will fail the hash, and some players don't handle multiple genres, so having a feature that could make files buggy in a different player is not a plus in my book.

I can't visually picture the idea for that paned browser with saved filters in each pane but it sounds neat!

lazka commented 9 years ago

Comment #8 originally posted by nick.boultbee on 2013-07-31T19:34:55.000Z:

See also Issue #809.

lazka commented 9 years ago

Comment #9 originally posted by gardnermj on 2013-11-12T06:56:24.000Z:

Regarding the idea of non-embedded metadata: on the one hand, there is already some metadata QL keeps outside of tags if you configure it that way (play count, etc.) and theoretically this could be extended to support arbitrary additional metadata. On the other hand, yours is a pretty specific use case (seeding torrents) and I doubt it's worth the extra complexity.

Have you considered just keeping two copies of the music files? That's what I do for anything I want to seed, since I never like the way other people have tagged things. Disk space is cheap, and there are also filesystems like ZFS and btrfs that support data deduplication, which should make this very cheap in terms of disk space.

lazka commented 9 years ago

Comment #10 originally posted by destinyjwoods on 2013-11-12T08:12:27.000Z:

True, I could do this with the files I've downloaded--though I'm running out of space on the one drive and would need to do some transfer/replacement. But for the rest of my music, seeding torrents isn't so much the issue--any torrent I create, I put a copy of the files or folder in a specific subfolder, so I'm never seeding from my actual music tracks. It's the fact that I may choose to share the files later that is the problem. I can't just assume "oh, I'm never going to share these files" because I might end up doing so. On the other hand, it'd be ridiculous to assume I would someday share every one of the several hundred GIGS of music files that I have, and thereby want to duplicate them all on a hdd somewhere, because that would also be quite false. Even if it's just a "let's share this one mp3 or two with my friend" scenario, which does happen frequently, my friend does not necessarily see the same song as "relaxing" as I do, and I have some other odd ways of marking things (such as having a specific term for any song with any sort of drums or noticeable beat) that would be a little weird. I'd like to be able to pass on a cleanly tagged file without having to redo a copy of it each time--and still have the program handle my own custom "tags". I can't imagine that I'm the only person who's ever wished this, either.

Either way, having to hand-enter every tag by typing is a surefire way to make the feature near-unusable. I have far too many tracks for that! (I don't think I'm alone there, either--who wants to spend hours typing in three genres per track times hundreds of tracks, let alone thousands?) A checkbox method is almost essential to make it even usable for most people.

lazka commented 9 years ago

Comment #11 originally posted by destinyjwoods on 2013-11-12T08:17:21.000Z:

This is what I had come up with some years back as an outline of what I was thinking of, long before I'd heard of QL. While some of the function is specific to how I envisioned that program (and unnecessary given some of the neat features of QL), other functions are described accurately enough, I hope, for the reader to understand how the idea of them could be adapted to QL--and where QL might need extra features to make it capable of the same functions.

lazka commented 9 years ago

Comment #12 originally posted by spxxxk on 2013-11-12T13:27:11.000Z:

Internal tags would be bound to the track filename, right ? Meaning moving the file results in tag loss. If I'm not wrong then why not use playlists ? It's not checkbox but it's 2 clicks away.

Still a big fan of the new input UI idea.

lazka commented 9 years ago

Comment #13 originally posted by destinyjwoods on 2013-11-12T16:03:09.000Z:

"Internal tags would be bound to the track filename, right ? Meaning moving the file results in tag loss."

True, the way QL is set up might make that difficult. The player I had envisioned long ago would allow one to "re-find" a file that you had moved or changed the file path, etc. (because the file was stored in the database in a way that didn't require a fresh scan of all the files on the hdd). Not sure how that's reconcilable with the current scan method.

I'm not fond of any method of entering files into a program by scanning a broad folder, just because I'd have to have two separate folders and only have the program scan the "organized" folder--like I move them in only when the filename is absolutely perfect (and hope I didn't make a goof in the filename somehow), and then spend the time getting tags right and all, so I don't end up with a million files with horrendous tags in the database (which is currently the case if I have QL scan all my music folders). But it's at least doable with this idea as-is, as long as the filename is settled on before importing (and I don't mind waiting for it to scan however many folders each time it launches up).

urielz commented 7 years ago

There's a couple of neat ideas in this thread which I think should be leveraged to their own threads, specifically:

A quick search didn't show any open issues related to these. I'll open these if no one confirms that they already exist.