-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Extra fields from MusicBrainz (missing fields) #1547
Comments
I'm for it! Specifically, this won't be too onerous if we take this tactic:
See also #506. |
This comment has been minimized.
This comment has been minimized.
1 similar comment
This comment has been minimized.
This comment has been minimized.
@sampsyo, |
Hey again, @anshuman73! You're right; this one is a bit more involved than last time. Let's start this way. Try prototyping replacements for the >>> info = TrackInfo(some_field=12)
>>> info.some_other_field = 50 Then, once that's working, we'll want to revisit the Sound good? Let me know if you have any questions. |
@sampsyo |
Yep, you totally got it! As you said, the first step is to get rid of all the built-in fields and just let any field work on those classes. The easiest way might be to make those classes inherit from |
Ahh this SO link is truly magic ! |
Yes, exactly. And for backwards compatibility, |
Is anyone willing to do this? Else I can give it a try |
Ok first question: I have a fork of beets but it already has a pending pull request, so if I make a new branch it will have the commits of this pull request (#2563). How can I get a new fork or a clean branch that only contains the 'real' beets? |
If I just take my fork and make a new branch, the branch will start as a copy of my master branch, which is not exactly beets (20 more commits). |
@dosoe If I'm understanding correctly, you want to update your fork to have the latest from the master repository. This document should help: https://help.github.com/articles/syncing-a-fork/ You should probably create a second branch in order to do this work, so once you have the
Then you can push that |
Ok I finally got it going, thanks. |
Now how is this supposed to work? From the upper description I get that we want to start it by changing the
What do we want to do? Do we keep it like this and add a
? |
What holds us back from just making a copy-pasting this code: http://stackoverflow.com/a/32107024 to replace |
and in |
Here is a first try (that doesn't work) as a work base: #2650 |
I would suggest to continue the discussion there. |
Hi! On #2650 I started working on it, but there is a recurrent problem: I am trying to transform the |
Good question. I think the right solution is probably to make the def __hash__(self):
return object.__hash__(self) That would preserve identity-based hashing instead of contents-based hashing as described in this relevant-seeming SO answer. Perhaps the cleaner thing to do, however, would be to avoid making |
I did it because you looked for something like https://stackoverflow.com/questions/2352181/how-to-use-a-dot-to-access-members-of-dictionary/32107024#32107024 , so I just copy-pasted it. That's why we end up with a |
I tried to make |
Hello, I still have to make apply_metadata generic. |
Updated calls to TrackInfo and AlbmInfo using keywords only arguments, implemented reduce methods for TrackInfo and AlbumInfo for copy.deepcopy (use also track_id and album_id) beetbox#1547
Is the mb_trackid a good choice? Does every track have one or do you add tracks by hand or take metadata from let's say discogs without putting a mb_trackid on it? |
I have some tracks I can't identify with MB so I'm thinking about setting the metadata by hand, but these tracks won't have a |
Good point. I assumed every track is identified with MB. Shouldn't you add the release on MusicBrainz, and then identify from MB, in that case? I think the software should entrust everything regarding data to MB, and just dump data from it, with as less reprocessing as possible. Else, a fallback id can be used, depending on the source. |
It's what I'm doing, but for some of my music I can't trace back which release it is, and I don't expect everyone to do it. I think unsing |
The first part has been dealt with, do you have an idea on how you want the next point to be like? I'm afraid it's not gonna be straightforward, we will need to add plumbing (for example the 'recording engineer' is called 'recording' in the MB API), but at least for instruments and engineers it should be rather straightforward to implement. |
That second bullet, fortunately, is just about refactoring the |
I'm trying right now to implement automatic fetching of all artists associated with a recording, but I'm running into a problem. Let's say we retrieve all artists and create appropriate tags (like |
Yeah, that seems fairly tricky! Fortunately, it is possible to remove flexible attributes—just doing Of course, figuring out the right policy for when to delete fields is the hard part. In the hypothetical plugin that gets a bunch of extra artists for a track, it could be a policy that, every time the plugin runs, it deletes all of those fields that it can populate and re-fills them. |
Well, if you want to do it in a plugin, it's easy (actually, did we need all this work for plugins? Don't flexible attributes already work this way?). If you want to have flexible attributes in beets core, then we should find out how, where and when to clean up tags in the core. One idea could be to impose tags added by plugins to be somehow recognizable, to single them out. That would force us to overhaul all plugins to adapt their tag names, of course, and would mean trouble in the way of backwards-compatibility. |
Yanno, for all that beets prides itself in being the tagger for OCD music lovers, i'm a little surprised at the info it doesn't pull from musicbrainz.
It doesn't pull performer, composer, lyricist, conductor, engineer or producer tags. In short, why not just pull ALL the tags that it can from musicbrainz (see here https://picard.musicbrainz.org/docs/mappings/ ) and apply it to the file and database for searching. Why wouldn't i want to find all the various tracks that Jon Coltrane plays on even when the album title or group doesn't bare his name?
I'm just learning Python now, so should i take a shot at this? Should it be a plugin, or should i not bother because it's on the roadmap?
The text was updated successfully, but these errors were encountered: