MusicIP Tagger 1.5 - Updated 18/07/2010

Download and get help for different MediaMonkey Addons.

Moderators: Peke, Gurus

MusicIP Tagger 1.5 - Updated 18/07/2010

Postby trixmoto on Thu Jul 10, 2008 11:00 am

This is my first search type script and will therefore not be available in MM2. It is however rather different from other search scripts, in the sense that it does not search by album. It uses the MusicIP system to acoustically analyse each track to create a PUID and then query's the MusicIP database to retrieve title, artist, release year and genre. This script will therefore process any number of tracks from any album.

Powered by Image

As always there is an installation package available on my website. Let me know what you think!

Code: Select all
'
' MediaMonkey Script
'
' NAME: MusicIPTagger 1.5
'
' AUTHOR: trixmoto (http://trixmoto.net)
' DATE : 18/07/2010
'
' INSTALL: Copy to Scripts\MIPT directory along with the images and components, then add the following to Scripts.ini
'          Don't forget to remove comments (') and set the order appropriately
'
' NOTE: This script needs "genpuid.exe", "mipcore.exe" and "libexpat.dll" to perform lookup
'
' Thanks to Aff for all his hard work fixing bugs with this script
'
' [MusicIPTagger]
' FileName=MIPT\MusicIPTagger.vbs
' ProcName=MusicIPTagger
' Order=30
' DisplayName=MusicIP Tagger
' Description=Tag tracks using MusicIP
' Language=VBScript
' ScriptType=3
'
' FIXES: Fixed no data returned from MusicBrainz should not be success
'        Added option to control whether analysis is archived
'        Added Grouping to field option
'

Option Explicit
Dim Debug : Debug = False
Dim UpTtl : UpTtl = True
Dim UpArt : UpArt = True
Dim UpYer : UpYer = True
Dim UpGnr : UpGnr = True
Dim UpAlb : UpAlb = True
Dim UpTrk : UpTrk = True
Dim UpAAr : UpAAr = False
Dim UpOYr : UpOYr = False
Dim UpOAr : UpOAr = False
Dim UpOTt : UpOTt = False
Dim Field : Field = 0  '1-5=Custom# 6=Mood 7=Occasion 8=Quality 9=Tempo 10=Comment 11=Grouping
Dim Prior : Prior = False
Dim Archi : Archi = False

Sub StartSearch(Panel,SearchTerm,SearchArtist,SearchAlbum)
  'default settings
  Dim ini : Set ini = SDB.IniFile
  If ini.StringValue("MusicIPTagger","Debug") = "" Then
    ini.BoolValue("MusicIPTagger","Debug") = Debug
  Else
    Debug = ini.BoolValue("MusicIPTagger","Debug")
  End If 
  If ini.StringValue("MusicIPTagger","UpTtl") = "" Then
    ini.BoolValue("MusicIPTagger","UpTtl") = UpTtl
  End If
  If ini.StringValue("MusicIPTagger","UpArt") = "" Then
    ini.BoolValue("MusicIPTagger","UpArt") = UpArt
  End If         
  If ini.StringValue("MusicIPTagger","UpYer") = "" Then
    ini.BoolValue("MusicIPTagger","UpYer") = UpYer
  End If   
  If ini.StringValue("MusicIPTagger","UpGnr") = "" Then
    ini.BoolValue("MusicIPTagger","UpGnr") = UpGnr
  End If   
  If ini.StringValue("MusicIPTagger","UpAlb") = "" Then
    ini.BoolValue("MusicIPTagger","UpAlb") = UpAlb
  End If   
  If ini.StringValue("MusicIPTagger","UpTrk") = "" Then
    ini.BoolValue("MusicIPTagger","UpTrk") = UpTrk
  End If   
  If ini.StringValue("MusicIPTagger","UpAAr") = "" Then
    ini.BoolValue("MusicIPTagger","UpAAr") = UpAAr
  End If   
  If ini.StringValue("MusicIPTagger","UpOYr") = "" Then
    ini.BoolValue("MusicIPTagger","UpOYr") = UpOYr
  End If   
  If ini.StringValue("MusicIPTagger","UpOAr") = "" Then
    ini.BoolValue("MusicIPTagger","UpOAr") = UpOAr
  End If   
  If ini.StringValue("MusicIPTagger","UpOTt") = "" Then
    ini.BoolValue("MusicIPTagger","UpOTt") = UpOTt
  End If   
  If ini.StringValue("MusicIPTagger","Field") = "" Then
    ini.IntValue("MusicIPTagger","Field") = Field
  End If
  If ini.StringValue("MusicIPTagger","Prior") = "" Then
    ini.BoolValue("MusicIPTagger","Prior") = Prior
  End If
  If ini.StringValue("MusicIPTagger","Archi") = "" Then
    ini.BoolValue("MusicIPTagger","Archi") = Archi
  End If       
 
  'initialise
  If Debug Then
    Call clear()
    Call out("StartSearch(Panel,"""&SearchTerm&""","""&SearchArtist&""","""&SearchAlbum&""")")
  End If
  Dim list : Set list = SDB.SelectedSongList
 
  'check application
  Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
  If Not (fso.FileExists(SDB.ScriptsPath&"MIPT\genpuid.exe")) Then
    If Debug Then Call out("File 'genpuid.exe' missing.")
    Call SDB.MessageBox("MusicIP Tagger: File 'genpuid.exe' is missing - search failed.",mtError,Array(mbOk))
    Exit Sub
  End If
  If Not (fso.FileExists(SDB.ScriptsPath&"MIPT\mipcore.exe")) Then
    If Debug Then Call out("File 'mipcore.exe' missing.")
    Call SDB.MessageBox("MusicIP Tagger: File 'micpcore.exe' is missing - search failed.",mtError,Array(mbOk))
    Exit Sub
  End If
  If Not (fso.FileExists(SDB.ScriptsPath&"MIPT\libexpat.dll")) Then
    If Debug Then Call out("File 'libexpat.dll' missing.")
    Call SDB.MessageBox("MusicIP Tagger: File 'libexpat.dll' is missing - search will be limited.",mtInformation,Array(mbOk))
  End If     
  Dim loc : loc = SDB.TemporaryFolder
  If Right(loc,1) = "\" Then
    loc = loc&"MIPT.xml"
  Else
    loc = loc&"\MIPT.xml"
  End If 
  Dim xml : Set xml = fso.CreateTextFile(loc,True)
  Call xml.Close()
 
  'build panel
  Dim WB : Set WB = SDB.UI.NewActiveX(Panel,"Shell.Explorer")
  WB.Common.Align = 5
  WB.Common.ControlName = "WB"
  WB.Common.BringToFront
 
  'build query data
  Dim QD : Set QD = CreateObject("Scripting.Dictionary")
  QD.Item("cur") = -1
  QD.Item("tot") = 0
  QD.Item("max") = list.Count-1
  QD.Item("img") = "&nbsp;<img src=""file://"&Replace(SDB.ScriptsPath,"\","/")&"MIPT/mipt.gif"" border=""0"" alt=""MusicIP""/>"
  QD.Item("psd") = ""

  'build display
  Dim i : i = 0
  Dim src : src = Replace(SDB.ScriptsPath,"\","/")&"MIPT/mipt.jpg"
  Dim html : html = "<div id=""header"" style=""float:left""><img src=""file://"&src&""" border=""0"" alt=""MusicIP""/></div>"
  html = html&"<div id=""progress"" style=""float:left;font-family:'arial black';"">&nbsp;Progress: <span id=""percent""></span>"
  html = html&"<br />&nbsp;Success: <span id=""success""></span><br />&nbsp;Failure: <span id=""failure""></span></div>"
  html = html&"<div id=""settings"" style=""float:right;""><input type=""button"" value=""Settings"" /></div>"
  If list.Count > 0 Then
    For i = 0 To list.Count-1
      Dim itm : Set itm = list.Item(i)
      QD.Item("sp"&i) = itm.Path
      QD.Item("id"&i) = itm.ID
      html = html&"<div id=""track"&i&""" style=""float:left;clear:left;font-family:'arial narrow';"">"&itm.Path
      html = html&" <span id=""result"&i&""" style=""color:red""> </span></div>"
    Next
  Else
    html = html&"<div id=""track"&i&""" style=""float:left;clear:left;font-family:'arial black';"">No tracks selected to tag!</div>"
  End If
  Call WB.SetHTMLDocument(html)
 
  'register event
  Dim doc : Set doc = WB.Interf.Document
   Dim btn : Set btn = doc.getElementById("settings")
  Call Script.RegisterEvent(btn,"onclick","InitSettings") 
 
  'show panel
  Dim res : Set res = SDB.NewStringList
  Call res.Add(SearchTerm)
  Call SDB.Tools.WebSearch.SetSearchResults(res)
  SDB.Tools.WebSearch.ResultIndex = 0

  'start timer
  Set SDB.Objects("MIPT-WB") = WB
  Set SDB.Objects("MIPT-QD") = QD
  Dim Tmr : Set Tmr = SDB.CreateTimer(50)
  Call Script.RegisterEvent(Tmr,"OnTimer","ContinueSearch")
End Sub

Sub ContinueSearch(Tmr)
  Debug = SDB.IniFile.BoolValue("MusicIPTagger","Debug")
  If Debug Then Call out("ContinueSearch(Tmr)")
  Call Script.UnregisterEvents(Tmr)
 
  'get document
  Dim WB : Set WB = SDB.Objects("MIPT-WB")
  If WB Is Nothing Then
    Call out("WB Is Nothing!")
    Exit Sub
  End If
  Dim doc : Set doc = WB.Interf.Document 
  If doc Is Nothing Then
    Call out("Doc Is Nothing!")
    Exit Sub
  End If 
 
  'get query data
  Dim QD : Set QD = SDB.Objects("MIPT-QD")
  If QD Is Nothing Then
    Call out("QD Is Nothing!")
    Exit Sub
  End If
  If QD.Item("psd") = "YES" Then
    Call out("Paused...")
    Set Tmr = SDB.CreateTimer(1000)
    Call Script.RegisterEvent(Tmr,"OnTimer","ContinueSearch")
    Exit Sub
  End If   
 
  'update display
  Dim ele : Set ele = Nothing
  Dim cur : cur = Int(QD.Item("cur"))+1
  Dim max : max = Int(QD.Item("max"))
  Dim tot : tot = Int(QD.Item("tot")) 
  If cur > 0 Then
    Set ele = doc.getElementById("percent")
    If Not (ele Is Nothing) Then       
      ele.innerHTML = Round((cur*100)/(max+1))&"%"
    End If
    Set ele = doc.getElementById("success")
    If Not (ele Is Nothing) Then       
      ele.innerHTML = Round((tot*100)/cur)&"%"
    End If
    Set ele = doc.getElementById("failure")
    If Not (ele Is Nothing) Then       
      ele.innerHTML = Round(((cur-tot)*100)/cur)&"%"
    End If 
  End If
  If cur > max Then
    If Debug Then Call out("Finished")     
    Exit Sub
  End If 
 
  'process query
  Set ele = doc.getElementById("result"&cur)
  If Not (ele Is Nothing) Then       
    ele.innerHTML = QD.Item("img")
    ele.scrollIntoView(False)
  End If
  Dim boo : boo = True
  Dim puid : puid = ""
  If SDB.IniFile.BoolValue("MusicIPTagger","Prior") Then
    Field = SDB.IniFile.IntValue("MusicIPTagger","Field")
    If Field > 0 Then
      Dim iter : Set iter = SDB.Database.QuerySongs("AND Songs.ID="&QD.Item("id"&cur))           
      If Not (iter.EOF) Then   
        Select Case Field
          Case 1
            puid = iter.Item.Custom1
          Case 2
            puid = iter.Item.Custom2
          Case 3
            puid = iter.Item.Custom3
          Case 4
            puid = iter.Item.Custom4
          Case 5
            puid = iter.Item.Custom5
          Case 6
            puid = iter.Item.Mood
          Case 7
            puid = iter.Item.Occasion
          Case 8
            puid = iter.Item.Quality
          Case 9
            puid = iter.Item.Tempo
          Case 10
            puid = iter.Item.Comment
          Case 11
            puid = iter.Item.Grouping                                                                                                                                   
        End Select
      End If
      Set iter = Nothing
    End If
  End If
  If puid = "" Then
    boo = False
    Call CreatePUID(ele,QD.Item("sp"&cur),puid)
  Else
    If Debug Then Call out("PUID="&puid)
  End If
  If Not (ele Is Nothing) Then 
    If Not (puid = "") Then
      UpAlb = SDB.IniFile.BoolValue("MusicIPTagger","UpAlb")
      UpTrk = SDB.IniFile.BoolValue("MusicIPTagger","UpTrk")   
      If UpAlb Or UpTrk Then
        ele.innerHTML = QD.Item("img")&QD.Item("img")
        puid = GetExtra(ele,QD.Item("sp"&cur),puid,boo)
      End If
    End If   
    Dim div : Set div = ele.parentNode
    Dim par : Set par = div.parentNode
    par.removeChild(div)
    If puid = "" Then
      par.appendChild(div)
    End If
  End If 

  'keep looping 
  If Not (SDB.Objects("MIPT-WB") Is Nothing) Then
    QD.Item("cur") = cur
    If Not (puid = "") Then
      QD.Item("tot") = tot+1
    End If
    Set Tmr = SDB.CreateTimer(50)
    Call Script.RegisterEvent(Tmr,"OnTimer","ContinueSearch")
  End If
End Sub

Function GetExtra(ele,mp3,puid,boo)
  GetExtra = ""
  Dim ini : Set ini = SDB.IniFile
  Debug = ini.BoolValue("MusicIPTagger","Debug")
  If Debug Then Call out("GetExtra(ele,"""&mp3&""","""&puid&""","&boo&")")
 
  'call musicbrainz
  Dim xml : Set xml = CreateObject("Microsoft.XMLDOM")
  xml.async = True
  Dim url : url = "http://musicbrainz.org/ws/1/track/?type=xml&puid="&puid
  If Debug Then Call out("URL="&url)
  Call xml.Load(url)
  Dim cnt : cnt = 0
  While (xml.readyState < 4 And cnt < 300)
    Call SDB.Tools.Sleep(100)
    SDB.ProcessMessages
    cnt = cnt+1
  WEnd
  If xml.readyState < 4 Then
    If Debug Then Call out("XML timeout at 30s")
    Exit Function 
  End If
 
  On Error Resume Next
  Dim trk : Set trk = xml.getElementsByTagName("track").Item(0)
  If Not (Err.Number = 0) Then
    If Debug Then Call out("XML file is empty")
    Err.Clear
    Exit Function
  End If 
  On Error Goto 0   
 
  'load settings
  UpAlb = ini.BoolValue("MusicIPTagger","UpAlb")
  UpTrk = ini.BoolValue("MusicIPTagger","UpTrk")
  If boo Then
    UpTtl = ini.BoolValue("MusicIPTagger","UpTtl")
    UpOTt = ini.BoolValue("MusicIPTagger","UpOTt")
    UpArt = ini.BoolValue("MusicIPTagger","UpArt")
    UpAAr = ini.BoolValue("MusicIPTagger","UpAAr")
    UpOAr = ini.BoolValue("MusicIPTagger","UpOAr")
  End If

  'load results
  Dim AD : Set AD = CreateObject("Scripting.Dictionary")
  Dim alb,str,off,num,nam,art,ttl,tid
  For Each alb In xml.getElementsByTagName("release")   
    On Error Resume Next
    str = GetText(alb.getElementsByTagName("title").Item(0))
    off = alb.getElementsByTagName("track-list").Item(0).getAttribute("offset")
    If off = "" Then
      num = 0
    Else
      num = Int(off)+1
    End If
    On Error Goto 0   
    AD.Item(str) = num   
  Next
  If boo Then   
    ttl = ""
    art = ""
    On Error Resume Next
    Set trk = xml.getElementsByTagName("track").Item(0)
    ttl = GetText(trk.getElementsByTagName("title").Item(0))
    Set alb = xml.getElementsByTagName("artist").Item(0)
    art = GetText(alb.getElementsByTagName("name").Item(0))
    On Error Goto 0
  Else
    If AD.Count = 0 Then
      Exit Function
    End If
  End If 
 
  'process results
  Dim WS : Set WS = SDB.Tools.WebSearch
  For cnt = 0 To WS.NewTracks.Count-1
    Dim itm : Set itm = WS.NewTracks.Item(cnt)
    If itm.Path = mp3 Then
      If boo Then
        If Not (ttl = "") Then
          If UpTtl Then
            If Debug Then Call out("Title="&ttl)
            itm.Title = ttl
          End If
          If UpOTt Then
            If Debug Then Call out("OriginalTitle="&ttl)
            itm.OriginalTitle = ttl
          End If         
        End If
        If Not (art = "") Then
          If UpArt Then
            If Debug Then Call out("Artist="&art)
            itm.ArtistName = art
          End If
          If UpAAr Then
            If (itm.ArtistName = itm.AlbumArtistName Or itm.AlbumArtistName = "") Then
              If Debug Then Call out("AlbumArtist="&art)
              itm.AlbumArtistName = art
            End If
          End If
          If UpOAr Then
            If Debug Then Call out("OriginalArtist="&art)
            itm.OriginalArtist = art
          End If         
        End If
      End If
      If AD.Count > 0 Then
        Dim arr : arr = AD.Keys
        str = ""
        nam = itm.AlbumName
        If AD.Count = 1 Or nam = "" Then
          str = arr(0) 'only one match or nothing to match with
        Else
          If Not (nam = "") And (AD.Exists(nam)) Then
            str = nam 'current album matches
          Else
            nam = StripName(nam)
            For num = 0 To UBound(arr)
              If MatchName(nam,arr(num)) Then
                str = arr(num) 'album name matches
                Exit For
              End If
              If (str = "") And Not (itm.TrackOrderStr = "") Then
                If AD.Item(arr(num)) = itm.TrackOrderStr Then
                  str = arr(num) 'track number matches
                End If
              End If
            Next
          End If
          If str = "" Then
            str = arr(0) 'no matches so use first result
          End If       
        End If
        If UpAlb Then
          If Debug Then Call out("Album="&str)
          itm.AlbumName = str
        End If
        off = AD.Item(str)
        If Not (off = "") Then
          If Left(itm.TrackOrderStr,1) = "0" Then
            While Len(off) < Len(itm.TrackOrderStr)
              off = "0"&off
            WEnd
          End If
          If UpTrk Then
            If Debug Then Call out("Track="&off)
            itm.TrackOrderStr = off
          End If
        End If
      End If
      WS.TrackChecked(cnt) = True
      GetExtra = puid
      Exit For
    End If
  Next
  Call WS.RefreshViews() 
End Function

Function StripName(nam)
  Debug = SDB.IniFile.BoolValue("MusicIPTagger","Debug")
  If Debug Then Call out("StripName("""&nam&""")")
 
  'check inputs
  StripName = ""
  If nam = "" Then
    Exit Function
  End If
 
  'strip string
  Dim s : s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ÅÄÂÃÁÀÆËÊÉÈÏÎÍÌÖÔÕÓÒØÜÛÚÙÝÇÐÑß"
  Dim t : t = UCase(SDB.ToAscii(nam)) 
  Dim i : i = 0
  For i = 1 To Len(t)
    Dim c : c = Mid(t,i,1)
    If InStr(s,c) > 0 Then
      StripName = StripName&c
    End If
  Next
End Function

Function MatchName(abc,def)
  Dim ghi : ghi = StripName(def)
  Debug = SDB.IniFile.BoolValue("MusicIPTagger","Debug")
  If Debug Then Call out("MatchName("""&abc&""","""&ghi&""")")

  'check inputs
  MatchName = False
  If abc = "" Then
    Exit Function
  End If
 
  'compare strings
  Dim n : n = Len(ghi)
  Dim o : o = Len(abc)
  If n = o Then
    If ghi = abc Then
      MatchName = True 'no trim match
    End If
  Else
    If n > o Then
      If Left(ghi,o) = abc Then
        MatchName = True 'trim new match
      End If
    Else
      If Left(abc,n) = ghi Then
        MatchName = True 'trim old match
      End If
    End If
  End If
End Function

Sub CreatePUID(ele,mp3,puid)
  Debug = SDB.IniFile.BoolValue("MusicIPTagger","Debug")
  If Debug Then Call out("CreatePUID(ele,"""&mp3&""","""&puid&""")")
  Archi = SDB.IniFile.BoolValue("MusicIPTagger","Archi")
 
  'check existing
  Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
  If Not (fso.FileExists(mp3)) Then
    Exit Sub
  End If
 
  'call application
  Dim exe : exe = fso.GetFile(SDB.ScriptsPath&"MIPT\genpuid.exe").ShortPath
  Dim loc : loc = SDB.TemporaryFolder
  If Right(loc,1) = "\" Then
    loc = loc&"MIPT.xml"
  Else
    loc = loc&"\MIPT.xml"
  End If
  Dim dat : dat = fso.GetFile(loc).ShortPath
  If fso.FileExists(dat) Then
    fso.DeleteFile(dat)
  End If
  loc = fso.GetFile(mp3).ShortPath
  Dim wsh : Set wsh = CreateObject("WScript.Shell") 
  Dim cmd : cmd = "%comspec% /c "&exe&" f25c7a6acad172541066f475175465a7"
  If Archi Then
    Dim ext : ext = UCase(Right(loc,4))
    If (ext = ".M4A") Or (ext = ".M4B") Then
      'don't archive
    Else
      cmd = cmd&" -archive"
    End If
  End If
  cmd = cmd&" -rmd=2 """&loc&""" >"&dat
  If Debug Then Call out(">"&cmd) 
  Call wsh.Run(cmd,0,True)
  If SDB.Objects("MIPT-WB") Is Nothing Then
    Exit Sub
  End If
 
  'check results
  If Not (fso.FileExists(dat)) Then
    If Debug Then Call out("Application error")
    If Not (ele Is Nothing) Then
      ele.innerHTML = " - application error!"
    End If
    Exit Sub
  End If 
 
  'check results
  Dim xml : Set xml = CreateObject("Microsoft.XMLDOM")
  If xml Is Nothing Then
    If Debug Then Call out("XML Is Nothing")
    If Not (ele Is Nothing) Then
      ele.innerHTML = " - xml error!"
    End If
    Exit Sub
  End If   
  xml.async = True
  Dim fil : Set fil = fso.OpenTextFile(dat,1,True)
  Dim s : s = Replace(fil.ReadAll,"mip:","")
  If s = "MusicDNS servers cannot be reached right now." Then
    If Debug Then Call out("MusicDNS servers cannot be reached right now")
    If Not (ele Is Nothing) Then
      ele.innerHTML = " - servers unavailable!"
    End If
    Exit Sub   
  End If                                                     
 
  'load results
  Dim i : i = InStr(s,"file=")-1
  If i > 0 Then
    Dim j : j = InStr(Mid(s,i+7),"""")+i+8
    s = Left(s,i)&Mid(s,j)
  End If
  fil.Close()
  Set fil = fso.OpenTextFile(dat,2,True)
  fil.Write(s)
  fil.Close()
  Call xml.Load(dat)
  Dim cnt : cnt = 0
  While (xml.readyState < 4 And cnt < 300)
    Call SDB.Tools.Sleep(100)
    SDB.ProcessMessages
    cnt = cnt+1
  WEnd
  If xml.readyState < 4 Then
    If Debug Then Call out("XML timeout at 30s")
    If Not (ele Is Nothing) Then
      ele.innerHTML = " - xml timeout!"
    End If
    Exit Sub 
  End If
  If xml.parseError.errorCode < 0 Then
    If Debug Then Call out(xml.parseError.reason&" (Line "&xml.parseError.line&")")
    If Not (ele Is Nothing) Then
      ele.innerHTML = " - "&xml.parseError.reason&"!"
    End If
    Exit Sub 
  End If
 
  'load settings
  Dim ini : Set ini = SDB.IniFile
  UpTtl = ini.BoolValue("MusicIPTagger","UpTtl")
  UpArt = ini.BoolValue("MusicIPTagger","UpArt")
  UpYer = ini.BoolValue("MusicIPTagger","UpYer")
  UpGnr = ini.BoolValue("MusicIPTagger","UpGnr")
  UpAAr = ini.BoolValue("MusicIPTagger","UpAAr")
  UpOYr = ini.BoolValue("MusicIPTagger","UpOYr")
  UpOAr = ini.BoolValue("MusicIPTagger","UpOAr")
  UpOTt = ini.BoolValue("MusicIPTagger","UpOTt")
  Field = ini.IntValue("MusicIPTagger","Field")   
     
  'get web search
  Dim WS : Set WS = SDB.Tools.WebSearch
  If WS.NewTracks Is Nothing Then
    If Debug Then Call out("NewTracks Is Nothing")
    If Not (ele Is Nothing) Then
      ele.innerHTML = " - no new tracks!"
    End If
    Exit Sub   
  End If
 
  'process results
  Dim trk,str,ttl,art,rel,gen,aan
  For Each trk In xml.getElementsByTagName("track")
    str = trk.getAttribute("status")
    If Not (str = "") Then
      If Debug Then Call out("Status="&str)
      If Not (ele Is Nothing) Then
        ele.innerHTML = " - "&str&"!"
      End If
      Exit Sub       
    End If
    puid = trk.getAttribute("puid")
    If Not (puid = "") Then
      If Debug Then Call out("PUID="&puid)
    End If   
    On Error Resume Next
    ttl = GetText(trk.getElementsByTagName("title").Item(0))
    art = GetText(trk.getElementsByTagName("artist").Item(0).ChildNodes.Item(0))
    rel = GetText(trk.getElementsByTagName("first-release-date").Item(0))
    gen = GetText(trk.getElementsByTagName("genre-list").Item(0).ChildNodes.Item(0).ChildNodes.Item(0))
    On Error Goto 0   
    For cnt = 0 To WS.NewTracks.Count-1
      Dim itm : Set itm = WS.NewTracks.Item(cnt)
      If itm.Path = mp3 Then
        If Not (ttl = "") Then
          If UpTtl Then
            If Debug Then Call out("Title="&ttl)
            itm.Title = ttl
          End If
          If UpOTt Then
            If Debug Then Call out("OriginalTitle="&ttl)
            itm.OriginalTitle = ttl
          End If         
        End If
        If Not (art = "") Then
          If UpArt Then
            If Debug Then Call out("Artist="&art)
            itm.ArtistName = art
          End If
          If UpAAr Then
            If (itm.ArtistName = itm.AlbumArtistName Or itm.AlbumArtistName = "") Then
              If Debug Then Call out("AlbumArtist="&art)
              itm.AlbumArtistName = art
            End If
          End If
          If UpOAr Then
            If Debug Then Call out("OriginalArtist="&art)
            itm.OriginalArtist = art
          End If         
        End If
        If Not (rel = "") Then
          If UpYer Then
            If Debug Then Call out("Year="&rel)
            itm.Year = rel
          End If
          If UpOYr Then
            If Debug Then Call out("OriginalYear="&rel)
            itm.OriginalYear = rel
          End If         
        End If
        If Not (gen = "") Then
          If UpGnr Then
            If Debug Then Call out("Genre="&gen)
            itm.Genre = gen
          End If
        End If
        Dim sql : sql = ""
        If Not (puid = "") And (Field > 0) Then
          Select Case Field
            Case 1
              If Debug Then Call out("Custom1="&puid)
              itm.Custom1 = puid
              sql = "Custom1"
            Case 2
              If Debug Then Call out("Custom2="&puid)
              itm.Custom2 = puid
              sql = "Custom2"
            Case 3
              If Debug Then Call out("Custom3="&puid)
              itm.Custom3 = puid
              sql = "Custom3"
            Case 4
              If Debug Then Call out("Custom4="&puid)
              itm.Custom4 = puid
              sql = "Custom4"
            Case 5
              If Debug Then Call out("Custom5="&puid)
              itm.Custom5 = puid
              sql = "Custom5"
            Case 6
              If Debug Then Call out("Mood="&puid)
              itm.Mood = puid
              sql = "Mood"
            Case 7
              If Debug Then Call out("Occasion="&puid)
              itm.Occasion = puid
              sql = "Occasion"
            Case 8
              If Debug Then Call out("Quality="&puid)
              itm.Quality = puid
              sql = "Quality"
            Case 9
              If Debug Then Call out("Tempo="&puid)
              itm.Tempo = puid
              sql = "Tempo"
            Case 10
              If Debug Then Call out("Comment="&puid)
              itm.Comment = puid
              sql = "Comment"
            Case 11
              If Debug Then Call out("Grouping="&puid)
              itm.Grouping = puid
              sql = "Grouping"                                                                                                                                                         
          End Select
        End If
        If (Debug) And (sql <> "") Then
          sql = "SELECT COUNT(*) FROM Songs WHERE "&sql&"='"&puid&"' AND Id NOT IN (0,"&itm.ID&")"
          Call out("SQL="&sql)
          Dim itr : Set itr = SDB.Database.OpenSQL(sql)
          If Not (itr.EOF) Then
            If itr.ValueByIndex(0) > 0 Then
              Call out("Duplicate PUID warning: "&itr.ValueByIndex(0))
            End If
          End If
          Set itr = Nothing
        End If       
        WS.TrackChecked(cnt) = True
        Exit For
      End If
    Next
    Call WS.RefreshViews()
  Next
End Sub

Function GetText(ele)
  If ele Is Nothing Then
    GetText = ""
  Else
    GetText = ele.Text
  End If
End Function

Sub ShowResult(i)
  Debug = SDB.IniFile.BoolValue("MusicIPTagger","Debug")
  If Debug Then Call out("ShowResult("&i&")")
  Call SDB.Tools.WebSearch.ClearTracksData()
End Sub

Sub FinishSearch(Panel)
  Debug = SDB.IniFile.BoolValue("MusicIPTagger","Debug")
  If Debug Then Call out("FinishSearch(Panel)")
  Dim WB : Set WB = SDB.Objects("MIPT-WB")
  If Not (WB Is Nothing) Then
    Call WB.Common.DestroyControl()
    Set WB = Nothing
  End If
  Set SDB.Objects("MIPT-WB") = Nothing
  Set SDB.Objects("MIPT-QD") = Nothing 
End Sub

Sub clear()
  Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
  Dim loc : loc = SDB.TemporaryFolder
  If Right(loc,1) = "\" Then
    loc = loc&"MIPT.log"
  Else
    loc = loc&"\MIPT.log"
  End If
  Dim logf : Set logf = fso.CreateTextFile(loc,True)
  Call logf.Close()
End Sub

Sub out(txt)
  Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
  Dim loc : loc = SDB.TemporaryFolder
  If Right(loc,1) = "\" Then
    loc = loc&"MIPT.log"
  Else
    loc = loc&"\MIPT.log"
  End If
  Dim logf : Set logf = fso.OpenTextFile(loc,8,True)
  Call logf.WriteLine(Time&Chr(9)&SDB.ToAscii(txt))
  Call logf.Close()
End Sub

Sub Install()
  Dim inip : inip = SDB.ScriptsPath&"Scripts.ini"
  Dim inif : Set inif = SDB.Tools.IniFileByPath(inip)
  If Not (inif Is Nothing) Then
    inif.StringValue("MusicIPTagger","Filename") = "MIPT\MusicIPTagger.vbs"
    inif.StringValue("MusicIPTagger","Procname") = "MusicIPTagger"
    inif.StringValue("MusicIPTagger","Order") = "30"
    inif.StringValue("MusicIPTagger","DisplayName") = "MusicIP Tagger"
    inif.StringValue("MusicIPTagger","Description") = "Tag tracks using MusicIP"
    inif.StringValue("MusicIPTagger","Language") = "VBScript"
    inif.StringValue("MusicIPTagger","ScriptType") = "3"
    Call SDB.RefreshScriptItems()
  End If
'  Dim ini : Set ini = SDB.IniFile
'  Dim s : s = ini.StringValue("AlbumBrowser","RunningScriptName")
'  If Not (s = "MIPT\MusicIPTagger.vbs") Then
'    s = "MusicIP Tagger: Would you like to make this your default 'Auto-tag from Web' source?"
'    Dim i : i = SDB.MessageBox(s,mtConfirmation,Array(mbYes,mbNo))
'    If i = mrYes Then
'      ini.StringValue("AlbumBrowser","RunningScriptName") = "MIPT\MusicIPTagger.vbs"
'      Call ini.Flush()
'    End If
'  End If 
End Sub

Sub InitSettings()
  Dim QD : Set QD = SDB.Objects("MIPT-QD")
  If QD Is Nothing Then
    Call out("QD Is Nothing!")
    Exit Sub
  End If
  QD.Item("psd") = "YES"

  Dim ini : Set ini = SDB.IniFile
  Dim Form : Set Form = SDB.UI.NewForm
  Form.Common.SetRect 100, 100, 360, 360
  Form.BorderStyle  = 3   ' Non-Resizable
  Form.FormPosition = 4   ' Screen Center
  Form.SavePositionName = "MusicIPTaggerPos"
  Form.Caption = "MusicIP Tagger"

  Dim Label : Set Label = SDB.UI.NewLabel(Form)
  Label.Caption = "Store PUID in:"
  Label.Common.Left = 10
  Label.Common.Top = 15

  Dim EdtField : Set EdtField = SDB.UI.NewDropdown(Form)
  EdtField.Common.Left = 92
  EdtField.Common.Top = Label.Common.Top -4
  EdtField.AddItem("(None)")
  EdtField.AddItem(ini.StringValue("CustomFields","Fld1Name"))
  EdtField.AddItem(ini.StringValue("CustomFields","Fld2Name"))
  EdtField.AddItem(ini.StringValue("CustomFields","Fld3Name"))
  EdtField.AddItem(ini.StringValue("CustomFields","Fld4Name"))
  EdtField.AddItem(ini.StringValue("CustomFields","Fld5Name"))
  EdtField.AddItem("Mood")
  EdtField.AddItem("Occasion")
  EdtField.AddItem("Quality")
  EdtField.AddItem("Tempo")
  EdtField.AddItem("Comment")
  EdtField.AddItem("Grouping")
  EdtField.ItemIndex = ini.IntValue("MusicIPTagger","Field") 
  EdtField.Style = 2

  Dim EdtUpTtl : Set EdtUpTtl = SDB.UI.NewCheckbox(Form)
  EdtUpTtl.Common.Left = 10
  EdtUpTtl.Common.Top = Label.Common.Top +25
  EdtUpTtl.Common.Width = 165
  EdtUpTtl.Caption = "Update track title?"
  EdtUpTtl.Checked = ini.BoolValue("MusicIPTagger","UpTtl")

  Dim EdtUpArt : Set EdtUpArt = SDB.UI.NewCheckbox(Form)
  EdtUpArt.Common.Left = 10
  EdtUpArt.Common.Top = EdtUpTtl.Common.Top +25
  EdtUpArt.Common.Width = 165
  EdtUpArt.Caption = "Update track artist?"
  EdtUpArt.Checked = ini.BoolValue("MusicIPTagger","UpArt") 
 
  Dim EdtUpYer : Set EdtUpYer = SDB.UI.NewCheckbox(Form)
  EdtUpYer.Common.Left = 10
  EdtUpYer.Common.Top = EdtUpArt.Common.Top +25
  EdtUpYer.Common.Width = 165
  EdtUpYer.Caption = "Update track year?"
  EdtUpYer.Checked = ini.BoolValue("MusicIPTagger","UpYer")
 
  Dim EdtUpGnr : Set EdtUpGnr = SDB.UI.NewCheckbox(Form)
  EdtUpGnr.Common.Left = 10
  EdtUpGnr.Common.Top = EdtUpYer.Common.Top +25
  EdtUpGnr.Common.Width = 165
  EdtUpGnr.Caption = "Update track genre?"
  EdtUpGnr.Checked = ini.BoolValue("MusicIPTagger","UpGnr")
 
  Dim EdtUpAlb : Set EdtUpAlb = SDB.UI.NewCheckbox(Form)
  EdtUpAlb.Common.Left = 10
  EdtUpAlb.Common.Top = EdtUpGnr.Common.Top +25
  EdtUpAlb.Common.Width = 165
  EdtUpAlb.Caption = "Update album name?"
  EdtUpAlb.Checked = ini.BoolValue("MusicIPTagger","UpAlb") 

  Dim EdtUpTrk : Set EdtUpTrk = SDB.UI.NewCheckbox(Form)
  EdtUpTrk.Common.Left = 10
  EdtUpTrk.Common.Top = EdtUpAlb.Common.Top +25
  EdtUpTrk.Common.Width = 165
  EdtUpTrk.Caption = "Update track number?"
  EdtUpTrk.Checked = ini.BoolValue("MusicIPTagger","UpTrk")

  Dim EdtUpAAr : Set EdtUpAAr = SDB.UI.NewCheckbox(Form)
  EdtUpAAr.Common.Left = 10
  EdtUpAAr.Common.Top = EdtUpTrk.Common.Top +25
  EdtUpAAr.Common.Width = 165
  EdtUpAAr.Caption = "Update album artist?"
  EdtUpAAr.Checked = ini.BoolValue("MusicIPTagger","UpAAr")
 
  Dim EdtUpOAr : Set EdtUpOAr = SDB.UI.NewCheckbox(Form)
  EdtUpOAr.Common.Left = 10
  EdtUpOAr.Common.Top = EdtUpAAr.Common.Top +25
  EdtUpOAr.Common.Width = 165
  EdtUpOAr.Caption = "Update original artist?"
  EdtUpOAr.Checked = ini.BoolValue("MusicIPTagger","UpOAr") 

  Dim EdtUpOYr : Set EdtUpOYr = SDB.UI.NewCheckbox(Form)
  EdtUpOYr.Common.Left = 10
  EdtUpOYr.Common.Top = EdtUpOAr.Common.Top +25
  EdtUpOYr.Common.Width = 165
  EdtUpOYr.Caption = "Update original year?"
  EdtUpOYr.Checked = ini.BoolValue("MusicIPTagger","UpOYr")

  Dim EdtUpOTt : Set EdtUpOTt = SDB.UI.NewCheckbox(Form)
  EdtUpOTt.Common.Left = 10
  EdtUpOTt.Common.Top = EdtUpOYr.Common.Top +25
  EdtUpOTt.Common.Width = 165
  EdtUpOTt.Caption = "Update original title?"
  EdtUpOTt.Checked = ini.BoolValue("MusicIPTagger","UpOTt")

  Dim EdtDebug : Set EdtDebug = SDB.UI.NewCheckbox(Form)
  EdtDebug.Common.Left = 180
  EdtDebug.Common.Top = EdtUpTtl.Common.Top
  EdtDebug.Common.Width = 165
  EdtDebug.Caption = "Create debug logfile?"
  EdtDebug.Checked = ini.BoolValue("MusicIPTagger","Debug")
 
  Dim EdtPrior : Set EdtPrior = SDB.UI.NewCheckbox(Form)
  EdtPrior.Common.Left = 180
  EdtPrior.Common.Top = EdtUpArt.Common.Top
  EdtPrior.Common.Width = 165
  EdtPrior.Caption = "Use existing PUID value?"
  EdtPrior.Checked = ini.BoolValue("MusicIPTagger","Prior")
 
  Dim EdtArchi : Set EdtArchi = SDB.UI.NewCheckbox(Form)
  EdtArchi.Common.Left = 180
  EdtArchi.Common.Top = EdtUpYer.Common.Top
  EdtArchi.Common.Width = 165
  EdtArchi.Caption = "Archive file analysis?"
  EdtArchi.Checked = ini.BoolValue("MusicIPTagger","Archi")               
   
  Dim BtnCancel : Set BtnCancel = SDB.UI.NewButton(Form)
  BtnCancel.Caption = "&Cancel"
  BtnCancel.Cancel = True
  BtnCancel.ModalResult = 2
  BtnCancel.Common.Left = Form.Common.Width - BtnCancel.Common.Width -20
  BtnCancel.Common.Top = EdtUpOTt.Common.Top +25

  Dim BtnOk : Set BtnOk = SDB.UI.NewButton(Form)
  BtnOk.Caption = "&Ok"
  BtnOk.Default = True
  BtnOk.ModalResult = 1
  BtnOk.Common.Left = BtnCancel.Common.Left - BtnOk.Common.Width -10
  BtnOk.Common.Top = BtnCancel.Common.Top   

  'show confirmation screen
  If Form.ShowModal = 1 Then
    ini.IntValue("MusicIPTagger","Field") = EdtField.ItemIndex
    ini.BoolValue("MusicIPTagger","UpTtl") = EdtUpTtl.Checked
    ini.BoolValue("MusicIPTagger","UpArt") = EdtUpArt.Checked
    ini.BoolValue("MusicIPTagger","UpYer") = EdtUpYer.Checked                     
    ini.BoolValue("MusicIPTagger","UpGnr") = EdtUpGnr.Checked
    ini.BoolValue("MusicIPTagger","UpAlb") = EdtUpAlb.Checked
    ini.BoolValue("MusicIPTagger","UpTrk") = EdtUpTrk.Checked
    ini.BoolValue("MusicIPTagger","UpAAr") = EdtUpAAr.Checked
    ini.BoolValue("MusicIPTagger","UpOYr") = EdtUpOYr.Checked
    ini.BoolValue("MusicIPTagger","UpOAr") = EdtUpOAr.Checked
    ini.BoolValue("MusicIPTagger","UpOTt") = EdtUpOTt.Checked
    ini.BoolValue("MusicIPTagger","Debug") = EdtDebug.Checked
    ini.BoolValue("MusicIPTagger","Prior") = EdtPrior.Checked
    ini.BoolValue("MusicIPTagger","Archi") = EdtArchi.Checked
  End If
  QD.Item("psd") = ""
End Sub 
Loving the Monkey? - Get Gold
Check out my scripts at http://trixmoto.net including my top ten
Getting "Product Installation Error" when installing scripts? - Try this
Subscribe to my RSS feed for all the latest news
trixmoto
 
Posts: 8509
Joined: Fri Aug 26, 2005 8:28 am
Location: England

Re: MusicIP Tagger 1.0 [MM3]

Postby Bex on Thu Jul 10, 2008 11:06 am

Wow! :D
It will be fun to play with this one!
Advanced Duplicate Find & Fix Find More From Same - Custom Search. | Transfer PlayStat & Copy-Paste Tags/AlbumArt between any tracks.
Tagging Inconsistencies Do you think you have your tags in order? Think again...
Play History & Stats Node Like having your Last-FM account stored locally, but more advanced.
Case & Leading Zero Fixer Works on filenames too!

All My Scripts
Bex
 
Posts: 5924
Joined: Fri May 21, 2004 10:44 am
Location: Sweden

Re: MusicIP Tagger 1.0 [MM3]

Postby Bex on Thu Jul 10, 2008 11:35 am

It takes a long time to process and then I get this error:
Image
it basically says: Object required

It seems to find the first song but fails when it should process next song.
Advanced Duplicate Find & Fix Find More From Same - Custom Search. | Transfer PlayStat & Copy-Paste Tags/AlbumArt between any tracks.
Tagging Inconsistencies Do you think you have your tags in order? Think again...
Play History & Stats Node Like having your Last-FM account stored locally, but more advanced.
Case & Leading Zero Fixer Works on filenames too!

All My Scripts
Bex
 
Posts: 5924
Joined: Fri May 21, 2004 10:44 am
Location: Sweden

Re: MusicIP Tagger 1.0 [MM3]

Postby trixmoto on Thu Jul 10, 2008 12:00 pm

Can you please amend the script file, there's a boolean variable called "Debug" at the top which you should make "True". Then try again and in your windows temporary directory (%temp%) you should find a few files called "MIPT.*" - could you please email these to me?
Loving the Monkey? - Get Gold
Check out my scripts at http://trixmoto.net including my top ten
Getting "Product Installation Error" when installing scripts? - Try this
Subscribe to my RSS feed for all the latest news
trixmoto
 
Posts: 8509
Joined: Fri Aug 26, 2005 8:28 am
Location: England

Re: MusicIP Tagger 1.0 [MM3]

Postby Bex on Thu Jul 10, 2008 12:01 pm

Sure!
Advanced Duplicate Find & Fix Find More From Same - Custom Search. | Transfer PlayStat & Copy-Paste Tags/AlbumArt between any tracks.
Tagging Inconsistencies Do you think you have your tags in order? Think again...
Play History & Stats Node Like having your Last-FM account stored locally, but more advanced.
Case & Leading Zero Fixer Works on filenames too!

All My Scripts
Bex
 
Posts: 5924
Joined: Fri May 21, 2004 10:44 am
Location: Sweden

Re: MusicIP Tagger 1.0 [MM3]

Postby DazB on Thu Jul 10, 2008 2:07 pm

Hi,

Shouldn't people be using their own registration key.

Daz
DazB
 
Posts: 388
Joined: Mon Jun 11, 2007 9:09 am
Location: Yorkshire, UK

Re: MusicIP Tagger 1.0 [MM3]

Postby Mizery_Made on Thu Jul 10, 2008 4:21 pm

This looks interesting. I might actually toy around with this one. Though, the search doesn't result in Album information? Just Artist, Title, Year & Genre?

EDIT: I installed the script. Then proceeded to copy an albums folder to another area then messed around with the tags to make it so they needed some help to get fixed. I then imported them into the Monkey and tried to run this script on them. It decided that every one of the tracks (all 18) where Unanalyzable. I figured it might have had something to do with the files being VBR, thus I took the same steps with a second album which is one of my older CBR rips and it resulted in the same Unanalyzable message for each track.
Mizery_Made
 
Posts: 1587
Joined: Tue Aug 29, 2006 6:09 pm
Location: Kansas City, Missouri, United States

Re: MusicIP Tagger 1.0 [MM3]

Postby Shadrax on Thu Jul 10, 2008 6:55 pm

So this is using the MusicDNS system to do the acoustic fingerprinting like Picard?
I've already gotten successful results even though I get the same error as Bex on multiple tracks. EDIT: even single tracks. Want me to send MIPT files also?
Thanks!
Shadrax
 
Posts: 3
Joined: Mon May 19, 2008 7:32 pm

Re: MusicIP Tagger 1.0 [MM3]

Postby trixmoto on Fri Jul 11, 2008 9:17 am

@DazB - the registration key is an application key rather than a user key. I had to fill in a questionnaire, fulfil some criteria and electronically sign an agreement. You could probably go through this process yourself (it takes about 2-3 weeks) and change the key if you want to, but it is not necessary.

@Mizery_Made - yes, it's track data rather than album data. The next stage would be to use the PUID to query the MusicBrainz data and possible get more information from there. I know this is possible but I haven't looked into it yet. Not all tracks are analysable, but as I'm using a application for this there's not much I can do about it. I plan to investigate the reasons why though and see if there's anything I can do about improving the situation.

@Shadrax - yes, just like Picard! There's no need to send the files, I have discovered the issue and will get it fixed in the next version.
Loving the Monkey? - Get Gold
Check out my scripts at http://trixmoto.net including my top ten
Getting "Product Installation Error" when installing scripts? - Try this
Subscribe to my RSS feed for all the latest news
trixmoto
 
Posts: 8509
Joined: Fri Aug 26, 2005 8:28 am
Location: England

Re: MusicIP Tagger 1.0 [MM3]

Postby jonp on Fri Jul 11, 2008 1:58 pm

I can not seem to find where to run this script - probably user error! I downloaded and installed. Install stated it was successful. I check the Scripts/MIPT directory - all good but nothing is Tools|Scripts or anywhere I can see. Any ideas? Thanks.
jonp
 
Posts: 85
Joined: Tue Jan 01, 2008 1:08 pm
Location: Australia

Re: MusicIP Tagger 1.0 [MM3]

Postby Bex on Fri Jul 11, 2008 2:01 pm

Right click on the tracks and choose Auto-tag from web. Then click on the Options button in the upper right corner and select MusicIP Tagger.
Advanced Duplicate Find & Fix Find More From Same - Custom Search. | Transfer PlayStat & Copy-Paste Tags/AlbumArt between any tracks.
Tagging Inconsistencies Do you think you have your tags in order? Think again...
Play History & Stats Node Like having your Last-FM account stored locally, but more advanced.
Case & Leading Zero Fixer Works on filenames too!

All My Scripts
Bex
 
Posts: 5924
Joined: Fri May 21, 2004 10:44 am
Location: Sweden

Re: MusicIP Tagger 1.0 [MM3]

Postby DazB on Fri Jul 11, 2008 2:49 pm

Hi,

I was under the impression that keys were issued on a personal basis, but it's quite some time since I started generating PUIDs. The only real problems I have had is that genpuid doesn't currently cope with Unicode filenames and will generate invalid XML, and as the XML output has no processing instruction it can cause problems where there are Windows-1252 characters.

Daz
DazB
 
Posts: 388
Joined: Mon Jun 11, 2007 9:09 am
Location: Yorkshire, UK

Re: MusicIP Tagger 1.0 [MM3]

Postby jjwatmyself on Fri Jul 11, 2008 9:53 pm

Rik,

Great job! I havn't tested it yet, but I know that this is going to help people... no more posting clips and asking people if they know what the track is. I'm still wondering what the OEM Sony Ericsson phones use as that TrackID service is amazing too as it uses a 5 second sample to ID a track.

John

Update: I found it the SE TrackID backend service. It's gracenote.com (http://www.gracenote.com/business_solutions/music_id/) It works in a completeely different way to MusicIP and from the testing I've done on SE phones... "very impressed" with the results. Food for thought.
jjwatmyself
 
Posts: 2
Joined: Fri Jul 11, 2008 9:48 pm

Re: MusicIP Tagger 1.0 [MM3]

Postby jonp on Fri Jul 11, 2008 11:27 pm

Bex: Thanks - using it now.

Trixmoto: Another great script - you continue to impress. Thanks. I have a few thousand 'Track 01, Track 02' etc songs that this will be perfect for. I ripped them from CD offline a few years ago and the offline lookup function (MusicMatch) never worked and I have not bothered to re-rip. Now I can use this script and add them to my library. :D
I also get a fair few errors the same as Bex. I also get a fair few 'unanalyzable'. I will continue to test and let you know the results.
Thanks again.
jonp
 
Posts: 85
Joined: Tue Jan 01, 2008 1:08 pm
Location: Australia

Re: MusicIP Tagger 1.0 [MM3]

Postby Bex on Sat Jul 12, 2008 9:14 am

jjwatmyself wrote:Rik,

Great job! I havn't tested it yet, but I know that this is going to help people... no more posting clips and asking people if they know what the track is. I'm still wondering what the OEM Sony Ericsson phones use as that TrackID service is amazing too as it uses a 5 second sample to ID a track.

John

Update: I found it the SE TrackID backend service. It's gracenote.com (http://www.gracenote.com/business_solutions/music_id/) It works in a completeely different way to MusicIP and from the testing I've done on SE phones... "very impressed" with the results. Food for thought.

There are two problems with Gracenote:
1. It's costs money for an application to use it.
2. You are not allowed to use any other sources than Gracenote if you choose to struck a deal with them.
Advanced Duplicate Find & Fix Find More From Same - Custom Search. | Transfer PlayStat & Copy-Paste Tags/AlbumArt between any tracks.
Tagging Inconsistencies Do you think you have your tags in order? Think again...
Play History & Stats Node Like having your Last-FM account stored locally, but more advanced.
Case & Leading Zero Fixer Works on filenames too!

All My Scripts
Bex
 
Posts: 5924
Joined: Fri May 21, 2004 10:44 am
Location: Sweden

Next

Return to Need Help with Addons?

Who is online

Users browsing this forum: Ask Jeeves [Bot], MSN [Bot] and 5 guests