Update a new file with ALL tag information from an old file?

Get answers about using MediaMonkey 4 for Windows.

Moderator: Gurus

MCSmarties
Posts: 251
Joined: Tue Dec 06, 2005 8:01 pm

Update a new file with ALL tag information from an old file?

Post by MCSmarties »

I ripped all my music (back in the old days) to 128kbps CBR and tagged it extensively.
But now I'd really like to get "better" versions of my files, ripping them with higher bitrate and a better encoder.

Question: how can I transfer all the tag information from my "old" files to the "new" files?
This would include lyrics and album art, so just renaming the file using all fields and importing them with the auto-tag feature won't work.

I don't want to enter the information again manually, and I don't want to copy/paste each field individually.
Is there a way for such a batch operation?

I have posted something to that effect in the scripts forum several weeks ago but didn't quite get the answer I expected,
so I wonder if maybe there already is such a functionality in MM and I just haven't found it yet?

I can't imagine I would be the only user with this problem!

Notes:
- I tried to find a standalone app that would do this for me, but no luck
- I was toying with the idea of using the "synchronize tag" feature for this (open MM, replace old file with new file and hit "synchronize") but I don't think it works.
Besides, that approach kinda scares me. I certainly don't want to risk losing my tag information!!
rovingcowboy
Posts: 14163
Joined: Sat Oct 25, 2003 7:57 am
Location: (Texas)
Contact:

Post by rovingcowboy »

no

this is done manually only.

so this would need a script to be made for your auto retagging.

:( :cry:
roving cowboy / keith hall. My skins http://www.mediamonkey.com/forum/viewto ... =9&t=16724 for some help check on Monkey's helpful messages at http://www.mediamonkey.com/forum/viewto ... 4008#44008 MY SYSTEMS.1.Jukebox WinXp pro sp 3 version 3.5 gigabyte mb. 281 GHz amd athlon x2 240 built by me.) 2.WinXP pro sp3, vers 2.5.5 and vers 3.5 backup storage, shuttle 32a mb,734 MHz amd athlon put together by me.) 3.Dell demension, winxp pro sp3, mm3.5 spare jukebox.) 4.WinXp pro sp3, vers 3.5, dad's computer bought from computer store. )5. Samsung Galaxy A51 5G Android ) 6. amd a8-5600 apu 3.60ghz mm version 4 windows 7 pro bought from computer store.
wolfzell
Posts: 155
Joined: Fri Apr 23, 2004 8:42 am
Location: Germany

Post by wolfzell »

Although several people have already requested this, it seems that this was tagged as a functionality that is not needed, just have a look at this thread:

http://www.mediamonkey.com/forum/viewtopic.php?t=5354

If I sound bitter, it is because I am. Right now I am in the process of re-ripping 1000 CDs (12.000 tracks) from MP3 to FLAC. 2 weeks now and I almost got 20%. If I would spend more time at this job each day, I would get serious trouble with my wife. :(

bye
Wolfgang
rovingcowboy
Posts: 14163
Joined: Sat Oct 25, 2003 7:57 am
Location: (Texas)
Contact:

Post by rovingcowboy »

sorry you are upset wolfzell.

but there is a new scripter in the group now and he is good.

and looking for ideas maybe he will pick this up.

of course his wife might get mad if he gets lost in code so

he might take his time at it too.. :) 8)
roving cowboy / keith hall. My skins http://www.mediamonkey.com/forum/viewto ... =9&t=16724 for some help check on Monkey's helpful messages at http://www.mediamonkey.com/forum/viewto ... 4008#44008 MY SYSTEMS.1.Jukebox WinXp pro sp 3 version 3.5 gigabyte mb. 281 GHz amd athlon x2 240 built by me.) 2.WinXP pro sp3, vers 2.5.5 and vers 3.5 backup storage, shuttle 32a mb,734 MHz amd athlon put together by me.) 3.Dell demension, winxp pro sp3, mm3.5 spare jukebox.) 4.WinXp pro sp3, vers 3.5, dad's computer bought from computer store. )5. Samsung Galaxy A51 5G Android ) 6. amd a8-5600 apu 3.60ghz mm version 4 windows 7 pro bought from computer store.
Steegy
Posts: 3452
Joined: Sat Nov 05, 2005 7:17 pm

Post by Steegy »

I thought I read and answered a request like this in the past: http://www.mediamonkey.com/forum/viewto ... =copy+tags

Does what I proposed you there sound a good way to do? (it's certainly very easy, both for user and scripter)?
Extensions: ExternalTools, ExtractFields, SongPreviewer, LinkedTracks, CleanImport, and some other scripts (Need Help with Addons > List of All Scripts).
Steegy
Posts: 3452
Joined: Sat Nov 05, 2005 7:17 pm

Post by Steegy »

Script suggestion based on the concept:

Code: Select all

Option Explicit

Sub CopyTagDataWithinPairs

  Dim mySongList
      Set mySongList = SDB.SelectedSongList

  If MySongList.Count = 0 Then
    Set MySongList = SDB.AllVisibleSongList
    If MySongList.Count = 0 Then
      SDB.MessageBox "Nothing selected!", mtError, Array(mbOK)
      Exit Sub
    End If
  End If
  
  Dim i, SongFrom, SongTo
  For i = 0 To mySongList.Count - 1 Step 2
      Set SongFrom = mySongList.Item(i) 'first song is the old one to get the tags from
      Set SongTo = mySongList.Item(i + 1) 'second song is the new one to write the data to
      
      ''Set SongTo.Album = SongFrom.Album
      ''Set SongTo.AlbumArt = SongFrom.AlbumArt
      SongTo.AlbumArtistName = SongFrom.AlbumArtistName
      SongTo.AlbumName = SongFrom.AlbumName
      ''Set SongTo.Artist = SongFrom.Artist
      SongTo.ArtistName = SongFrom.ArtistName
      SongTo.Author = SongFrom.Author
      
      SongTo.Band = SongFrom.Band
      SongTo.BPM = SongFrom.BPM
      SongTo.Comment = SongFrom.Comment
      SongTo.Conductor = SongFrom.Conductor
      SongTo.Copyright = SongFrom.Copyright
      SongTo.Custom1 = SongFrom.Custom1
      SongTo.Custom2 = SongFrom.Custom2
      SongTo.Custom3 = SongFrom.Custom3
      SongTo.Genre = SongFrom.Genre
      SongTo.InvolvedPeople = SongFrom.InvolvedPeople
'...
'... more to add...
'...

' I obviously didn't add things like DateAdded and Encoder

' What about copying objects like AlbumArt?

' Could the method GetCopy be used?

      SongTo.UpdateAlbum
      SongTo.UpdateArtist
      SongTo.UpdateDB
      SongTo.WriteTags

  Next

End Sub
This is just a basic "idea", so please other scripters, if you have time, please take a look at it (and improve it, or make it work (I didn't test))


Again, the script does what is mentioned here: http://www.mediamonkey.com/forum/viewto ... 2601#42601
Nothing else! So just use it for testing a bit... It's not safe!!


Another selection like "Old1, Old2, Old3, Old4, New1, New2, New3, New4" can also easily be made.
Just change

Code: Select all

  For i = 0 To mySongList.Count - 1 Step 2
      Set SongFrom = mySongList.Item(i) 'first song is the old one to get the tags from
      Set SongTo = mySongList.Item(i + 1) 'second song is the new one to write the data to
to

Code: Select all

  For i = 0 To mySongList.Count/2 - 1
      Set SongFrom = mySongList.Item(i) 'first song is the old one to get the tags from
      Set SongTo = mySongList.Item(i + mySongList.Count/2) 'second song is the new one to write the data to
Cheers
Steegy
Extensions: ExternalTools, ExtractFields, SongPreviewer, LinkedTracks, CleanImport, and some other scripts (Need Help with Addons > List of All Scripts).
wolfzell
Posts: 155
Joined: Fri Apr 23, 2004 8:42 am
Location: Germany

Post by wolfzell »

Thanks for your help, steegy.

I started converting only after I found a method to re-rip while keeping the old info, only it needs a lot of manual steps and such methods are error-prone if you have to do them for 1000 albums, but I try to explain the way that I am doing it right now:

1. I have all my music sorted this way:
D:/MP3/<Album Artist>/<Album>/<Track #> - <Title> - <Artist>.mp3

2. I use MM's convert feature to convert all the tracks to *.flac with the same directory scheme, but naming them only <Track #>.flac. Now I have all entries two times in MM's database. One time with the mp3 extension and one time with the flac extension.

3. I delete all files in D:/MP3/ named ??.flac which kills the converted FLAC-files, but keeps the MP3 files just for safety right now.

4. I use EAC with the FLAC-encoder and rip the album, telling EAC to name the tracks just with the track#. (=??.flac). When EAC wants to save the files, I point it to the directory of that album. This way the tag info in the ripped file may be retrieved from freedb, but that does not matter.

5. After EAC has ripped the album, I go to the album in MM, delete the MP3 files, press Ctrl-A (select all), Ctrl-S (synchronize tags, this way writing MM's info into the new ripped files) and Ctrl-R (rename files, with the old naming scheme of the mp3-files).

This way I know exactly which files are already done. Still this is error prone if I ever point EAC to a wrong directory.

It would be much easier if everything could be done in MM. Just insert the CD, select re-rip, and let the computer do the rest.

Well, but at least I found a way to keep my old info (including cover art). All I am losing are the connections to the playlists, so I will have do build them up all over again after the format conversion. I could have exported and imported them (after correcting them) again, but I forgot that at the beginning. Right now many mp3-files are already missing and so are the entries in the playlists for them... :(

bye
Wolfgang
Pablo
Posts: 554
Joined: Sun Feb 22, 2004 2:59 am

Post by Pablo »

I've been thinking of writing such a script, but I see some issues with AlbumArt and such. But I'll give it some more thought.
Teknojnky
Posts: 5537
Joined: Tue Sep 06, 2005 11:01 pm
Contact:

Post by Teknojnky »

I wonder if an "IMPORT" type function could solve this issue and the issue of changing drive/volume id's (Ie moving files to a new computer/drive).
MCSmarties
Posts: 251
Joined: Tue Dec 06, 2005 8:01 pm

Post by MCSmarties »

Thanks a lot for the replies, Steegy and the others.
I know it's lame to keep asking others to write scripts and I really apologize for that.

I did some more searching and found a tagger called "Abander TagControl".
It doesn't look too bad to tell the truth, but it's no match for the Monkey.

However, it does have a nifty feature: the option to copy/past ENTIRE TAGS from a file.
Of course it only copies the fields that it supports. Since it supports only about half
the fields that Media Monkey does, it's not that great of a solution.

But it does give an interesting idea! The way it works in TagControl is that using
CTRL+C on a file copies all tag information, CTRL+V then pastes it somewhere else.
It can also export the tag to a bunch of formats (.tag, .csv, .txt).

Adapting that for a script, how about if one could open 2 directories side by side
(similar to explorer windows) and then just copy/paste tags from one side to the other?
trixmoto
Posts: 10024
Joined: Fri Aug 26, 2005 3:28 am
Location: Hull, UK
Contact:

Post by trixmoto »

This is possible, and if I wasn't in the middle of several other scripts at the moment (and 3 skins as well, although I haven't given them any time for weeks) I would give it a go. It should be possible to simply take all the database fields from one track and apply that information to another. I'm not sure about copying every tag though. This would be more of an application than a script, although it would be possible.
Download my scripts at my own MediaMonkey fansite.
All the code for my website and scripts is safely backed up immediately and for free using Dropbox.
Steegy
Posts: 3452
Joined: Sat Nov 05, 2005 7:17 pm

Post by Steegy »

It's also very easy to make a script that first asks to select the "from" tracks an then the "to" tracks.

Code: Select all

Dim mySongListFrom, mySongListTo

Sub Main
  If SelectTracksFrom Then
    'GIVE THE USER A MESSAGE AND THE CHANCE TO SELECT OTHER TRACKS TO SAVE THE TAGS TO
    If SDB.MessageBox("Select tracks to save tags to, please.", mtInformation, Array(mbOk, mbCancel)) = mrOk Then
      If SelectTracksTo Then
        CopyTagDataBetweenSonglists(mySongListFrom, mySongListTo)
      End If
    End If
  End If
End Sub

Function SelectTracksFrom
  SelectTracksFrom = False
  Set mySongListFrom = SDB.SelectedSongList

  If MySongListFrom.Count = 0 Then 
    Set MySongListFrom = SDB.AllVisibleSongList 
    If MySongListFrom.Count = 0 Then 
      SDB.MessageBox "Nothing selected!", mtError, Array(mbOK) 
      Exit Function 
    End If 
  End If

  SelectTracksFrom = True
End Function

Function SelectTracksTo
  SelectTracksTo = False
  Set mySongListTo = SDB.SelectedSongList

  If MySongListTo.Count = 0 Then 
    Set MySongListTo = SDB.AllVisibleSongList 
    If MySongListTo.Count = 0 Then 
      SDB.MessageBox "Nothing selected!", mtError, Array(mbOK) 
      Exit Sub 
    End If 
  End If

  If MySongListTo.Count = MySongListFrom.Count Then SelectTracksTo = True
End Function
  
Sub CopyTagDataBetweenSonglists(SLFrom, SLTo)
  Dim i, SongFrom, SongTo 
  For i = 0 To SLFrom.Count - 1
      Set SongFrom = SLFrom.Item(i)
      Set SongTo = SLTongList.Item(i)
      
      '.... The same as always...

  Next
End Sub
BTW, I'm aware of the not-so-good coding technique (using global variables where it's not necessary) so I could have let the functions return the SDBSongLists instead of the booleans, but it's just the concept. I didn't actually test the script so I wanted to keep it very easy.

However, it probably isn't far away from a working script. Maybe someone can test it?

Cheers
Steegy
Extensions: ExternalTools, ExtractFields, SongPreviewer, LinkedTracks, CleanImport, and some other scripts (Need Help with Addons > List of All Scripts).
Steegy
Posts: 3452
Joined: Sat Nov 05, 2005 7:17 pm

Post by Steegy »

Actually, a Ctrl-C, Ctrl-V alike solution is also very similar.

Concept:
Add context menu item "Copy Tag Information Ctrl-Shift-C" and "Paste Tag Information Ctrl-Shift-V" and link these 2 items to 2 different script methods like GetSelectedSonglistAndSaveToSDBObjectsArray and SaveSDBObjectsArraySonglistToSelectedSonglist.

It's all almost the same. It just depends on how you would like it to be implemented.

BTW: We are still talking about a "not so much happening problem" isn't it? So the script has to work, but the way how isn't really important probably (as you will probably only use the script once, and then forget about it).

Cheers
Steegy
Extensions: ExternalTools, ExtractFields, SongPreviewer, LinkedTracks, CleanImport, and some other scripts (Need Help with Addons > List of All Scripts).
MCSmarties
Posts: 251
Joined: Tue Dec 06, 2005 8:01 pm

Post by MCSmarties »

Steegy: I apologize if you were waiting all this time for feedback that never came!

What can I say, I was really busy these past few months and didn't get a chance to play with my Monkey at all! :roll:

I have looked at your script suggestion but not being a scripter myself I don't understand all of it. I think I get the gist though.

Some thoughts:

1. the most important fields would be LYRICS and COMMENTS, followed by the "description" fields such as Tempo, Situation, Mood, Rating...
After all, the other fields can be easily obtained when looking up tags, the problem are the fields with personal or customized information.

2. How about being able to select 2 directories and get the script to *suggest* a correlation based on the file name (or existing tags)?
That way one could re-tag entire albums in one go.

3. This is going to be outside the scope of a script.
An idea I have floated around on this forum some time ago would be a small application that can copy ALL ID3 frames
(based on the ID3v2 specifications, not their implementation in a particular tagger) from one track to another.
If the user could then remap these tags to "fit" a particular application, all "compatibility" issues would be taken care of!

You are right that the *way* how the script would work is not important.
Nevertheless, I would use this script many times as I got a ton of songs I would like to re-rip in a better quality than I did 5 years ago!
Al_G
Posts: 228
Joined: Tue Aug 31, 2004 6:01 pm

Post by Al_G »

MCSmarties wrote:Nevertheless, I would use this script many times as I got a ton of songs I would like to re-rip in a better quality than I did 5 years ago!
I wanted to re-rip my CDs too, and I ended up following the steps outlined above by Wolfgang. His guide was really helpful (thanks Wolfgang!). It took a couple months to do about 800 discs. It helped having two CD drives running at the same time. One extra step I added was using foobar2000 to add replaygain (album) values to the FLAC files, with file monitor picking up the changes in MM.
Post Reply