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

Download and get help for different MediaMonkey Addons.

Moderators: Peke, Gurus

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 » Wed Nov 07, 2012 6:39 am

bakker_be wrote:Hi there,
all of a sudden, after months of flawless functioning this has started to act up. I get a message stating:

Code: Select all

Error #457 - This key is already associated with an element of this collection
this happens at line 1666, column 3.
OS: Win Server 2008 R2 (64-bit), fully up to date
MM: Gold
Update: it must have been something at either the Acoustid or the MusicBrainz end, as it's gone, tested it with the exact same albums that gave me the error.

Posts: 4
Joined: Thu Oct 18, 2012 4:10 am

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

Post by xandora » Sun Nov 11, 2012 6:38 pm

I'm getting an issue when trying to apply the suggested tags using the Auto-Tag button.


I'm using Windows 8, and this is the first time I've tried to tag an album since upgrading. Has anyone else run into this issue? Did you fix it?

EDIT: The issue is pointing to this line here:

Code: Select all

Line 3852:	  writetagscmd = "%comspec% /c " & writetagsexe & " write """ & fso.GetFile(mp3).ShortPath & """ """ &  tmpXMLPath & """"


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

Post by karanits » Wed Nov 14, 2012 4:08 am

Hey i am getting error while generation AcoustID

Generating AcoustID Fingerprint for: <song path>... Failed

i know this has been asked before. I am using MM4, portable installation and on win 8. can anybody help. Can a portable installation have an effect on this script?
I have already tried replacing fpcalc.exe with chromaprint fpcalc.exe ... didnt work


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

Post by karanits » Wed Nov 14, 2012 8:17 am

solution found for
Generating AcoustID Fingerprint for: <song path>... Failed

MM is installed in a directory which contains spaces. so putting fpcalc.exe in root of drive and hard-coding the location in the script corrected the problem.


Code: Select all

Dim fpcalcexe: fpcalcexe = fso.GetFile(SDB.ScriptsPath & sScriptDir & "fpcalc.exe").ShortPath
is changed to

Code: Select all

Dim fpcalcexe: fpcalcexe = fso.GetFile("d:\fpcalc.exe").ShortPath

Posts: 1
Joined: Thu Jan 10, 2013 12:26 pm

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

Post by RetroSonic » Thu Jan 10, 2013 12:30 pm

MusicBrainz NGS fan wrote: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

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
	Dim locale
	locale = GetLocale

    '# 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>"
        'row.append(track_distance(cur_item, canon_item, i+1))
    	xml = xml & "</row>"
    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
		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

			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
		If i > 0 Then
			logme "cost: " & Round(cost / i, 6)
			MunkresCost = Round(cost / i, 4)
			Set order_items = ordered_items
			MunkresCost = 100
			Set order_items = Nothing
		End If    
    	MunkresCost = 100
    	Set order_items = Nothing
    End If    
End Function
hope it helps.
Many thanks for this. It works like a charm...


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

Post by Ekaf » Mon Jul 22, 2013 10:30 pm

I am probably missing something obvious here... But how can I use this amazing(!) addon to tag my songs with the composer field?! It frequently finds a match that shows me the composers (even labeled as composers:) but then does not tag them as such (all other fields seem to tag fine).

It may be tagging the composers into 'original lyricist'... Is there a way to just have 'composers' tagged as such? Ideally it would be great to also have other fields such as lyricist and writer onto composer.

If it is not possible to tag composers with this addon, are there others that will 'tag' onto the composer field?! How do others do it?

Posts: 21
Joined: Thu Oct 02, 2014 8:57 am

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

Post by wwootton1 » Thu Oct 02, 2014 9:02 am

Just found and started using this awesome script. The tgread is quite old. Just wondering if there is a more recent version or more current development on this I'm not finding.

Posts: 17
Joined: Sun Apr 10, 2011 7:18 am

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

Post by Plotino » Mon Oct 26, 2015 3:53 am


please, someone can tell me how apply the CUSTOM CODE?

Posts: 13302
Joined: Tue Jun 10, 2003 7:21 pm
Location: Serbia

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

Post by Peke » Wed Oct 28, 2015 4:45 pm

Just follow instructions above.
Best regards,
MediaMonkey Team lead QA/Tech Support guru
Admin of Free MediaMonkey addon Site HappyMonkeying
How to add SCREENSHOTS to forum

Posts: 34
Joined: Tue Sep 28, 2010 3:09 pm

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

Post by oeyoeve » Sat Apr 02, 2016 2:34 pm

I removed the MusicBrainz Tagger [MM3] v2.0 2008-03-29 and installed the NGS Tagger instead, but the result was depressing....
All it does is to add a number of fingerprintID's to my files, then it reports that no album was found in MB (!?)
I am just testing this on a few selected albums, all of which was found in MB using MusicBrainz Tagger [MM3] v2.0 2008-03-29 and Picard and FooBar2k, but fails with the NGS tagger.

I must be doing something wrong since everybody else seems so terribly happy with it....?
First of all, I do not see the point in having these fingerprints added to my tags. What I want is to have the basic MBID's added.
Then I read in the forum that this is impossible with MM4 (?). Well, MusicBrainz Tagger [MM3] v2.0 2008-03-29 did it perfectly well, so that cannot be true.

Can someone please lead me to the light... ?

Post Reply