Name | Modified | Size | Downloads / Week |
---|---|---|---|
Parent folder | |||
Additional-Tagging-Tools-Plugin.zip | 2023-12-25 | 4.0 MB | |
Version 8.0 source code.tar.gz | 2023-12-25 | 3.5 MB | |
Version 8.0 source code.zip | 2023-12-25 | 3.5 MB | |
Totals: 3 Items | 11.0 MB | 0 |
ADDITIONAL TAGGING & REPORTING TOOLS PLUGIN
Plugin requires MusicBee version 3.5 or higher.
Note:
If you are familiar with the plugin quick update process, you can always download the latest plugin version here (NOTE: this latest version always requires the latest version of MusicBee, which sometimes may be available as a beta). Copy all files from the archive “mb_TagTools_latest.zip” to the MusicBee “Plugins” folder, overwriting existing files.
Note:
Plugin's advanced features are very sophisticated and can be confusing, though basic ones are pretty simple to use. But you can disable almost any part of plugin functionality (of course, you can re-enable any part later). Disabling any plugin menu item in settings hides not only the menu item itself but also turns off the entire corresponding plugin functionality.
Note:
Pay attention to tool tips over buttons/fields in plugin windows. Use help: Tools> Additional Tagging & Reporting Tools> Help.
Plugin adding/updating/removing
Extract content of the downloaded archive to a temporary folder of your choice. See the "README FIRST!" file inside this folder for instructions on adding/updating/removing the plugin.
TAGGING & REPORTING TOOLS
Copy Tag
Allows you to copy one tag to another for selected files. Its possible to append one tag to the end of another tag or add one tag to the beginning of another tag placing custom text between them. Also its possible to use <Null> pseudo tag as the source to append static text to the destination tag.
Note:
- There are a number of source pseudo tags which can be copied to (for example) custom tags, e.g. <Date Created> is file creation date.
Swap Tags
Swaps any two tags for selected files.
Notes:
- "Smart swap"/"Smart copy" option is important only for working with multiple artists/composers (it will convert list of artists/composers to ";" delimited string if destination tag doesn't support multiple values). Unchecking this option will preserve each byte of source tag, but it may be useful only if destination tag is used for temporary storage.
- Its possible to use the same source and destination tags for "Artist"/"Composer" tags in "Swap tags" command with "Smart swap" option enabled to convert ";" delimited tag to the list of artists/composers and vice versa.
Change Case
Changes letter case of a tag according to rather sophisticated rules for selected tracks.
Notes:
- Excluded words (if this option is ticked) remain unchanged, not become lowercased!
- You can make two or more steps changing casing rules and clicking "Reapply rules to new tag" button without saving changes to tags.
Library Reports
Allows to export some library statistics for currently displayed tracks to external file: HTML document (as a table), M3U playlist (its only possible to export file paths to playlists, but considering filtering capability of command this option may be useful), CSV file. This may be used for reimporting table in spreadsheet editor (including HTML table - its the easiest way to import track list to MS Excel) for printing statistics or just content of your library, filtered content of library or your playlists.
Notes:
- Command supports for two types of exported fields: grouping tags and aggregated functions. Every aggregated function is calculated for every unique combination of grouping tags. "Count" function counts the number of different values of a given tag. Other functions are obvious and should be applied only to numeric or duration tags (e.g. "Time", "File size", etc.).
- Any aggregated function can be saved to physically stored custom tag (of course this custom tag wont be updated automatically), so that this aggregated function could be used by MusicBee for sorting/filtering.
- For all aggregated functions except for "Count" function please make sure that all tag values used by function have the same measurement units (KB, MB, etc.) or adjust units in "Edit> Preferences> Plugins" window (not required if both MusicBee and Windows localizations are English or Russian).
- If you want just to export some tags then define only grouping fields in preview table (don't use aggregated functions and uncheck "Calculate subgrouping totals" checkbox, which is senseless in this case).
Also, "Library Reports" allows to calculate one or more presets and save results to (custom) tags at startup/after a given number of tag changes/or manually. Useful for autosaving or manual saving such values as "Summary play counts of albums" or "Number of tracks for each artist", etc. to (custom) tags, i.e. it's some analog of virtual tags with the ability to operate not only on tags of current track, but on tags of all tracks.
"Library Reports" supports multiple item splitters for grouping tags. For example, you can define splitter ; for "artist" or "'genre" tags to split multiple artists or genres. If several tags are split (i.e., several tags for one track may have several values) then all possible combinations of split values for every tag will be included in LR report.
"Library Reports" supports virtual tag expressions (any expressions valid for virtual tags).
Read more about "Library Reports" virtual tag expressions
"Library Reports" command adds new virtual tag function:
$LR(<URL>,function_id)
To use this function open library reports window, create one or several presets, each with one or several aggregate functions and assign a function id (any string containing a-z chars, numbers and symbols . : - _ ) to functions. Probably you will want to write all aggregate functions to <Null> tag (i.e. do not write them to any tags at all if you use these functions only for virtual tags). Also, you can at the same time assign an id to the function and choose to store function results in (custom) tag. In this case, LR will use a stored tag as a persistent, but dynamically updated, function cache.
"Library Reports" virtual tag functions allow to gather and display in the main panel some library statistics for currently displayed tracks.
Note:
- All $LR virtual tag functions are calculated, updated and displayed dynamically.
Example 1
If you want to get the number of albums of artist of displayed track, i.e. the number of albums (function "Count" of (parameter) tag "Album") per artist (tag "Album Artist"), you should add grouping tag "Album Artist" in the table and required function "Count(Album)".
Example 2
If you want to get the number of releases of artist (of displayed track) per year, i.e. the number of albums (function "Count" of (parameter) tag "Album") per year (tag "Year") per artist (tag "Album Artist"), you should add grouping tags (in order) "Album Artist" and "Year" in the table and required function "Count(Album)".
Example 3
If you want to get the total duration of all tracks of artist of displayed track, i.e. the sum of track durations (function "Sum" of tag "Time") per artist (tag "Album Artist"), you should add grouping tag "Album Artist" and function "Sum(Time)".
See two predefined presets "LIBRARY TOTALS" and "LIBRARY AVERAGES" of "Library Reports" command for more examples.
LR virtual tag functions may be even more useful if they are used in grouping header in "Albums and Tracks" view.
Make sure that you haven't accidentally checked some "Library Reports" presets for auto-execution. You will see warning message at the top of "Library Reports" window if any presets are marked as auto-executed:
View auto-executed preset example
Auto Rate
Calculates auto rating on the basis of the number of plays per day for selected tracks. Also its possible to auto rate all tracks of your library on MusicBee startup or update auto rating if currently played track is changed.
Another option is to calculate auto ratings defining the percentage of tracks of your library that should be assigned certain rating level (e.g. 1 star, 2 starts, etc.)
Reencode Tag/Reencode Tags
Even ID3V2 tags are usually stored not in UTF encoding (which is independent of language), but sometimes they are stored using national code pages. In this case reading ID3 tags is correct only if tags use the same encoding (in general - language) as your windows default encoding (code page). This command allows you to convert any incorrectly interpreted not UTF tags to UTF tags. In this command "initial encoding" is the suggested actual encoding of tag and the "used encoding" is incorrectly interpreted encoding of tag (Usually it's your default windows encoding. The only sense to change "used encoding" is if you get music file from another computer with different regional settings). "Reencode Tags" re-encodes all tags of selected tracks at ones. Cuesheets are supported.
Advanced Search & Replace
- "Advanced Search and Replace" works only with regular expressions.
- "Advanced Search and Replace" has savable/customizable presets.
- You can choose, which "Advanced Search and Replace" presets to automatically execute if any tag is changed and/or if new tracks are added to library/inbox.
- "Advanced Search and Replace" can search in one tag and make replacement in another tag.
- Single "Advanced Search and Replace" preset can make up to 5 subsequent replacements.
Notes:
- You can install/update predefined ASR presets by clicking "Install All"/"Install New" buttons.
- You cannot edit predefined presets, but you can copy them and edit the copy and/or delete them.
"Advanced Search & Replace" command adds new virtual tag function:
$ASR(<URL>,preset_id)
To use this function go to main ASR window, select preset and define preset id (any string containing a-z chars, numbers and symbols . : - _ ). Then use function in virtual tags, file organization templates, etc., where preset_id is the id entered in ASR window. ASR preset function will return last written in preset tag. To see last written tag click "Edit/Rename" button in ASR window or (if "Edit/Rename" is disabled) click "Copy" button and view the content of preset copy. Most preset functions will return exactly what you expect.
Note:
- All $ASR virtual tag functions are calculated, updated and displayed dynamically.
Make sure that you haven't accidentally checked some "Advanced Search & Replace" presets for auto-execution. You will see warning message at the top of "Advanced Search & Replace" window if any presets are marked as auto-executed:
View auto-executed preset example
Multiple Search & Replace
Multi-step search and replace. You can make unlimited number of replacements in the same source tag and write result to a given destination tag. MSR presets can be saved as special ASR presets and can be ticked in ASR for auto-execution if any tags are changed or if new tracks are added to the library.
Calculate Average Album Ratings
Command averages all the ratings of the individual tracks on the album writing result in an Album rating. Any tags can be used as album and track ratings. This may be useful for calculating average album rating for auto rating stored in custom tag.
Compare Tracks
Command provides easy way to compare tags of 2 (or more) tracks.
Copy Tags to Clipboard
Copies specified tags from selected files to clipboard.
Paste Tags from Clipboard
Pastes copied to clipboard tags to selected files from clipboard.
Notes:
- It's possible to copy tags from one file and paste them to more than one file.
- It's impossible to copy tags from several files and paste them to another number of files.
- It's possible to copy tags in MusicBee and paste them to another application like Microsoft Excel or Notepad++.
- In general, tags are pasted to tracks in the track display order, but you can also copy <Full path w/o ext.> (full track path including filename without extension) or URL (full track path including filename and extension) pseudo-tags (along with other tags) to clipboard. In this case, the plugin will prompt you to match tracks according to these tags or use the track displayed order as usual. It's not recommended to copy both path pseudo-tags to clipboard to avoid confusion, but just in case the URL takes precedence. If you choose to match tracks by path, the number of tracks from which the tags have been copied may not be equal to the number of tracks to which the tags are pasted.
Last Skipped Date/Time
Plugin has the option to store "last skipped date/time" in any writable tag (e.g. some custom tag). Go to MusicBee menu> Edit> Preferences> Plugins> Additional Tagging Tools> Configure. Click the button "Save last skipped date..." at the bottom of plugin settings window.
Plugin strictly follows MusicBee convention of what is "skipped track".
To define date type of custom tag, open MusicBee menu> Edit> Preferences> Tags (1)> Define New Tags> Configure Fields. Find "Custom1" tag (or some other custom tag), change type to "Date".
See here screenshot of this setting.
BACKUP & RESTORE
These commands allow to (auto)backup tags of all tracks in your library and restore them. First create full backup manually. You can do manual or auto incremental backups after this.
Note:
- "Backup & Restore" relies on MusicBee internal track IDs specific to the library. Because of this, you can't restore tags to a library other than the library from which the tags have been backed up. But you have an option for the plugin to save a copy of the track IDs to a custom tag of your choice, and to restore backed-up tags using this custom tag to identify tracks instead of actual track IDs. This will let you restore the tags to the new library containing the same tracks if you have recreated the library from scratch, e.g., on another computer. Make sure that this custom tag is stored in the file tag, not in the MusicBee database.
VIRTUAL TAG FUNCTIONS
This plugin introduces several new virtual tag functions (they also can be used in various filename templates, e.g. in the file organizer).
Note:
Use these functions like native MusicBee functions (i.e. without any initial setup required by $LR() and $ASR() functions). Everywhere you can use either literals or MusicBee tags of appropriate types as function parameters, e.g. $NumberOfDays(<Year>,<Original Year>) or $SubDateTime(<Date Added>,01/01/2000).
$Random(max_number) : random integer number between 0 and max_number (including them) $Now() : returns current date/time. Date/time format depends on your Windows regional settings, something like 11/01/2022 02:30:00 pm (for US regional settings) or 01.11.2022 14:30:00 (for European regional settings) $AddDuration(duration1,duration2) : adds duration2 to duration1. Duration format is dddddd.hh:mm:ss, where dddddd is the number of days (without leading zeros) and hh, mm, ss are hours, minutes and seconds (with leading zeros except for the most left zeros). If some most left parts of duration are zero, they are omitted (e.g., 260.02:20:05 or 5:25) $SubDuration(duration1,duration2) : subtracts duration2 from duration1 $MulDuration(duration,number) : multiplies duration by floating point or integer number, e.g. $MulDuration(<Time>,<Play Count>) $SubDateTime(datetime1,datetime2) : subtracts datetime2 from datetime1. Returns duration $NumberOfDays(datetime1,datetime2) : returns the number of days between datetime1 and datetime2 $AddDurationToDateTime(datetime,duration) : adds duration to datetime $SubDurationFromDateTime(datetime,duration) : subtracts duration from datetime $SentenceCase(string,upper_case_words,sentence_separators) : upper_case_words will become uppercase. sentence_separators is the list of characters, after which the words will become capitalized. Characters in the sentence_separators list may be separated by spaces or not separated at all. For example, these two character lists mean the same: ". , -" and ".,-". A dot, followed by a space, is always treated as a sentence separator. You can omit any parameter except for the first one, using a single character ` not surrounded by spaces to pass empty parameter. You can safely use character ` in its literal meaning if it’s typed in the list along with other characters or using a single character ` surrounded by spaces. If you are using the plugin with MusicBee 3.6 or later, then you can omit any number of end parameters simply by putting closing parenthesis earlier, e.g., $SentenceCase(string) or $SentenceCase(string,upper_case_words) $TitleCase(string,lower_case_words,upper_case_words,word_separators, lower_case_words_between_brackets,sentence_separators) : where lower_case_words is the list of words separated by spaces, which will become lowercase (always except for the first word and except for the last words if not lowercase by other parameters). upper_case_words will become uppercase. This rule overrides all other rules. lower_case_words_between_brackets is the list of words which become lowercase between brakets. The current list of brackets is ( [ { and ) ] }. sentence_separators, is the list of characters after which the words will become capitalized (switching off all exceptions, e.g. lower_case_words, besides the words from the upper_case_words). The first word will always be capitalized (besides the words from the upper_case_words). It’s recommended to enclose the last four lists into quotes (e.g., "\& . -"). Characters in all character lists may be separated by spaces or not separated at all. For example, these two character lists mean the same: ". , -" and ".,-". You can omit any parameter except for the first one, using a single character ` not surrounded by spaces to pass empty parameter. You can safely use character ` in its literal meaning if it’s typed in the list along with other characters or using a single character ` surrounded by spaces. If you are using the plugin with MusicBee 3.6 or later, then you can omit any number of end parameters simply by putting closing parenthesis earlier, e.g., $TitleCase(string,lower_case_words,upper_case_words) $Sqrt(number) : square root. May be useful for collecting some library statistics (in conjunction with LR functions) $eq(number1,number2) : compares two integer or fractional numbers, determines if number1 is equal to number2, e.g. $eq(1.0,1) returns "T" $ne(number1,number2) : returns "T" if number1 is not equal to number2, otherwise returns "F" $gt(number1,number2) : returns "T" if number1 is greater than number2, otherwise returns "F" $lt(number1,number2) : returns "T" if number1 is less than to number2, otherwise returns "F" $ge(number1,number2) : returns "T" if number1 is greater than or equal to to number2, otherwise returns "F" $le(number1,number2) : returns "T" if number1 is less than or equal to number2, otherwise returns "F" $Round(number,number_of_digits_after_decimal_point) : $Round(4.28,1) returns 4.3, and $Round(5.2,0) returns 5 $RoundUp(number,number_of_digits_after_decimal_point) : $RoundUp(5.2,0) returns 6 $RoundDown(number,number_of_digits_after_decimal_point) : $RoundDown(4.28,1) returns 4.2 $Name(<URL>) : returns file name without extension and path to file. Type <URL> exactly like this, don't use other function argument value $DateCreated(<URL>) : returns creation date/time of music file (not last modification date/time) $Char(hexadecimal_code) : returns Unicode character with given hexadecimal_code, e.g. $Char(a7) returns "§" (U+00A7) $CharN(hexadecimal_code,decimal_number_of_times) : returns Unicode character with given hexadecimal_code repeated the given number of times, e.g. $CharN(a7,3) returns "§§§" (U+00A7 repeated 3 times) $TagContainsAnyString(<URL>,tag_name,string1|string2|etc.) : returns "T" if tag contains any of the strings separated by |, otherwise returns "F". tag_name must be written without angle brackets, e.g. $TagContainsAnyString(<URL>,Lyrics,water|river) $TagContainsAllStrings(<URL>,tag_name,string1|string2|etc.) : returns "T" if tag contains all strings separated by |, otherwise returns "F"
ASR SPECIAL FUNCTIONS
You can use special functions in substitution fields of "Advanced Search & Replace" and "Multiple Search & Replace" commands:
\@null[[]] : returns "null" Unicode character \@char[[hexadecimal code]] : returns Unicode character with given hexadecimal code, e.g. \@char[[2f]] returns "/" \@tc[[string;;excepted words]] : returns Title Cased string except for given words separated by spaces, e.g \@tc[[$1;;a the an>]] will return title cased (except for words "a", "the", "an") 1st captured in search pattern string, and \@tc[[$1]] will return title cased string without any excepted words. Excepted words will become lowercased. \@lc[[string;;excepted words]] : returns lower cased string except for given words. Excepted words won't be changed. \@uc[[string;;excepted words]] : returns UPPER CASED string except for given words Excepted words won't be changed. \@sc[[string;;excepted words]] : returns Sentence cased string except for given words Excepted words will become lowercased. \@eval[[virtual tag expression]] : returns result of calculation of virtual tag expression, e.g. \@eval[[$Sub(<Play Count>,<Skip Count>)]] \@repunct[[string]] : changes Unicode punctuation marks to ASCII analogs, e.g. « to <<
APPENDIX
License
Public Domain.
Backup download
Google Drive, all my plugins and their sources
SAST Tools
This project has been checked by PVS-Studio. PVS-Studio - static analyzer for C, C++, C#, and Java code.