Download link: http://www.mediafire.com/?p9y6drehuwbmz33
I only use MM3. Lowlander reports it works with MM4.
I've made quite a few changes, fixed some bugs, and added some new functionality which I will outline below. More details will be filled in when I remember them. This is an early release and I'm looking for testing/feedback. There are some caveats and warnings that will be listed in bold below read them!
Updated to take advantage of the NGS schema.
Removed the deprecated MusicIP functionality and replaced it with AcoustId.
Added a matching algorithm (Munkres) that is significantly more robust than the default SmartUpdateTracks - taken from beets ( http://beets.radbox.org/ )
Added the ability to read and write custom tags (mbid de facto standard tags, puid tags, acoustid tags, and a limited list of my personal custom tags)
Subset of Minor Changes:
Added Disc# (MB NGS Media Position)
Option to disable fingerprinting
Album disambiguation options
Artist & AlbumArtist join string options ("Foo;Bar" or the MusicBrainz joinstring ie "Foo & Bar")
Fixed genres - added option to merge with existing genre tags
Options to enforce track count & track duration when matching without the Munkres algorithm
Added option to move (feat.) joinstrings and artist-credits to Title or Artist
Added the ability to re-enter the search with a given type (added dropdown in the results window - based on selected Seed song)
There are surely some things I'm forgetting so the list might change. Originally this had much more functionality but the AMG and AAE parts had to be stripped out because neither website likes their data used in this way.
writetags.exe is a helper application (used only for the custom tags listed below) written in Python that uses the Mutagen and beets/mediafile.py libraries. These libraries do not write ID3v2.3 tags - they write ID3v2.4 tags. Windows explorer cannot understand this standard specification. This means that whenever the script is writing to the subset of custom tags it uses that the track is being converted from ID3v2.3 (Mediamonkey) -> ID3v2.4 (script/writetag.exe) -> ID3v2.3 (with a Mediamonkey re-write). I have not noticed any data loss in this process but I do not use every possible ID3v2.3 tag. Your mileage may vary. The tagger and the fingerprinter should both work with nearly every audio format - though I have not tested .wma for writing tags. If you use this script you agree not to hold me responsible for any data loss that may occur. I suggest you test the script on a small subset of files and go slowly while it is still new. Any tag that MM recognizes it is writing itself - you can disable writetag if you don't want the Musicbrainz identifiers written to their appropriate "custom" tags. Those of you who are not updating tags when the MM database changes should note that this script will ignore that behavior - after it finishes writing custom tags MM will come back and write whatever tags you have in the MM db to the file.
Usage Notes: AcoustId
AcoustId is a new open source fingerprinting framework that is developed by Lukáš Lalinský, one of the lead developers of MusicBrainz's Picard application. fpcalc.exe is the Win32 binary that will generate the fingerprints. If the version bundled doesn't work then check here for the "chromaprint binary" that will work for you. There is detailed information available on how it works on his blog/website. There is one key thing to note: you can help the database grow and become more accurate. This script will automatically submit any unknown metadata to the server if you enter a "user API key" into the settings page. The ability to fingerprint a file is not dependent on the user API key but the submission of unknown tracks to the server *is*. Lukáš has taken pains to provide an anonymous way to make these submissions. If you sign up for an API key using an "OpenID Account" (things like Google, Yahoo, etc all qualify) then he receives an anonymous hash which is "associated" with your data but your username and etc are not. This lets him weed out any malicious submissions while offering privacy to people who submit data. It takes 30 seconds to get an API key. Goto this link and sign in with any open ID (or a MusicBrainz account - but those are not anonymous). Once signed in click on "Get API Key" - enter this key into the settings in the script and you are good to go for submission and the world will be a better place.
AcoustId can be turned off at any time from the settings page. The data is written to SQL tables for use in other applications (scripters can look them up) AND to media tags provided "writetag" is also enabled (which it is by default). By default Acoustid will attempt to fingerprint every selected file. You can "limit" the fingerprinting in the options and it will function like the old script with MusicIP (it will still fingerprint 2 tracks if available to cut down on the number of result albums).
Usage Notes: Writetag
If enabled writetag can save the following information to the following "tags" using the community de facto standard tag mappings:
- Code: Select all
'mb_trackid', 'mb_albumid', 'mb_artistid', 'mb_albumartistid', 'mb_albumstatus', 'mb_albumtype', 'mb_discid', 'mb_releasegroupid', 'mb_workid', 'mb_originalreleaseid', 'musicip_puid', 'musicip_fingerprint', 'acoustid_id', 'acoustid_fingerprint', 'acoustid_duration'
It does this using a simple XML interface and it will only read/write the list above plus a few others I use having to do with rovi/amg. Because it's using XML to go back and forth there is a certain disk access penalty and the reading/writing is generally slower than it should be. Unfortunately there is no way that I can see to disable the "Close" button in the AutoTag window - but the only way to run writetags.exe and save the extra information is in an event that must fire after you push the AutoTag button. The long and the sort of it is this: do not close the autotag window until you see that MM no longer has an active process in the status bar - otherwise you will be looking at an error and some tags will not be written. Annoying, but it's the best that can be done with an application that doesn't do this natively. The format to read is: "writetag.exe read <mediafile>" - it will spit out xml that corresponds to the tags it recognizes. "writetag.exe write <mediafile> <xmlfile>" will write the recognized tags in the xml file to the mediafile if possible. Remember that the resulting file will be in ID3v2.4 so if you are using writetag.exe on your own you might need to find a way to get it back to ID3v2.3 if you want windows explorer to show the tags. If you're just using this script it updates the tags back to ID3v2.3 automatically.
Usage Notes: Munkres
The default matching in Mediamonkey is terrible. I've shamelessly stolen a better solution from beets that will take into account Title, Artist, Track#, Duration and use a weighting system and a string distance scoring system combined with the Munkres algorithm to find the best possible match given 2 sets of data (set 1 is the MusicBrainz response, set 2 is the list of tracks you highlighted to tag). This is the other executable bundled and it works similarly with an xml interface. By default Munkres is enabled and it should be relatively low key except that there is a new value and checkbox in the results window. If the master checkbox is on in the settings page you can toggle the Munkres matching on and off from each result screen to see what happens. If you aren't into numbers you can ignore the score and just pay attention to the "Confidence" value. If you are into numbers you can play around with the weights at the top of the script file to suit your liking. The Munkres algorithm takes a huge possible map of data and tries to find the best solution. If you search for 20 tracks and get a response from musicbrainz that is 20 tracks there are 20! (that's 20 factorial) operations to find the best match. That is 2,432,902,008,176,640,000 operations. That is a very large number. The Munkres algorithm cuts that down significantly - BUT THERE IS STILL A COST. 20-30 tracks should be no problem on most machines but if you select hundreds or thousands of tracks with Munkres on you will be in for some trouble (O(n^3) for those of you who care). Anyway: just don't be stupid and select hundreds of tracks and you will be fine.
Usage Notes: General Search
In general the script is best used on albums - and, insofar as possible, complete ones. The Musicbrainz tags are being written when you press AutoTag - and these are assumed to be canonical - this means that the next time you search if there is an embedded tag it will be used as the basis for the search. This is, in my view, very desirable behavior. But it does mean that you want to be sure when you hit AutoTag. The script is "release-centered" and while it can probably find 1-off and partially complete tracks you will find that the matching algorithms and etc work less well in those situations. They still work - but not as well.
The code is a mess. Commented blocks all over the places and etc. This is an early release and I used someone else's already messy code as a framework so it's far from clean. Nor is it particularly optimized. It has also had a few thousand lines stripped out so I can make it public without being sued by AMG and etc. I don't use this version at all so motivation is low but when I'm bored enough I might clean it up.
-Various bug fixes
-more options to sort results list
-Various bug fixes
-Additional string distance algorithm
v1.1 - 2012-01-26
-Fixed Title checkbox to properly maintain original title - this makes Munkres matching mandatory - no idea what it will do if you uncheck munkres (it should just skip over any track-specific tagging options unless the titles are equivalent except for case)
-Added Work Relationships (Artists only) - These appear in "Original Lyricist"
-Removed option to place "lyricist" in Original Lyricist tag