mp3 tag manipulation utility

MP3 singles utility (v5.3 June 2020)

5.3: Added checkbox to check1. Made all listboxes selectable. On ENTER selected text is copied to clipboard. This can be copied to text editor for further analysis.
5.2: Adds support for subdirectories and multi range rating playlists.


Why I started creating this utility.

My utility is written in visual basic using Visual Studio 2019. It uses .NET framework 3.5 SP1. The user settings in the program are stored in a config settings file. This is a file named "user.config" and should be located in the %appdata% folder. On my computer this was stored in "C:\Users\ron\AppData\Local\Ron_Jut\SinglesUtil.exe_Url_a1n5ti3peojnxd0awmqcpwsqldyqqtkf\". On another installation this might be different.

Here is a download link to version, if you want to use the utility yourself at your own risk. Make a backup of your files first before using the utility! The utility has never messed up my mp3 files but it is better to be safe then sorry. The exe file is the result of the release built, it would need .NET framework 3.5 SP1 installed on the computer you run it on. A modern Windows 10 installation should already have this.

Alternatively you can download the published version. This is a .zip file that includes 3 more files:

Contents of publish zip file

Download the zip and unpack. Click on "publish.htm" to install.

The mp3 collection.

The utility has a tabbed interface with a separate tab for each check or function. The first tab is used for the selection of the mp3 folder.

SinglesUtil: Screenshot of input folder screen

If the input folder does not exist the box will show a text asking you to select a folder and the list remains empty. To include subfolders in the list check the box. Files with another extension than .mp3 are ignored. The gridview shows the files and paths that are read. The list can be sorted by clicking on the headers.

Explanation of check1.

SinglesUtil: Screenshot of check1

This checks if the words in the artist and title are in so-called Titlecase, i.e. each word starts with a capital. Some exceptions are allowed like vs and ft. With the checkbox you can surpress the 'ignore' messages. When the check finds something that does not seem right then it will list it in the textbox. The file itself is not actually changed. You have to do this yourself. Once you made changes you need to run the utility again.

Explanation of check2.

SinglesUtil: Screenshot of check2

This checks if an artist and title combination exists both with and without a 'The'. If one is found then this is listed in the box. You have to make corrections yourself, e.g. delete one of the 2 files.

Explanation of check3.

SinglesUtil: Screenshot of check3

This checks if artists exist with almost the same spelling. This could indicate a typing error. Found entries are listed in the text box. Again, you have to make changes to the file names yourself.

Explanation of ListTags function.

SinglesUtil: Screenshot of ListTags function

This function generates a text file with the found ID3v2.3 frames in the mp3. The function does not actually check if a found frame name is part of the ID3v2.3 definition, nor does it check if the payload of the frame is correct. So this function also lists all 'invalid' ID3v2.3 frames.
The text box shows all lines that are written to the file.

Below is an example of a entry in the output file:

Ava Max - So Am I.mp3;Info:ID3v2.3 length (bytes)=95581, Info: Padding bytes=4329;;TALB;9;0;TPE1;9;0;TIT1;8;0;TCON;5;0;TLAN;9;0;POPM;23;0;TIT2;9;0;TRCK;3;0;USLT;2036;0;TYER;6;0;APIC;89024;0

The length is the total size of the ID3v2.3 tag, till the start of the mp3 audio. The padding is the number of bytes between the end of the last frame and start op mp3 audio. Then a list of found frame names followed by the length of the frame in bytes and the flag byte. The actual pay load of the frame is not shown. The flag byte is typically 0. An explanation of the frame names can be found at the ID3 web site.

The name of the output file name can be changed in the user.config file. The folder is always the same as the playlist folder. So make sure you select this first before running this function. This "user.config" file can be found in the %AppData% folder. Something like: "C:\Users\ron\AppData\Local\Ron_Jut\SinglesUtil.exe_Url_a1n5ti3peojnxd0awmqcpwsqldyqqtkf\". The file is in xml format and can be edited with a plain text editor.

Explanation of the LyricsLanguage function.

SinglesUtil: Screenshot of LyricsLanguage function

This function can change the language code of the embedded lyrics in the mp3. These language code are often simply set to 'xxx' or 'eng' even if language of the lyrics is another one. Before you run this function you want to copy a set of mp3 with a specific language to a separate folder. This function simply changes all the lyrics codes in all mp3, regardless of the TLAN frame that may be present in the mp3. This function does not alter the TLAN tag, this can be done with editing tools like Mp3tag. No check is done whether the entered language code is actually a valid href="">ISO639-2 definition. For instrumental tracks ISO639-2 has defined the code 'zxx'.

Explanation of the delete frame function.

SinglesUtil: Screenshot of RemoveFrame function

The function can remove all unwanted frames from the mp3 files. The function does not actually check if a frame name is part of the ID3v2.3 definition, nor does it check if the payload of the frame is correct. So this function will also remove 'invalid' ID3v2.3 frames and its payload. Space that becomes available when frames are removed are padded with zeroes. So the file size does not change. This is a valid and common technique used in ID3v2.3.

Explanation of the Playlist tool.

SinglesUtil: Screenshot of Playlists function

This function generates playlist files depending on the contents of the ID3v2.3 frames. The grayed out option I have not supported yet. The generated files have a .m3u extension but the contents is a simple list of mp3 files, e.g.:

New\Dermot Kennedy - Power Over Me.mp3
New\Billie Eilish - Bad Guy.mp3
New\Danny Vera - Roller Coaster.mp3
New\Ava Max - So Am I.mp3

So this does not follow the M3U definition but the players do not have a problem with this. Winamp plays these playlists without problems. The text format of the playlist files is UTF8. This means it also handles special characters such as ö or ü correctly.

Make sure to select the location for the playlists correctly. This is used to calculate the relative path from the playlist folder to the mp3 folder. If the playlist is moved later to another folder then the playlist will no longer work because the relative path is no longer correct. Because the paths used in the playlists are relative you can move the mp3 files together with the playlists to another location as long as the relative path remains intact. Note that this function APPENDS to existing files if they already exist. So you may want to delete files already present in the playlist folder.

Starting in version 5.2 I added an option to generate a playlist for a range of ratings. This means that a song with e.g. rating 2 is not only copied to e.g. 'PlaylistRating2star.m3u' but also to 'PlaylistRating1-5star.m3u' and also to 'PlaylistRating2-5star.m3u'. The song is copied to the lower rating lists. This way you can have 5 additional playlist where the rating of the song is a minimum value. So 'PlaylistRating3-5star.m3u' will contain songs with a rating of 3 and higher, 'PlaylistRating4-5star.m3u' will contain songs with a rating of 4 and 5 only.

For my 6000+ collection and all options checked this function takes a few minutes to execute. Sometimes, during execution, the progress bar and listbox freeze but the cursor remains spinning. In this case the utility is still running but for some reason the screen is no longer updated. This also happens sometimes with the other checks but usually only with larger collections.