MusicBrainz NGS + AcoustId Tagger [MM3&4] v1.25 2012-01-29

Download and get help for different MediaMonkey for Windows 4 Addons.

Moderators: Peke, Gurus

bluenote
Posts: 2
Joined: Mon Mar 26, 2012 7:11 pm

Re: MusicBrainz NGS + AcoustId Tagger [MM3&4] v1.25 2012-01-

Post by bluenote »

Hi

Great addon, thank you!
I seem to want to use this in a way that it is not designed.
Or, at least, my understanding of how it should be used is very weak.

I have some mislabeled, one-off, songs containing in many cases wrong tags,
from previous experiments with auto tagging.

What I would like to do is select whole swathes of my library and run them through fingerprinting
and write new tags based on that.

It seems like this is designed to be run on a whole album though, because if I select multiples from different artists,
it seems to force the tracks into the resulting "holes".

Can I somehow use or configure this differently to do what I want? JUST use fingerprint and give me a best guess for each without using other data like
filename , or other files contained in the selection?

thanks!
DiThomasso

Re: MusicBrainz NGS + AcoustId Tagger [MM3&4] v1.25 2012-01-

Post by DiThomasso »

Hi there,

I would like to know the same what bluenote asked. I also messed up my library with auto tagging. So i would like to know what would be the best/easiest way to fix the tags again. Thanks in advance.

peace.
nohitter151
Posts: 23640
Joined: Wed Aug 09, 2006 10:20 am
Location: NJ, USA
Contact:

Re: MusicBrainz NGS + AcoustId Tagger [MM3&4] v1.25 2012-01-

Post by nohitter151 »

Trixmoto made an addon "musicip tagger", but I believe it's not working anymore. That was the only "automatic" tagger that MM ever had.
MediaMonkey user since 2006
Need help? Got a suggestion? Can't find something?

Please no PMs in reply to a post. Just reply in the thread.
booblers
Posts: 97
Joined: Sat Sep 27, 2008 6:57 pm

Re: MusicBrainz NGS + AcoustId Tagger [MM3&4] v1.25 2012-01-

Post by booblers »

Both AcoustID and EchoNest ENFP (not echoprint) are capable of doing the same thing. This script does not provide that functionality. Someone would have to write a new script for that. Shouldn't be hard.
MMuser2011
Posts: 1308
Joined: Mon Oct 17, 2011 8:28 am
Location: Central Europe

Re: MusicBrainz NGS + AcoustId Tagger [MM3&4] v1.25 2012-01-

Post by MMuser2011 »

@bluenote + DiThomasso:
Maybe you should have a look at Musicbrainz Picard. This standalone tool has an integrated fingerprinter (AcoustID) too.
But also Picard is not a 'do-everything-for-me-automagically-and-100%-perfect'-thing. It can recognize a track if the fingerprint of exactly the same track was submitted before (from another user) to Acoustid. Maybe you are lucky, maybe not.

Just give it a try - and let us know, how it works for you.
Magic Nodes v4.3.3 (2018-10-03) last free version SQL Viewer v2.4 (2009-10-25)
ExternalTools v1.4 (2011-05-09) iTunesMonkey 1.0 + Acoustid
Calculate Cover Size v1.7 (2012-10-23) RegExp Find & Replace v4.4.9 (2018-10-03) last free version
MMuser2011
Posts: 1308
Joined: Mon Oct 17, 2011 8:28 am
Location: Central Europe

Re: MusicBrainz NGS + AcoustId Tagger [MM3] v1.0 2012-01-24

Post by MMuser2011 »

MMuser2011 wrote:...Is it possible to get this standalone fingerprinter? And/Or some instructions how to use it?
(I assume, it will a) create the fingerprint for every song and b) write this 'hash' into the track? Does it run from commandline without MM?)
I finally found it: http://www.mediamonkey.com/forum/viewto ... =2&t=64192 :wink:
Magic Nodes v4.3.3 (2018-10-03) last free version SQL Viewer v2.4 (2009-10-25)
ExternalTools v1.4 (2011-05-09) iTunesMonkey 1.0 + Acoustid
Calculate Cover Size v1.7 (2012-10-23) RegExp Find & Replace v4.4.9 (2018-10-03) last free version
MusicBrainz NGS fan

Re: MusicBrainz NGS + AcoustId Tagger [MM3&4] v1.25 2012-01-

Post by MusicBrainz NGS fan »

I have also problem with Overflow expcetion on line 4176 and I found that there is problem with decimal separator if your default locale is not en-US. I'm using sk-SK and decimal separator for this culture is comma. then munkresme.xml looks like:

Code: Select all

<matrix><row><col>0,166666666666667</col></row></matrix>
and when munkres.exe is trying to proceed this xml, is throwing an error:

Code: Select all

ValueError: invalid literal for float(): 0,166666666666667
in this case, munkresindexes.xml stays empty and this causes error mentioned in previous post.

Code: Select all

Set objMunkresIndexes = objMunkresXML.selectNodes("/matrix/index")
this line returns empty array and next if statement will be true. foreach loop inside will be never executed and cost and i variables will stay initialized to zero.
logme call on line 4176 throws an exception because it tries to divide by zero:

Code: Select all

logme "cost: " & Round(cost / i, 6)
to fix this I made some changes to the function order_items (marked as CUSTOM CODE)

Code: Select all

Function order_items(items, trackinfo):
    '"""Orders the items based on how they match some canonical track
    'information. Returns a list of Items whose length is equal to the
    'length of ``trackinfo``. This always produces a result if the
    'numbers of items is at most the number of TrackInfo objects
    '(otherwise, returns None). In the case of a partial match, the
    'returned list may contain None in some positions.
    '"""
    '# Make sure lengths match: If there is less items, it might just be that
    '# there is some tracks missing.
    If items.Count > trackinfo.Count Then
			Set order_items = Nothing
			MunkresCost = 200
			Exit Function
		End If

		'to compare the dicts in case of issues:
'		For j = 0 To items.Count - 1
'			logme items.Item(j).Title & " - " & items.Item(j).TrackOrderStr
'		Next
'
'		For j = 0 To trackinfo.Count - 1
'			logme trackinfo.Item(j).Title & " - " & trackinfo.Item(j).TrackOrderStr
'		Next
	'CUSTOM CODE START
	Dim locale
	locale = GetLocale
	SetLocale("en-US")
	'CUSTOM CODE END

    '# Construct the cost matrix.
    j = 0
    Dim costs : Set costs = CreateObject("Scripting.Dictionary")
    xml = "<matrix>"
    For j = 0 To items.Count - 1
    	Set cur_item = items.Item(j)
    	'Set cur_item = items.Item(key)
    	xml = xml & "<row>"
      For i = 0 To trackinfo.Count - 1
      'For i, canon_item in enumerate(trackinfo):
       	xml = xml & "<col>" & track_distance(cur_item, trackinfo.Item(i), trackinfo.Item(i).TrackOrderStr, False) & "</col>"
       	SDB.ProcessMessages
        'row.append(track_distance(cur_item, canon_item, i+1))
      Next
      'costs.append(row)
    	xml = xml & "</row>"
    Next
    xml = xml & "</matrix>"

    Dim objFSO, logf
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Dim tmpXMLPath: tmpXMLPath = SDB.ScriptsPath & sScriptDir & "munkresme.xml"
    Set logf = objFSO.OpenTextFile(tmpXMLPath, 2, True)
    logf.WriteLine xml
		logf.Close
		Set logf = Nothing
		Set objFSO = Nothing
    
    '# Find a minimum-cost bipartite matching.
    'matching = Munkres().compute(costs)
    Set objMunkresXML = Munkres()

    '# Order items based on the matching.
    'ordered_items = [None]*len(trackinfo)
    'for cur_idx, canon_idx in matching:
    '    ordered_items[canon_idx] = items[cur_idx]
    'return ordered_items
    Set objMunkresIndexes = objMunkresXML.selectNodes("/matrix/index")
    If Not objMunkresIndexes Is Nothing Then
			
			'create a blank dict with the correct size
	    Dim ordered_items : Set ordered_items = CreateObject("Scripting.Dictionary")
	    For i = 0 To trackinfo.Count
	    	Set objTemp = Nothing
	    	ordered_items.Add i, objTemp
	    Next

			cost = 0.0
			i = 0
    	For Each mindex in objMunkresIndexes
    		i = i +1
    		Set nodeRow = mindex.selectSingleNode("row")
    		Set nodeCol = mindex.selectSingleNode("col")
    		Set nodeCost = mindex.selectSingleNode("cost")
    		rowindex = CInt(nodeRow.Text)
    		colindex = CInt(nodeCol.Text)
    		'logme nodeCost.Text
    		cost = cost + nodeCost.Text
    		'Set ordered_items.Item(colindex) = items.Item(rowindex)			'rowindex = index in NewTracks?  colindex= index in mbitems?
    		ordered_items.Item(rowindex) = colindex
    		'logme mindex.selectSingleNode("row").Text & ", " & mindex.selectSingleNode("col").Text
    	Next
		'CUSTOM CODE START
		If i > 0 Then
			logme "cost: " & Round(cost / i, 6)
			MunkresCost = Round(cost / i, 4)
			SetLocale(locale)
			Set order_items = ordered_items
		Else
			MunkresCost = 100
			SetLocale(locale)
			Set order_items = Nothing
		End If    
		'CUSTOM CODE END
    Else
    	MunkresCost = 100
		'CUSTOM CODE START
		SetLocale(locale)
		'CUSTOM CODE END
    	Set order_items = Nothing
    End If    
End Function
hope it helps.
bakker_be
Posts: 25
Joined: Fri Apr 16, 2010 8:06 am

Re: MusicBrainz NGS + AcoustId Tagger [MM3&4] v1.25 2012-01-

Post by bakker_be »

Brilliant find, I'll try it tonight, my local isn't EN-US either, so it could easily be the cause/solution!
Thanks!
bakker_be
Posts: 25
Joined: Fri Apr 16, 2010 8:06 am

Re: MusicBrainz NGS + AcoustId Tagger [MM3&4] v1.25 2012-01-

Post by bakker_be »

It's working for me now (v1.25 on W7 32-bit + Windows Server 2008 R2 64-bit, latest Mediamonkey 4 build).
@booblers: could you release a v1.26 incorporating this change please?
BlueDragon
Posts: 63
Joined: Sat Jan 09, 2010 7:23 pm

Re: MusicBrainz NGS + AcoustId Tagger [MM3&4] v1.25 2012-01-

Post by BlueDragon »

I use MM4 portable with de-DE and had the same error until using the fix from "MusicBrainz NGS fan".


Thanks for both the addon and the fix :D
steve1977

Re: MusicBrainz NGS + AcoustId Tagger [MM3&4] v1.25 2012-01-

Post by steve1977 »

Just found out about this script and it appears to be exactly what I am looking for. I am currently using MB Picard, but really want to switch to some other tagger. Will this allow me to do the following:

1) Provide all the functionality of MB Picard
2) In addition, also allow to tag albums that are not in MB database (but on amazon, last.fm or others)
3) In addition, allow to add cover art from other sources besides MB
4) In addition, allow to add genre taggs
5) Be more stable than Picard


Thanks a lot in advance!!! This really looks promising and may allow me to finally stop using Picard...
ripndip
Posts: 38
Joined: Fri Oct 02, 2009 12:54 pm

Re: MusicBrainz NGS + AcoustId Tagger [MM3&4] v1.25 2012-01-

Post by ripndip »

steve1977 wrote:Just found out about this script and it appears to be exactly what I am looking for. I am currently using MB Picard, but really want to switch to some other tagger. Will this allow me to do the following:

1) Provide all the functionality of MB Picard
2) In addition, also allow to tag albums that are not in MB database (but on amazon, last.fm or others)
3) In addition, allow to add cover art from other sources besides MB
4) In addition, allow to add genre taggs
5) Be more stable than Picard


Thanks a lot in advance!!! This really looks promising and may allow me to finally stop using Picard...

I would like to know the same. It's a shame MusicBrainz/IP are no longer working/supported. They were great additions and MUCH better than Amazon. MM is imcomplete when it comes to tagging actually. I would be willing to donate of course to one solid fingerprint tagging solution.


Mediamonkey has done so much, many amazing things, but this functionality was here with 3rd party support, but Im guessing the sites are removing capabilities?


This is from the main page http://www.mediamonkey.com/information/free/#lookup

Code: Select all

Identify Tracks 

[list=]Automatically identify movies and tracks that are missing information, whose tags are not synchronized, or that are duplicated elsewhere.

Fix Tags with Automatic Lookup and Tagging of album art and other information from Amazon.

Lookup CD information on Freedb or via CD-TEXT, and find missing track details through music-related sites such as Allmusic.

If you have a large media collection, MediaMonkey will help you update your tags quickly and accurately.[/list]

But Amazon doesn't tag genres and further doesn't have a ip/fingerprint system.
With Lastfm, Allmusic, FreeDB, MusicBrainz, ...now AcoustID, there has to be away for us to provide our tag info to a consolidated database. I hate tagging my files to the tee but not sending that info back anywhere to correct future errors.

WE NEED A SOLID SOLUTION!
ripndip
Posts: 38
Joined: Fri Oct 02, 2009 12:54 pm

Re: MusicBrainz NGS + AcoustId Tagger [MM3&4] v1.25 2012-01-

Post by ripndip »

nohitter151 wrote:Trixmoto made an addon "musicip tagger", but I believe it's not working anymore. That was the only "automatic" tagger that MM ever had.
I cant say the script is completely dead but as of 5/19/12 on MM4 I havent gotten any of my files to retrieve a tag.

I either get 100% Success with no updated tag or ".m4a - unanalyzable!", which I'm guessing doesn't work with any format but .mp3? Sometimes i get pending! which gives me hope. But all in all it's not a successful addon.
mhendu
Posts: 100
Joined: Thu Jan 12, 2006 11:18 am

Re: MusicBrainz NGS + AcoustId Tagger [MM3&4] v1.25 2012-01-

Post by mhendu »

Fantastic as this script is, would be great if it could work in batch mode, to echo some of the other comments here.
bakker_be
Posts: 25
Joined: Fri Apr 16, 2010 8:06 am

Re: MusicBrainz NGS + AcoustId Tagger [MM3&4] v1.25 2012-01-

Post by bakker_be »

ripndip wrote:
nohitter151 wrote:Trixmoto made an addon "musicip tagger", but I believe it's not working anymore. That was the only "automatic" tagger that MM ever had.
I cant say the script is completely dead but as of 5/19/12 on MM4 I havent gotten any of my files to retrieve a tag.

I either get 100% Success with no updated tag or ".m4a - unanalyzable!", which I'm guessing doesn't work with any format but .mp3? Sometimes i get pending! which gives me hope. But all in all it's not a successful addon.
m4a is indeed unsupported. If you'd ever used the MusicIP Mixer (their own frontend application for the service), you'd know that. wma is problematic at best, but I see no issues at all with mp3 & flac (up to 24bit/192kHz for flac). I also see no issues with analyzing very recent albums (new releases from march 2012).
Post Reply