acxi changelog:

acxi version: 3.6.01
acxi date: 2024-03-07

The following is the acxi changelog

================================================================================
Version: 3.6.01
Patch: 00
Date: 2024-03-07
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Repo is moved to Codeberg.org. Will mirror to github for a while, but eventually 
plan is to remove the mirror.

--------------------------------------------------------------------------------
SPECIAL THANKS:


--------------------------------------------------------------------------------
KNOWN ISSUES:


--------------------------------------------------------------------------------
BUGS:


--------------------------------------------------------------------------------
FIXES:

1. For tag file prefill, failed to block subsequent occurances of performer line 
start triggers. Added in a completed boolean to avoid this issue. Problem is
when info file has the initial band members list, but then the word Band or 
other triggers occurs after the first empty line after the performer list.

--------------------------------------------------------------------------------
ENHANCEMENTS:


--------------------------------------------------------------------------------
CHANGES:

1. Changed where relevant github urls to codeberg.org urls.

--------------------------------------------------------------------------------
DOCUMENTATION:

1. MAN: Fixed troff error.

--------------------------------------------------------------------------------
CODE:


--------------------------------------------------------------------------------
-- Harald Hope - Thu, 7 Mar 2024 13:31:53 -0700

================================================================================
Version: 3.6.00
Patch: 00
Date: 2023-01-23
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

The initial mp3 based review of tagging led to a major update: the new TagList 
class/package for --taglist. This sends acxi to 3.6.00 since this is a 
significant set of new features, and creates an entire new type of 
functionality, which also blends very well with newer and existing 
tagging/prefill type features. 

The preceding changes were started with a more basic MP3 tag update, which added 
tags that are same in id3v2.3 and id3v2.4 and have FLAC equivalents. Also used 
this as an excuse to also review and add some Vorbis tags that make sense for 
acxi to include in auto.tag and tagging/prefill features.

Also went through many features, documentation, etc, fixed logic errors, 
inconsistent logic/docs errors, and added more public documention.

--------------------------------------------------------------------------------
SPECIAL THANKS:

1. Once again, to the people who helped make free / libre audio possible, and in
particular, the people who worked so hard for so long at xiph.org to provide the
world with the codecs and tools we now use to listen to and work on audio.

2. To fourtysixandtwo, the acxi packager for Slackware (slackbuilds). The new 
--taglist option was his suggestion. This is turning out to be really good and 
useful already, since it allows for easy bulk testing of entire sets of 
recordings at once, which acxi can then be used to correct.

--------------------------------------------------------------------------------
KNOWN ISSUES:

1. SYNC: Because MP3 tagging changed too much between versions, only 
id3v2.3/id3v2.4 tags that are the same between versions AND have Vorbis 
equivalents are supported.

Good tag FLAC > MP3 id3v2.x mapping resources: 

https://wiki.hydrogenaud.io/index.php?title=Tag_Mapping
https://docs.mp3tag.de/mapping/
https://docs.mp3tag.de/mapping-table/

2. AUTOTAG: The tag SUBTITLE in Vorbis/FLAC is super specific, and should be 
avoided. https://web.archive.org/web/20120429102447/http://reallylongword.org/\ 
vorbiscomment/

"SUBTITLE: This field is intended for use with FLAC, in order to connect 
specific titles with an embedded cue sheet. A single file can effectively 
contain multiple works, indexed by TRACK and INDEX in the case of cue sheets, 
and they can be specified using subscripts like “SUBTITLE[TRACK 3]” or 
“SUBTITLE[TRACK 7:INDEX 2]”. This should only be used for the case of multiple 
works in the same file and not for cases where a single work has multiple 
titles."

3. TAGLIST: With certain Vorbis tags when output to Perl, that contain cp-1252 
windows characters, Perl simply crashes, or appears to be crashing, when those 
get output to screen. This happens currently only with -L [acfi], and basically, 
the crash happens when the data is being printed out. You can still find which 
track it was to manually correct the tags with acxi, but as far as I know, there 
is no way to trap this error and handle it more elegantly since it either just 
hangs, or crashes, depending on whether print to screen or Dumper print to 
screen. Dumper just crashes when it hits that string.

--------------------------------------------------------------------------------
BUGS:

1. TAG: In --tag, it was changing directory to SOURCE_DIRECTORY, but failed to 
remove that from the file string, so tag updates failed unless you were using 
-s ./. I hadn't noticed that because I almost always use -s./ with -T.

This led to things like --glob failing too, since it was never working from the
right directory in terms of the path/filename metaflac received.

2. OPTIONS: --nlink would never have worked because it was missing the 'n' 
('link').

3. INFOFIX: Bug with date fix, was always showing true for test for dd-mm-yyyy 
type, which could lead to failure to then update those dates.

--------------------------------------------------------------------------------
FIXES:

1a. SYNC: For mp3 tagging, was using DATE, didn't check for YEAR, but mp3 is very 
likely to fail if you put a date in that value. Now checks for YEAR first, and 
falls back to using year (YYYY) extracted from DATE. 

Note that DATE is supported somewhat, but syntax differs between:

DATE: 
Vorbis: DATE id3v2.3: TDAT; id3v2.4: TXXX:DATE 
or
RECORDING DATE: 
Vorbis: DATE: id3v2.2: TYE+TDA(+TIM) id3v2.3: TYER+TDAT(+TIME[22]) id3v2.4: TDRC 

Docs don't agree, so not using DATE in mp3 except to extract year. Note that 
--ty handles the year so we don't need to worry about what the literal syntax 
is.

I don't want to get into detecting idv2 subversion, this is a messy non-free 
codec and it shows by how poorly they did tagging version to version, as well as 
how focused on corporate interests their efforts were. 

1b. SYNC: sync was not showing cmd message for --dry, but also was poor code, 
repeated, switched to use --dbg 5 command debugger or in --dry mode, to show 
command with --dbg 5, or the simple tool command with --dry. Previously didn't
show anything, just 'Would have run:'. That was an oversight, must have messed
that test mode up a long time ago. But now works much better because you can 
either see simple mode, or full command debugging mode, which integrates that 
to the new $dbg[5] command debugger globally.

1c. SYNC: Never showed that mkdir and copy file were running in test mode, now 
shows Test mode: for all 3 syncing actions if verbosity > 0.

2. PREFILL: Some of the prefill field names didn't fully match the listed 
possible values. Also made all 2 word type field names support space, -, _, or 
no space.

3. TAGLIST/SYNC: Added --no-utf8-convert to main::get_flac_tags(), this is for 
all types, mp3, replaygain, and full tag lists.

4. INFOFIX: Was missing a date variant: dd-month-yyyy

5. SYNC/AUTOTAG/TAGLIST: Flac tag reader wasn't escaping file name, which led to 
name with $ failing. Also, the mp3 tag string generator was passing the file 
name in double quotes, which meant that the $ string was being treated as a 
scalar and would have been empty as well. Or maybe caused perl to exit with 
error since non declared variable was being attempted.

6. AUTOTAG/PREFILL: Removed ISRC tag from main body of auto.tag, that is a per 
track always file, it is a unique idenitifier (or idenfiers in rare cases, like 
musicbrainz) per file. I had always thought it was a per recording, not track,
id, but that is wrong.

7. IMAGES: -RI to trigger --image-remove has not worked in a long time, that's 
now corrected so -I accepts no value with -RI, -I remove, -I image, or -RI image 
as originally intended.

8a. OUTPUT: Added $line_small when no info.txt file found for --infofix, forgot 
that.

8b. OUTPUT: Made $line_small more consistent across -Z, -X, and -L to separate 
directory processing items.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. TAGLIST: New features: --taglist/-L. Depending on switches, can generate full 
report of all tags per FLAC file in directory, a condensed version of those 
tags, or data for creating an info.txt file. As with -X, w writes the data to 
the file(s).

* a: switch output file from taglist.tag to auto.tag, and change tag:value 
separator from '=' to '%:'

* c: generates condensed data from flac tags for tag list. For tags that do not
occur in every file, adds tags before block of tags that use them, and either 
replaces them with next value. or if file does not have that tag, UNSETs the
tag.

* f: generates full taglist data. This is default if no args used. Adds UNIQUE 
value TAGBLOCK which forces non cascade of tags per file. This is what you want, 
so don't change that.

* i: generates info file data from flac tags for screen/info.txt.

* s: skips file exist tests, so will always run in each directory. Not used with 
'w'.

* w: writes a, c, i, or f data to respective info.txt, taglist.tag, or auto.tag 
files.

i + [cf] can be used together. a activates c by default, unless you specify f. c 
and f can't be used together. s can't be used with w.

In latest testing, -Lc is generating the same set of condensed tags the original 
files contain, minus some corrected tags, like having 'ALBUM ARTIST' and 
ALBUMARTIST tags in the same file, or 'TRACKTOTAL' and 'TOTALTRACKS'. This was 
seen in musicbrainz picard tagging at times. 

2. AUTOTAG: AutoTag::process_tags() now handles multiline tag values. Which 
should be avoided because very few media players support those correctly. But 
needed since --taglist a/c/f support multiline tag values.

3. AUTOTAG/AUTOTAG-CREATE: Added --unique, which allows setting one time list 
of tags to use only 1x in the file following that tag in the auto.tag file. This 
can be used with -A, -S, -M. This will add that list of single use tags to an 
existing auto.tag file with -A. Adds that set of tags to the per track tag list, 
which are handled differently than block type tags, which can apply to > 1 file 
per set. 

Only supported for auto.tag creation with -C/-S/-M, or to force the list into 
the tagging with -A if it was not set in auto.tag already. The TAGBLOCK value 
tells -A to discard all previously found tags after each file processed. This is 
only useful with -Lf generated auto.tag files that have complete sets of tags 
per file. 

-Lf sets a UNIQUE value TAGBLOCK automatically.

-La/-Lc UNSETs tag after last file that used that tag if the previous value is 
not replaced by a new one and the next file did not contain that tag in the case 
of multi use of a tag situations, so you don't need to do anything there.

4. AUTOTAG/PREFILL/TAGLIST: Added --autotag-file/--atf/--af for one time changes 
of auto.tag file name. This was an oversight, but never had cause for it until 
testing -La exposed the utility of being able to change auto.tag name to 
something else.

5. AUTOTAG/PREFILL: To auto.tag generator, added CONDUCTOR, MIXER, PUBLISHER, 
REMIXER, and variants for prefill, like:

CONDUCTOR: Conductor, Conducted by.
MIXER: Mixed by, Mixer, Mastered by, Masterer.
PUBLISHER: Publisher, Label
REMIXER: Remixer, remixed by, remasterer, remastered by.

6. AUTOTAG/TAGLIST: Added WORK, SUBTITLE, TITLESORT tags to list of supported 
tags for tagging, but not to auto.tag because those are made for very specific 
purposes and are unlikely to be used correctly. See Known Issues 2. Also added a 
number of track file specific tags like REPLAYGAIN*, ACOUSTID*, etc, to the 
track tags list for -Lc, -La, and -A. This means that track specific tags that 
should never be carried over to next file are now protected much better. While 
hard to get a complete list of tags that must only occur per file, never common 
between files, very good progress was made to tighten this down.

7. IMAGES: Added --image-remove as synonym for -R, --remove-images

8. SYNC: Significantly expanded MP3 tags. Mapped all acxi tags in auto.tag/--tag 
that have native mp3 id3v2 tags. Now supported:

ALBUM ALBUMARTIST ARTIST ARTISTSORT COMMENT COMPILATION COMPOSER CONDUCTOR 
COPYRIGHT DATE DESCRIPTION DISKNUMBER DISCSUBTITLE DISKTOTAL GENRE ISRC LABEL 
MEDIA MOOD MOVEMENTNAME ORGANIZATION PUBLISHER REMIXER SOURCEMEDIA SUBTITLE 
TITLE TITLESORT TRACKNUMBER TRACKTOTAL YEAR
		
Note that because id3v2.x either doesn't have comparable DATE, LOCATION, OPUS, 
PERFORMER, PRODUCER, VENUE tags, or v2.3 name is different from v2.4, those tags 
are not supported.

9. VERSION: Added $self_patch to allow for checking development patch versions, 
like pinxi uses. Helpful to make sure you have the right version. Also added to 
--help (and date). This can be helpful during active development.

acxi --version
acxi version: 3.5.06-14 (2023-01-10)

10a. OPTIONS: Added --glob as alternative to --source-glob/-g. 

10b. OPTIONS: Added --config/--configuration, to show you current active 
configuration values. Shows first to last found, last overrides previous.

11. OUTPUT: Added new print line type: $line_result. This is used to separate 
result blocks from processing blocks, before was using $line_small for both 
types. this is used in -X, -L, --config, and -C/-S/-M --dry. See CHANGES 2.

--------------------------------------------------------------------------------
CHANGES:

1. CONFIG: Configuration item TAG_FILE has been changed to AUTOTAG_FILE, but 
TAG_FILE will keep working. This is because we needed non-ambiguous names with 
new TAGLIST_FILE configuration item.

2. OUTPUT: Changed print line small: 

-----------------------------------------------------------------

to print line result:

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

for blocks of results in --config, -L, -C/-M/-S --dry, -X. This makes it 
easier to tell the results apart from the processing blocks.

3. AUTOTAG-CREATE: -C, -S, -M should not be allowed to run external to the 
directory that contains the flac files, that's too risky, so disabled that. I 
think that was an oversight.

4. DEBUG: Removed --debug, replaced with specific --dbg x(,y) options globally. 
See CODE 3a, 3b.

5. SYNC: Changed default output type to '', ogg is deprecated, and acxi should 
not promote it as default. I don't want to assume what people might have been 
using before. Added $OUTPUT_TYPE set test for sync to force explicit set in 
config file or with -o. Added --config so people can easily check their configs.

--------------------------------------------------------------------------------
DOCUMENTATION:

1a. MAN: Forgot to list AIFF as input type for FLAC output type.

1b. MAN: Added MIXER and REMIXER to --prefill tags. Also cleaned up and made 
more consistent prefill tag listing.

1c. MAN: Updated man page debugger section for --dbg xx triggers.

1d. MAN: Added more granular man docs for --dbg

1e. MAN: Fixed typo for config file path, had $HOME/.conf/ not .config/.

2. OPTIONS: Updated top part to have better examples with long and short forms.

3a. MAN/OPTIONS: updateed for -R/-I cleanups and corrections, and to make actions/
choices more clear.

3b. MAN/OPTIONS: Updated to add --glob.

4. MAN/OPTIONS/README.txt/: added for new --taglist, --taglist-file, --unique 
options.

5. AUTOTAG-FILE: Sample auto.tag file, updated to add new tags and comments.

6a. DOCS: Created docs/acxi-values.txt to document internal acxi values. 

* @dbg - the old --debug was too generic to be useful in real development.

* %run, %test, scalar assignments - document internal use of these variables.

* verbosity levels, and triggering switches.

* configuration items. Always see man for full explanations.

6b. DOCS: Overall, made sure man, help, acxi-values.txt, and internal logic are 
the same. Surprising number of oddities had crept in, cleaning those up as they 
get discovered.

--------------------------------------------------------------------------------
CODE:

1a. TAG DATA: Refactored flac2mp3_cmd() to make more flexible. Made it return 
hash ref, not hash.

1b. TAG DATA: Extended main::get_flac_tags() to return 'all' tags in flac file, 
for new package TagList. Changed old 'standard' to 'flac-mp3', since that was 
used only to get flac to mp3 tags. Totally rewrote get_flac_tags as well, to be 
more robust and dynamic.

2. Switched to qw(...) in some tag lists that are being updated frequently.

3a. DEBUG: Added --dbg [x-xx] for granular debugging. Added dbg switch docs in 
docs/acxi-values.txt. 

3b. DEBUG: Changed all previous $b_debug to more granular $dbg[x] tests, and 
added many commented out say debugging items now that they can be switched off 
and on in a more granular fashion.

4. OPTIONS: Major refactor of OptionsHandler, which had gotten messy and hard 
to follow/read/use. Also got rid of the hack I used to turn off features by 
setting to 0 in each major option item. Now all that is handled in 
OptionsHandler::set_switches() and OptionsHandler::verify_selections(), and 
options themselves only switch on $run and $test switches and assign values.

5a. SYNC: Changed to explicit sync switched on only if no other actions conflict 
in OptionsHandler::set_switches(). This was previously always set to 1, true, on 
top of acxi by default, now it's only set to true if no conflicting options are 
used.

5b. SYNC: Refactored SyncCollection::convert_file(), that had a lot of 
repetetive code, and also switched it to use $dbg[5] show $cmd debugger for both 
active and --dry mode, or just the tool name/path in --dry mode. See FIX 10.

6. IMAGE: Redid $run{'image-embed'} and $run{'image-remove'} logic, and made 
more predictable and understandable, which is how the failure had crept in.

7. VALIDATION: Validation had a legacy $b_error in every sub which is redundant 
since $error_message can be tested t/f in all cases, removed all those.

--------------------------------------------------------------------------------
-- Harald Hope - Mon, 23 Jan 2023 15:00:00 -0800

================================================================================
Version: 3.5.06
Patch: 
Date: 2022-12-26
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

A big prefill/infofix release. Many more possible info file syntaxes handled, 
new -X fix options, corrections, bug fixes. This has been tested heavily on a 
fairly large untagged concert collection (Grateful Dead shows), which had a very 
good set of random ways of creating the info files, with varying syntaxes and 
methods, so this was in essence an ideal training set. Though objectively, any 
set generated over decades by random people is going to have most of the 
randomly possible options.

A long time weakness is handled, now -Xc maps windows CF-1252 characters like 
magic quotes to ASCII. These are really common because so many people use word 
document type formatting to generate magic quotes etc.

Also features a big usability boost for help and man page, now lists in more 
granular style, with order in help and man made the same. Broken into 
Input/Output, Synching, Tagging, Checksums, Miscellaneous, and Debug/Output 
controls. Over last years, a lot of feature sets have expanded, or been created, 
making it harder to find the stuff in help or man. As with inxi, also added a 
table of contents to the man page, which has gotten quite long, so users can 
know which section to look for options.

--------------------------------------------------------------------------------
SPECIAL THANKS:

1. All the pioneers over decades who helped create the entire concept of live 
audience recordings, first and foremost, of course, the entire Grateful Dead 
tape trading network, which created etree and archive.org type live concert 
distribution, not to mention the original torrent tools to finally replace the
awful tape dubbing that had been the only option before that. 

--------------------------------------------------------------------------------
KNOWN ISSUES:

1. Failing to use the Tracklist terminator strings can lead to the info file 
getting unwanted changes to items after the set/track list. Solution of course
is to just add the terminator, but it's worth mentioning anyway.

2. If more than 1 date is in a line, the second one gets ignored. This is too 
hard to fix, and would not really matter in almost all cases anyway.

3. -Xc fails to handle any non european type character sets, and only handles a 
subset of CP-1252, but the most important one, the magic quotes/n,m dashes, 
elipsis, etc. This is fine, there's a limit to what can be done safely with 
character encoding corrections.

--------------------------------------------------------------------------------
BUGS:

1. In certain cases, -Xd got confused, and added extra block to the ISO date, 
like 1966-11-25 > 1966-01-01-25. This was caused by insufficiently greedy 
patterns for the number separators, which then led to certain mm dd getting 
trapped one at a time (mm == 1, dd == 1) instead of as pairs separated by date
separators like -, ., _, /.

2. Configuration file processor was removing spaces from user configuration 
values, that can lead to incorrect results, like turning: Bill Monroe to 
BillMonroe.

--------------------------------------------------------------------------------
FIXES:

1. Forgot some words in -h for -M.

2a. INFOFIX: -Xn was treating times starting track title, like 5:43, as track 
numbers because it was using :\s*, not :\s+, which led to undesired outcomes.

2b. INFOFIX: replace tabs with a space, tabs are just annoying in the context of 
.txt files, and create odd layouts, since they always assume x spaces per tab, 
but that behavior is not actually set in stone.

2c. INFOFIX: d/k found yet another variant, dd/mm/yyyy, added pretest to 
determine which is being used, since you can't tell say, 09.08.2020 so it looks 
for a day greater than 12 in the first or second position, then assigns the type 
to use based on that pretest. Be aware of possible situation where two types 
were used in the same file!

3. -i was triggering $test{'sync'} which is not correct, you should be able to 
set input types for non syncing actions, since some of those only work with 
specific codecs, like FLAC.

4. Slightly risky update, adding (20)?3x year ids, which could possibly trip bad
day of month == 30, 31, but then again, so could dom == 29.

5. PREFILL: added stripping of ';', '%' from end of track title. 
Those have some meaning for Grateful Dead stuff but not relevant for track 
titles in tags. Also added support for > 1 ([\d:.]+) at end of track.

6. PREFILL: reduced limit to first occurance of BAND/Linup performers prefill.
This allows for multiple lineups in one performance without having to move them
around in the info file. 

7. SYNC: removed translate filter for file name: $dest_file =~ s/\`/\'/g;
This makes --clean remove say, 'Dan`s Song' each time.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1a. PREFILL: Added the following field names:
* 'Artist / Band' to ARTIST prefill field name list.
* 'Media', 'SourceMedia', 'Source Media', 'Source-Media' for SOURCEMEDIA tag.
* 'Producer', 'Taped by', 'Recorded by' for PRODUCER tag.

1b. PREFILL/AUTOTAG: Added CDDB, ETREE, ISRC, SHNID tags. ETREE and SHNID are 
not an official tag from vorbis/flac, but might be useful for bands that have 
etree ids or shnids, that way it can go somewhere in the tags, as well as being 
a possible field name for prefill. 

If etree/shnid id present, append to end of ALBUM like this: ' (etree [id])' or 
' (shnid [id])'. 

1c. PREFILL: Added option to add a terminator after the Setlist/Tracks block to 
stop creating and counting tracks. This helps when there are numbered comments, 
numbered per track notes, and so on, which could then trigger a track count 
mismatch exit error. Also makes it so you don't have to do anything to the info 
file other than add the terminator string. Supported (not case sensitive):

One or more: ':^<>' followed by zero or one ES, ESL, ET, ETL, END, END\-TRACKS, 
END_TRACKS, END TRACKS, END\-SETLIST, END_SETLIST, END SETLIST, terminating in 1 
or more ^_<>.

Must be only characters on line. '_', '-', '=' not supported because things like 
------, =======, ________ are a common part of info file full line values.

1d. PREFILL/OPTIONS: Added option --prefill-tag/--pt/--pft to add temporary 
--prefill tag completions, so you don't have to do the same thing over and over. 
Can be used as option or configuration item. Remember to undo it when you are 
done with job if you used the configuration option! Uses same syntax as 
--tag/-T. This allows setting fields for prefilling either on a per recording, 
per recording group, or always.

PREFILL_TAG=GENRE%:Heavy Metal^^IMAGE%:cover.jpg

If you use the configuration item, remember to remove the value after you are 
done with the current job, or it will always get used. These values override 
everything else in prefill, so use with caution.

--prefill-tag=UNSET unsets the configuration value temporarily, or replaces it
with the supplied tag values.

1e. Added alternate lineup starter values, so:
****Lineup this evening:
would start the lineup prefill. Goal here is to not have to change source info
files, or to change as little as possible, while keeping the syntax predicable.

1f. PREFILL/INFOFIX/OPTIONS: Added alternates --info-file, --if, --pf for 
--prefill-file. Also made it active for --infofix, not just -S, -E autotag. Also 
fixed validation which was a little too tight on that combo.

2a. INFOFIX: For -Xn, added support for common legacy numbering syntaxes: d1t12, 
t12, s1t12, and less common 123-d1t23.

2b. INFOFIX: Extended -Xm, -Xn, -Xt to also use prefill track list terminator 
method.

2c. INFOFIX: Added -Xm which attempts to add parenthesis around track times so 
that the times don't get included in the track TITLE info. Also changes corner 
wrapping with |...| to (...) Also moves time at start of title to end of title, 
some people do that one, oddly enough.

2d. INFOFIX: Added -Xv. This adds an FFP verified to the q report. FLAC only. If 
errors, shows the full file report, which can be useful. Note that running ffp 
verification is slow. This is the same basic tool that --checksum-verify/-V 
uses, with md5 checks disabled. Activates q as well.

2e. INFOFIX: Added -Xk, for adding day of week after fixed date string. 
Activates d as well. Also clears out any existing day of week from line so you 
don't need to manually delete it if it was not done with day of week after date. 
Like so:

2020-04-23 (Thursday)

This uses core module POSIX::strftime, to avoid any non core module 
requirements.

2f. INFOFIX: Added -X0. This turns off the leading characters usually added 
before each line of output. Useful if you want to copy parts of the output.

2g. INFOFIX: Added -Xc. First try at long time weakness, failing to currect 
windows cp-1252 characters like magic quotes etc. This may take a few iterations 
since not only windows is going to have these issues, but this should cover a 
solid 95%. Tested on several large sets of info files and worked well.

Grep output to locate where corrections happened. Shows when it corrects and 
fails to correct for CP-1252. I'm not trying for 99% perfection, just to get the 
most common offenders (Windows generated .txt files), which probably covers a 
solid 95% of real cases.

2h. INFOFIX: Added -Xa. This adds auto track numbering to unnumbered track/set 
lists. Supports either straight 2 digit zero padded numbers, or disk ids, like 
1-12. Requires start of either :an: for basic numbering, and :an-1: for 
multidisk numbering. Terminate with :: or <> as with other track list features.

2i. INFOFIX/PREFILL: Added {...} syntax for track times, along with existing 
(..), [..]. Note that track times have to be at end of Title string, otherwise 
it's a pain to do the logic. -Xm will move them from start of title to end.

3a. CHECKSUM DELETE: Added *.cfp (some shn thing), *sbeok, *.st5, shntool.txt 
types to --checksum-delete. Those are almost always from SHN files, and aren't 
relevant anymore. sbeok as far as I can tell is same as shntool_length.

3b. CHECKSUM DELETE: Added *ffps.txt, *md5sum.txt as possible -D delete file 
names.

3c. CHECKSUM DELETE: Added index.html, robots.txt because some legacy file 
downloaders added those. Also added .txt.1, .txt.2 since sloppy downloaders 
could add those when trying to download repeatedly.

4a. OPTIONS: Added alternate --copy-append to --append/-a, to make it more 
obvious and consistent with other option syntaxes.

4b. OPTIONS: Added optional names --dry-run, --dry. These are same as --test, 
easy to remember if you think of it as a dry run, not a test.

5. Added -U 3, for updating from smxi server, github is a pain, better to do 
most dev work on server, like with pinxi, then commit to github once largely 
working. That github throttling of commits after a few done quickly is annoying.

6. Going along with -U 3, added --no-ssl, for older systems which may have 
expired SSL certificates. Note that -U on such systems will not work generally 
with or without --no-ssl, but -U 3 will.

--------------------------------------------------------------------------------
CHANGES:

1. Should be no real changes, just big polishing up and enhancements of existing 
features.

--------------------------------------------------------------------------------
DOCUMENTATION:

1. Man, help changes for new features, enhanced features, etc.

2. README.txt, man, and help updated for new options.

3. Reorganzed man page and help menu, with top navigation section on man page, 
and more granular option subsections to make stuff easier to find.

4. Fixed some width issues on help output, some lines had strayed over 80 
columns, or could be shortened by moving a word to next line.

--------------------------------------------------------------------------------
CODE:

1. Changed $test{'tag-create'} to $test{'autotag-create'} to make it consistent
with the %run values, too confusing otherwise.

2. Refactored prefill fields to be more flexible, easier to add prefill fields.

3. Made --checksum-delete/-D globbbing patterns cleaner and easier to update.

4. Fixed InfoFix::date_fix(), InfoFix::cp1252_fix(), Analyze::info_quality() to 
correctly update the array reference, not to work on a copy then create a new 
reference and return that, which is a bad habit I have.

5. Refactored AutoTag::prefill_data() to avoid redundant field name code.

--------------------------------------------------------------------------------
-- Harald Hope - Mon, 26 Dec 2022 11:02:50 -0800

================================================================================
Version: 3.5.05
Patch: 
Date: 2022-11-09
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

A code and man and options cleanup, plus adding sample acxi.conf for packagers
and users who might like to see what configs look like.

--------------------------------------------------------------------------------
SPECIAL THANKS:

1. Xiph.org, for all their great work in support of free software audio. And all
their cool little tools, like squishyball abx tester.

--------------------------------------------------------------------------------
KNOWN ISSUES:

1. Nothing really, adding support for DSD/DSF > FLAC conversion would be nice, 
but is hardly critical or essential.

--------------------------------------------------------------------------------
BUGS:

1. Nothing except debugger left in place by accident.

--------------------------------------------------------------------------------
FIXES:

1. To -Xd, date fix, added variation yyyy/mm/dd.

2. Removed prefill debugger.

3. lame -V supports 0 - 9.999, not 9, though you'd never want to use 9.999 
because it would really suck. Added decimal support.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. Prefill improvements.

--------------------------------------------------------------------------------
CHANGES:

1. No changes to speak of.

--------------------------------------------------------------------------------
DOCUMENTATION:

1. For --prefill/-E, improved field name documentation in man page, otherwise 
who could guess? Tedious, but best to list the field names and rules.

2. Fixed some man page typos and errors.

3. Added sample acxi.conf file for packagers to include if they want. That's 
helpful since you can't realistically run acxi without setting at least basic
configurations, though you can if you have standard program locations, and use
the CLI switches each time you run acxi, but that gets tedious.

4. Added LICENSE.txt file. That's GPL v3 or later, as usual.

--------------------------------------------------------------------------------
CODE:

1. Some cleanups, but nothing major.

--------------------------------------------------------------------------------
-- Harald Hope - Wed, 09 Nov 2022 16:30:27 -0800

================================================================================
Version: 3.5.04
Patch: 
Date: 2022-11-05
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Bug fix, corrections, fine tunings for 0 sized files, or files with 0 audio 
data. Also more prefill field names, to let you fully auto-complete your 
auto.tag file from the info file.

--------------------------------------------------------------------------------
SPECIAL THANKS:

1. Everyone helping make Free as in Libre audio possible! xiph.org, Ardour, 
Audacity. We wouldn't have free audio codecs or tools if it weren't for the 
years of effort by these people and organizations.

--------------------------------------------------------------------------------
KNOWN ISSUES:

1. None currently.

--------------------------------------------------------------------------------
BUGS:

1. For -Xq crashed Perl on 0 length file, was trying to divide by 0 without 
verifying it was not a zero value first. Added in error handlers, made code
easier to read.

2. -Z failed to list 0 length/size files, and also failed to show the errors in
ALERT section. That was only working for > 0 but < Min size/time

--------------------------------------------------------------------------------
FIXES:

1. With Bug 1, for -Xq, failed to exit on error. We don't want to write bad data 
to info-fix file! But we do want to not exit for batch -Z jobs, we just want to
see the error in the output, but we don't want to terminate the analyze bulk 
action.

2. Show 0 sample/size/duration for -Z, and also show size in B when < 1 KiB. I
had never considered the matter of < 1 KiB output as having value, but it does.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. Added Byte (B) to KiB < 1 print_size(), that allows showing tiny file sizes 
in error conditions, and avoids showing 0 KiB when it might be 86 Bytes (the 
size of a 0 sample FLAC).

2. Added Album, AlbumArtist, AlbumSort, Composer, Event, Genre, Cover/Image, 
Producer to prefill field name options. This lets you use the info file to fully 
complete the auto.tag file, no edits needed.

--------------------------------------------------------------------------------
CHANGES:

1. Handles 0 size audio source files consistently.

--------------------------------------------------------------------------------
DOCUMENTATION:

1. Updated man page for new supported prefill field names, and also listed most 
of the supported ones.

--------------------------------------------------------------------------------
CODE:

1. For process_ffprobe() and process_metaflac() changed returns to hash 
reference. Yes, that's a touch slower than returning an array, but it's much 
easier to read the code now.

2. Change ffprobe value 'N/A' to undef to allow for easier testing of results.

--------------------------------------------------------------------------------
-- Harald Hope - Sat, 05 Nov 2022 14:07:00 -0700

================================================================================
Version: 3.5.03
Patch: 
Date: 2022-10-22
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Long overdue update to use info file supplied Field Names: for artist, venue, 
city, date, taper. This also allows preservation of that more useful syntax when 
processing info files for data, which has always been a weak spot of this 
feature.

--------------------------------------------------------------------------------
KNOWN ISSUES:

1. The terms and names for the field names for prefill will require many more 
iterations to get reasonably complete in terms of what people really use, but 
since these are in the end always user generated string values, they will be
subject to randomness, but we'll get it working usually for most cases, which is
definitely an improvement.

2. The order, likewise, will be somewhat random, so location in particular may
be subject to some garbling in the output and will probably require cleanup, but
still an improvement.

--------------------------------------------------------------------------------
BUGS:

1. None known.

--------------------------------------------------------------------------------
FIXES:

1. None

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. Use field names as triggers to switch to field: value parsing for top artist 
venue city state date completion for auto.tag generation. This will result in 
clearly more accurate prefills for those tag items, since we're relying on 
actual field names, not position in file to identify the field.

2. Added VENUE tag prefill, which is now possible with enhancement 1.

3. Added support for Taper: in info file for prefill of PRODUCER tag. That can 
be located either in top block, or anywhere else in file.

--------------------------------------------------------------------------------
CHANGES:

1. None. Delightfully stable.

--------------------------------------------------------------------------------
DOCUMENTATION:

1. Updated man page for auto.tag prefill using existing field names or automatic 
detections.

--------------------------------------------------------------------------------
CODE:

1. Starting process of switching to array/hash references when passed between 
functions/classes (subs/packages).
Done: 
%info to $info hash ref:
  AutoTag::populate_tag_file()
  AutoTag::prefill_data()

@data to $data array ref
  Analyze::info_data() - added $ref return apart from info_data();
  AutoTag::prefill_data()
  InfoFix::date_fix() - removed return
  InfoFix::open_info_file()
  InfoFix::run_fixes()

2. Reorganized top variables to be more obvious and easy to read/scan.

3. Made Data::Dumper output sort alpha/numeric, makes debugging easier.

--------------------------------------------------------------------------------
-- Harald Hope - Sun, 23 Oct 2022 17:46:38 -0700

================================================================================
Version: 3.5.02
Patch: 
Date: 2021-12-06
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Refinements, fine tunings. The rule that a successful refactor always opens the 
door to more possibilities remains valid!

--------------------------------------------------------------------------------
KNOWN ISSUES:

1. -Z is slightly awkward to use because it only handles one input type at a 
time, for example, if you had a directory filled with m4a, mp3, and aac files, 
you'd have to run -Z once per type to get the full report. That may be not be 
resolvable because adding > 1 input type lists would create issues in the 
validation that would be a headache to resolve, but it might be something that 
can be worked around. It does handle various syntaxes, like .FLAC, .Flac, and 
.flac, but that's as far as it goes.

2. If using forking on syncing job, and error handler for failed sync action
kicks in, can't stop forking, that's too complicated to deal with for now. 

3. The acxi documentation that suggests that AAC doesn't support tagging isn't 
accurate, it does, but it's another proprietary format that requires mapping 
known tags to aac format, similar to mp3. Also, apple has its own further 
proprietary format, which I have zero interest in spending/wasting time chasing 
after. Basically as far as acxi is concerned, since m4a tagging is native and 
'just works' and can use aac as the audio data in the m4a container, I can see 
no reason to waste time adding support for another erratic and inconsistent 
proprietary tagging format. 

--------------------------------------------------------------------------------
BUGS:

1. FLAC to m4a conversions were failing without error handling. Added error 
handler to syncing section, with caveat it can't exit while forking is being 
used. It will now print out an error message, if forking, alerting that it can't 
stop itself, if no forking, will exit as expected. Issue was flac to m4a 
requires one further option for ffmpeg.

--------------------------------------------------------------------------------
FIXES:

1. Added protection against resampling using dither if bit depths are the same.

2. Discovered a very strange globbing behavior, returns non existing matches
to the globbing pattern, no idea how that can happen since it's a glob of the 
path/directory. Added test exists before putting results in source array.

3. aac/m4a codec pre-test was case sensitive, made case insensitive. Some 
validation -eq tests for out/input types were not case insensitive.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. For -Z, -v 0 turns off the per file reports, and only shows the summary per 
directory. This is useful to just gain a quick overview of what you have in a 
collection.

2. For --resample, now shows bit depth:sample rate for each start file, and the
target resample rate, like: ....file.flac 24:96 to 16:48

This can be useful to avoid errors and unexpected results, for example, if you 
failed to run -Z analyze on resample source, you'd still see you maybe made a 
mistake on the rate. 

3. For -Z, added feature to show possible incorrect lossy audio file sizes, and
for all audio formats, possible incorrect duration of track. Defaults are 1000
KiB for size, and 10 seconds for time. Added --z-min-size and --z-min-time as
overrides, and also configuration items Z_MIN_SIZE / Z_MIN_TIME for permanent
changing of values. 0 in either disables that test.

Defaults are 10 seconds min time for all audio files in directory, and 1000 KiB 
min size for all lossless audio files in directory for the supplied --input 
type.

These will print out summary ALERT items per file found, right above the main 
summary area at end of per track output. While no tests will ever be perfect,
the goal is to minimize possible failure points that might creep in unnoticed.

4. New feature, prefill with Album Artist track titles. Requires syntax: 
--multiartist [at|ta]:[separator]. Use --ma for short form. Assuming separator 
'-', then 'at:-' means: Artist - Title, and 'ta:-' means: Title - Artist. Do not 
include spaces in separator, just the actual character(s) used. Will pick first 
occurance of provided separator value to split track title, and everything after 
first occurance as either Title or Artist.

This uses the numbered track title listing in the info file that --prefill uses, 
like so:
01. Band Name / Track Title

--------------------------------------------------------------------------------
CHANGES:

1. No changes.

--------------------------------------------------------------------------------
DOCUMENTATION:

1. Updated man, help, for revised -Z -v0 option, and for using metaflac for 
source file sample rate data.

2. Added help/man documentation for --z-min-size/--z-min-size, and for 
Z_MIN_SIZE/Z_MIN_TIME configuration items.

3. Added help/man documentation for --multiartist/--ma.

--------------------------------------------------------------------------------
CODE:

1. The ease of implementing the new --resample output option is a direct result 
of the refactor of the -Z analyze feature, by splitting out the metaflac data 
logic into its own function, that then became available to call to from other 
parts of acxi, which it wasn't before the refactor. I've never seen a case where 
a good refactor didn't open the door to more functionality.

--------------------------------------------------------------------------------
-- Harald Hope - Mon, 06 Dec 2021 12:35:35 -0700

================================================================================
Version: 3.5.01
Patch: 
Date: 2021-10-08
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Bug fix for --clean, completed some options that were started but were slightly
incomplete, like -Z now supports all input types, and --resample now applies
a decent default Shibata dithering when resampling down to 16 bit.

--------------------------------------------------------------------------------
KNOWN ISSUES:

1. -Z -v2 only shows ffp/hash data for metaflac/FLAC sourced data. That's how it 
is, the data is not present in ffprobe sourced intput file data.

--------------------------------------------------------------------------------
BUGS:

1. See Fix 1, needs to enforce path syntax for --clean -s/-d, otherwise will 
offer to delete your entire destination.

--------------------------------------------------------------------------------
FIXES:

1. Found issue with --clean, -s and -d require either full relative to user HOME 
or full path (~/music, /home/user/music). Never tested other path possibilities 
so never noticed these when not complete path. Also added protection against 
starting -d/-s paths with ../. That leads to very unpredictable results. 

Both of these are handled now in Validation.

2. In size tool, failed to round KiB values.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. Big upgrade for -Z/-Xq, now accepts all input types. Non FLAC input types use 
ffprobe. FLAC defaults to using metaflac for data. Using the --ffprobe option 
forces FLAC analysis to use ffprobe, which is easily 10-30x slower than 
metaflac, and also doesn't contain the flac ffp md5 hash signatures.

2. Added default dither type if resampling to < 24 bit depth of Shibata. Added 
configuration and --dither item to allow users to change dither type. For 
--resample only. 

Default type is shibata, which puts noise at higher frequencies. Note that 
ffmpeg does not apply dithering by default.

Used ffmpeg list: https://ffmpeg.org/ffmpeg-resampler.html

Types: 0; rectangular; triangular; triangular_hp; lipshitz; shibata; 
low_shibata; high_shibata; f_weighted; modified_e_weighted; improved_e_weighted

3. Added standard override default config file: /etc/acxi.conf.d/acxi.conf
to list of config files to check. That's in case distros ever package it.

--------------------------------------------------------------------------------
CHANGES:

1. Validation now permits non flac input types for -Z/-Xq options.

2. For -v2 cleaned up syncing output a bit. Added resample info for -v2 as well.

--------------------------------------------------------------------------------
DOCUMENTATION:

1. Man update for -s/-d path syntax for --clean, and -s/-d not using ../.

2. Man/help update for expansion of -Z/-Xq input types, and for --ffprobe 
override option.

--------------------------------------------------------------------------------
CODE:

1. Refactored package Analyze to support non flac input types, and also to show 
proper input type being processed. Changed a few other components for this as
well, like Checksums, Validation, get_options().

2. Moved get_options into new package OptionsHandler, the verify section was 
getting a bit unwieldy, best to have it be in its own sub. This also aligns inxi 
and acxi in style, which is good.

3. Sorted configuration items.

--------------------------------------------------------------------------------
-- Harald Hope - Fri, 10 Oct 2021 15:42:08 -0700

================================================================================
Version: 3.5.00
Patch: 
Date: 2021-09-24
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

This is the final tidying up of the new features introduced and evolved in 
3.4.01, and given the number of new features, and changes, this also will be 
rolled into next major version, 3.5.00.

--------------------------------------------------------------------------------
KNOWN ISSUES:

1. No new ones.

--------------------------------------------------------------------------------
BUGS:

1. In one case, --test, by triggering -v3, would trip a debugger that should 
have been a --debug switch, and since there was no internal actual $b_debug, 
there was no way to run pure debugger switches internally. This is now 
corrected.

--------------------------------------------------------------------------------
FIXES:

1. None this release.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. Added -Xl (el, not uc eye), sets all lines lower case, then upper cases 
anything found after a '.'. Good for cases where the entire file is upper case, 
but it's got a lot of sentences, and you don't want the upper case first of all 
primary words that u gives you. Requires in most cases going back in and 
re-uppercasing some items, but it's less work to do it this way for extreme 
cases.

--------------------------------------------------------------------------------
CHANGES:

1. --test no longer activates --verbosity 3, that was creating annoying output
in situations where --test is being used to generate screen only output, for
example: acxi -s./ -SE --test

Now --test just tests, which was its intended role, and you can tell add what -v 
levels you want. 

2. --debug no longer alters $VERBOSITY levels, it just sets a $b_debug flag. 
This disconnects --test, --debug, and -v actions completely.

3. Changed line starter for -X from 'Fix: ' to '; : ', and for -Xw, ' ' to ';  '. 
That looks a lot cleaner, and creates a nice box effect around the info file 
output block. The '; : ' and ';  ' also make it more clear when the action was 
written and when not, without being visually messy.

--------------------------------------------------------------------------------
DOCUMENTATION:

1. Updated --test, --debug, --verbosity, and CONFIG items to account for the 
changes in use of internal VERBOSITY and b_test/b_debug flags.

2. Refactored and made more useful README.txt, now it's updated to focus on all 
the acxi features, not just the syncing part, and also is divided into sections 
better, and is more readable, with enough information to get users started.

3. Cleaned up double spaces in man page.

--------------------------------------------------------------------------------
CODE:

1. Removed some weight from --test and --debug, see CHANGES 1,2. Changed 
if $VERBOSITY > 3 tests to if $b_debug. Removed VERBOSITY connection to --test.

2. Removed some development debuggers and fixed some comments for logic.

3. Added EOF closing comment to man page, should have implemented that years 
ago. That's required to validate man download via -U, it was using a test on a 
string in the man page, which isn't a good idea since that can change. 

4. Got rid of white space between negation ! and all items except things like 
-f, -d, -r.

--------------------------------------------------------------------------------
-- Harald Hope - Wed, 24 Sep 2021 17:30:17 -0700

================================================================================
Version: 3.4.01
Patch: 
Date: 2021-09-21
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Big update, lots of fixes, new features, enhanced features, cleaned up output, 
you name it, this one has it! Huge usability and processing speed improvements, 
with a focus on large bulk processing actions, and with -g globbing option, 
running bulk actions on a subset of directories.

--------------------------------------------------------------------------------
KNOWN ISSUES:

1. -E does not work in bulk jobs, only per flac directory.

--------------------------------------------------------------------------------
BUGS:

1. A code cleanup remove a few too many white spaces in front of ), in this 
case, for -T, that was required, not to clean up. Search and replace can be 
dangerous sometimes. This regression was probably introduced around 3.4.00 or 
so.

2. In cases of 1 single flac file, -K and --ffps would skip filename and show 
only the ffp hash. Metaflac required explicit --with-filename for metaflac 
output. Default is to print file name only when > 1 flac files found.

--------------------------------------------------------------------------------
FIXES:

1. -V exited on error, but should not have. This prevented bulk -V checks from 
running. Now error message goes to screen but it keeps looping. Useful for 
checking larger sets of audio files to determine which are corrupted.

2. -V, -K, -D: corrected indentation of output to make more readable/scannable.
Particularly useful if outputting results to file for many directories.

3. Added -Xn pattern, some cases where track number is DNN, converts to D-NN. 
as expected now. -Xd more date variants added.

4. Added 'Personnel:', 'Performers:' to performers pre ID.

5. Tiny fix, acxi was neglecting to apply the os path separator correctly in at
least one location, which in fringe cases could lead to windows failing under
certain conditions, though windows support is only theoretical.

6. Added error handler for trying to run -E/--prefill on any bulk job, flac 
files must be present in the given --source directory or it exits with error.

7. Fixed output for various features, corrected indentation errors, removed ... 
in some cases, added : for directory name processing features.

8. Polished up option mis-use error handling, polished up validation logic.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. Going with Fix 1, -v3 now will output results of ffp test initially so you 
can get the full verbose version.

2. New feature: --dupes/--duplicates: allows checking collection for duplicates 
of flac files, then gives a report of the directories that had duplicates, and 
the directories that first had the files that were duplicated. Useful for 
trimming out redundant stuff from your collection. 

3. New feature: --analyze/-Z: prints to screen flac bits, sampling rate, track 
times (per file) found in -s source directory/ies. Also prints total time, total 
size, and average kbs of all flacs in directory. Depending it may be possible to 
extend this to other than flac.

-v1 (default) shows flac data in one line; -v 2 makes key: value pairs, one per 
line, adds ffp hash signature; -v 3 adds raw full seconds and file size in bytes 
to time/size info for file and totals.

4. Going along with --analyze, -Xq now includes avg kbs, total time and size of 
flacs, per directory of flacs.

5. New feature: --source-glob/-g: accepts wild card paths if you only want to 
update or check certain directories within the main --source working directory. 
Requires --source, wild card path must be within --source, like:

acxi -s ./ -g 'BandName*' -V

Will only verify folders starting with BandName. Remember to always quote the 
value otherwise your shell will expand the wild cards!! Accepts standard 
globbing options like {one,two,three}, [0-9], etc.

This is really useful if you want to carry out any acxi action/option on only a 
subset of directories inside of a larger collection, for example, setting the 
ARTIST tag value for all directories of that artist in that main directory.

acxi -s ./ -g '{FredDolans,Fred Dolans,Fred_Dolans}*' -T "ARTIST%:Fred Dolans"

6. New refined feature: --checksum-ffps/--ffps. Improves previous method of:
 acxi -s./ -K --no-md5sum --test
which is awkward. Prints output to screen, turns off md5 generation. Good for 
bulk ffp generation, output redirect to file, etc.

7. Finally added --resample {bits:khz} and --resample-override. This is useful 
for resampling 24 bit flacs to 16 bit, for example. Note that in general you 
want to resample to a sampling rate that evenly divides the starting rate, for 
example, with 24 bit, 192 or 96 khz original, resample to 16:48, or if for some 
reason you actually have 88.2khz sampling rate, resample to 16:44.1. Or if your 
starting sampling rate is 48khz, use 16:48.

Use -Z option to determine sample rates and bit depth of original you are 
resampling.

In general, do not resample to greater bit depths or sampling rates, that's 
pointless.

Note that if you resample 192, 96, or 48khz originals to 44.1 khz, the CD audio 
standard, you end up messing up the samples because almost all of them have to 
be synthesized, but if you use a sample rate that evenly divides with the start, 
no dithering or other undesirable results will occur, generally speaking.

--resample supports 16; 20; 24 bit and 44.1; 48; 88.2; 96; 192 defaults, which are in 
general the only ones you'd ever want to use. Syntax sample: 

--resample 16:48

--resample-override switch allows you to use the almost full range of options in 
--resample, 4-32 bits, 1-655 khz sampling rate.

--------------------------------------------------------------------------------
CHANGES:

1. Small changes in output, got rid of some '...' in processing / checking 
directory outputs, added ':' anytime the action references checking or 
processing a directory, that makes it more consistent and predictable overall.

Sample: 
Checking myDirectory...
becomes: 
Checking: myDirectory.

Sample:
Starting sync of StartDirectory
 to EndDirectory
becomes:
Starting sync of: StartDirectory
 to: EndDirectory

Exception is when the action uses print, not say, and the results of the action 
are printed on same line after the ...

2. Changed --exclude-append short form to -y, inconsistent to use -X, and want 
-X for --infofix short form. Actually this was also a bug, -X short had never 
been used for --exclude-append though it was supposed to have been, so no loss 
to anyone.

--------------------------------------------------------------------------------
DOCUMENTATION:

1. Updated man, help for --duplicates, --analyze, --ffps, --resample, 
--resample-override.

2. Redid top SYNOPSIS section to include short forms, that makes it easier to
use as a reminder tool. Reordered items as well to be more clear.

--------------------------------------------------------------------------------
CODE:

1. Fully transitioned to 'say' when we want line breaks at end of print line.
This cleans the code up and makes it easier to see what's going on in various
line output scenarios. 'print' is used now when we do NOT want a linebreak at 
end of line, and in other more complex scenarios where it is appropriate.

2. Moved -G/--aggregate logic to package Aggregate, it's not really related to 
autotagging. Moved -X/--infofix to package InfoFix, Moved -Z/--analyze, and, 
-Xq logic to Analyze package. AutoTag and Checksums were getting too much 
clutter in them. 

3. Renamed/simplified launch/trigger subs names in Packages, forgot to do that 
when I made the classes for 3.0.0.

4. Reordered validation functions, and cleaned up and reorganized some of them
to get rid of redundant logic.

--------------------------------------------------------------------------------
-- Harald Hope - Tue, 21 Sep 2021 19:57:01 -0700

================================================================================
Version: 3.4.00
Date: 2021-08-20
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

New major version that rolls up recent new -E, -X, --no-md5 features (now that 
they are reasonably stable), new changelog format, AAC support, and changed 
options for --verbosity,-v and --version, into 3.4.00.

Also some small bug fixes, tweaks, adjustments, and new feature --no-md5.

--------------------------------------------------------------------------------
BUGS:

1. --start had a bug when start > 1, it needed to subtract 1 from count to show
correct total in auto.tag. This was the expected result:

Actual totals: 15 tracks, 2 missing. --start 3, 13 real tracks.

It would have shown 16 track count in auto.tag in that case before the fix.

2. When using some features with -s [item-directory] instead of -s ./, paths 
were not reset correctly for all features, resulting in failed operations.

--------------------------------------------------------------------------------
FIXES:

1. Added more date syntax variants to -Xd date correct tool. Had failed to 
handle Month-DD-YYYY syntax. Fixed glitch that made MM/DD/[45]Y fail. Fixed 
Month DD, YYYY.

2. Added more track numbering variants to -Xn too. Failed to handle '01] '.

3. Tweaked --prefill, let it start looking for track numbers if line > 4.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. Added --no-md5 for -D/-K, to go along with --no-ffp. md5 generation takes a 
long time, and  isn't needed for certain purposes. This can be quite useful when 
checking many ffps from many recordings. For example:

acxi -s./ -K --no-md5 --test > ffps.txt

The --test flag makes it not do the actual ffp file creation, which isn't 
necessarily desirable.

2. Added 'q' to --infofix/-X, this lets you add in two rows after top band / gig
info header, Quality: /4 () and FLAC: bits/sample frequency (channels).

3. To go along with 2, added --info-rating {2-xxx} to let people set different 
default ratings. Also added INFO_RATING item to tagging user values section.

--------------------------------------------------------------------------------
CHANGES: 

1. Got rid of --log, --basic, --full, --verbose, and replaced them with 
-v/--verbosity [0-4]. Left --quiet and --debug, since those make sense. Left 
internal support for --basic, --full, --verbose, and --log to not break any user 
habits. I'm not sure why acxi ever used LOG_LEVEL, I suspect it was some legacy 
thing that was just used without thinking about it. But it's annoyed me for a 
while since it makes no sense either reading the code or trying to explain it in 
man/help since --log never logged anything, it was just a screen output 
verbosity switch.

-v [0-4] is also relatively standard option for verbosity levels, it's also less 
typing.

2. Got rid of -v as alternate for --version, having only --version is fine, and
was wasting the more useful -v short form for --verbosity.

3. Changed configuration variables LOG_LEVEL to VERBOSITY, but left internal 
support for legacy LOG_LEVEL. While top configurations will show $VERBOSITY, 
user configuration tool supports either. 

--------------------------------------------------------------------------------
DOCUMENTATION:

1. Man, help updates for -v/--verbosity change,  and for new --no-ffp feature. 
Reordered configuration values section to be a bit more clear, some things were 
not alphabetically listed within sections, sections were slightly oddly ordered.
Added q explanation to --infofix and INFO_RATING to config section.

2. Made this changelog match new format of inxi.changelog, which is easier to 
work with, and easier to read. Using easier to scan subject headers BUGS, FIXES, 
ENHANCEMENTS, CHANGES, DOCUMENTATION, CODE, plus line dividers, and extra 
linebreaks to avoid having it all crammed together and hard to read.

--------------------------------------------------------------------------------
CODE:

1. More cleanups of unnecessary whitespace after ( or before ).

2. Refactored ffp/md5 create to match ffp/md5 verify, broke into 3 subs, which 
makes it cleaner.

3. Changed all internal uses of $LOG_LEVEL to $VERBOSITY, which is what it 
should have always been since acxi has never logged, and this was just an output 
verbosity feature all along.

4. Added space after all comments that contain logic or variables. This will let 
geany/scite users edit acxi with code folding. This is due to a scite folding 
engine weakness where it gets confused and tries to treat stuff after # as 
actual logic. 

================================================================================
Version: 3.3.29
Date: 2021-06-29
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

This is another big trader release, lots of new features, mostly specialized but 
very useful. Note that the official 'release' 3.3.28 was skipped because all 
these changes sort of flowed into one another, and took a while, and a lot of 
testing, to get stable and reasonably reliable.

While this will never be done, the logic is now radically enhanced, and really 
has optimized the process of dealing with audio collection tagging while not 
resorting to the types of automated and often drastically wrong bulk taggers, 
which can never be reliable due to the randomness of user data and behavior, but 
the steps are now very optimized and generally require very little effort to 
yield excellent and reliable tagging results.

Enjoy, while most of these new features are very specialized, if you recognize 
what is being done and appreciate the ability to create high quality and 
reliable tagging, you may just be among the people who will benefit from these 
changes. If not, well, that's fine too, this wasn't made for you in that case, 
so you can move along, nothing to see here.

--------------------------------------------------------------------------------
FIXES:

1. Updated error handlers for using non compatible options together, that logic 
had been too loose, and permitted using options that could not be used together.

2. For larger collections, had forgotten to 'prune' excluded directories from 
list of files to go through, that leads to slow downs when the dataset is very 
large, that now prunes as expected. that's for File::Find operations.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. Added support for AAC and M4A. Note that if you want tags to transfer, use 
the m4a container format, if not, use aac. This requires using either the native 
ffmpeg aac codec, or the better regarded libfdk_aac codec. Only supports input 
type flac.

2. --prefill / -E takes data from well structured and formatted info.txt files 
and transfers it to auto.tag file. Saves a lot of time. See --prefill-file 
filename for using alternate info file names, but I don't recommend doing that. 
Note that -E requires either -S or -M autotag creation options. See man page for 
required structures.

3. Added default -C/-S/-M auto.tag create to generate 10, not 8, performer 
lines. Why not, sometimes groups are big.

4. To compliment -E prefill, and speed up tagging even more, added 
-X/---infofix, which cleans up info.txt file in preparation for prefill of 
auto.tag. This is getting close to as much as can practically be done without 
implementiing machine learning, heh. But it's VERY fast now to process a 
standard show or recording. Any further speedups will result in much less time 
saved than these did. See man page for -X options and action explanations. d 
option fixes dates to ISO YYYY-MM-DD format; n fixes track numbers in file, 
which -E requires to be a specific format; t fixes upper/lower case track 
titles, wraps track times after title in parentheses if missing (-E ignores 
those when updating track titles), and w writes the changes to file. Without w, 
only what would have happened prints out in terminal, with w, the changes are 
written to file. Very effective and convenient.

--------------------------------------------------------------------------------
DOCUMENTATION:

1. For the obsessive, made man page 80 columns wide, ok, who cares? nobody, 
except people trying to work with command line tools in absurdly narrow terminal 
windows, but there you have it. We aim to please. General man and help cleanup 
and fixes as well. Have to update and fix docs once in a while, afterall!!

================================================================================
Version: 3.3.27
Date: 2020-08-22
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Bug fix!!! Oops... 3.3.26 flac > flac had issue.

--------------------------------------------------------------------------------
BUGS:

1. Many thanks to issue #9 who pointed out that the small changes that made flac 
to flac conversion possible inadvertently broke flac to lossy conversions, which 
was obviously a bad thing.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. Added opus type to --ffmpeg, to make it complete for the free audio codecs. 
Rarely used, but now you can.

--------------------------------------------------------------------------------
CODE:

1. Used this mistake to refactor the validations a bit more to make it easier to 
avoid such mistakes in the future, and also updated the man page to add some new 
options and features which were not completely documented, or documented 
inconsistently.

================================================================================
Version: 3.3.26
Date: 2020-08-18
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Flac > Flac conversion, tiny update

As changes go, this may be the smallest one ever, I think I only had to add 
something like 4 to 8 characters in acxi, but might as well call it the current 
acxi re releases.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. Just because, well, sometimes in rare cases you might want to rerip flac 
files you got from some random place to a new set of flac files.

For example, if you get some old flacs, and just want to make sure they are 
actually up to date and with the quality level you want, you just run:

acxi -i flac -o flac -s [source] -d [destination] -q 8

and away you go, new flacs. Note, I came across a case where a very old flac 
file would not convert to a lossy format because there was something wrong with 
the flac formatting, the codec was too old that had been used to convert it, or 
something, in the end, with that one, I just used audacity, open file, export to 
itself as flac, then it all worked, but I thought, well, why not? Sometimes you 
have flacs you have little to no idea about how they were made, and maybe you 
prefer always having quality 8, as in the above example, and don't want to spend 
any time researching the old flac files.

================================================================================
Version: 3.3.25
Date: 2020-05-03
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Bug fix release. -M used with --start exposed a small bug in auto.tag 
generation.

--------------------------------------------------------------------------------
BUGS:

1. Found a small bug, if -M multidisc auto.tag file generated, and --start used 
that is not 1, the disc totals would not reflect the different --start value.

There was actually another bug in the logic, but it was only exposed when -M + 
--start were used together.

================================================================================
Version: 3.3.24
Date: 2020-04-23
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Point release - enforce -s/--source use for tagging/checksum options.

--------------------------------------------------------------------------------
FIXES:

1. Only one change, but I realized I kept forgetting to set -s explicitly for 
-A, -C, -S, -M, -G, -T, -I, -V tagging or checksum options. That's actually 
quite dangerous to your collection, particularly when using something like -I or 
-T, and I'd made that mistake enough times to realize I had to enforce -s 
explicit use for these.

================================================================================
Version: 3.3.23
Date: 2020-04-11
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Two small fixes, to make things a bit more consistent and intuitive.

--------------------------------------------------------------------------------
FIXES:

1. Added 'UNSET' value to --tag, so you can remove a single or more tags and 
their content, not just modify or add them.

2. A slightly complicated logical puzzle, now --clean also removes excluded 
directories / files as expected, and subsequent sync acfions will not create the 
excluded directories, which was the case before this correction. 

================================================================================
Version: 3.3.22
Date: 2020-03-09
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Some small and convenient updates:

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. Added --start [integer] to let you make tag file generation numbering start 
from 0 to any integer. This lets you match your tagged track numbers to file 
track numbers, say, starting at 00.flac, or starting at 05.flac, now the acxi 
generated auto.tag will reflect that as long as you use the --start [integer] 
when generating the test file. Note that if you forget, you can just run acxi 
-Ss./ --test --start 0 for example which will print out the disk/track numbers 
to terminal and you can just copy that into your auto.tag file if you already 
had started it.

2. Another corner case feature, --recurse [integer], let's you run acxi only on 
the directory you want, going in from 0 to x levels. This has various utility, 
for instance, if you don't want to include a subdirectory of flacs, you would 
use -Ss./ --recurse 0 and it will only generate auto.tag data for the level you 
are in.

3. Issue #8 requested a way to override default behavior to skip all '.' dot 
files, added --dot, --no-dot [override for if you use DOT=true in configuration 
file], and configuration item DOT, which takes true/false value. Since false is 
the default acxi behavior, the only value that makes sense to use there is true, 
otherwise don't use that configuration item.

================================================================================
Version: 3.3.21
Date: 2020-01-22
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Several bug fixes in the 20/21 releases:

--------------------------------------------------------------------------------
BUGS:

1. Small bug introduced that made acxi not start on older Perls due to 
accidental use of a Perl 5.028 and newer feature.

2. acxi was not properly escaping the tag data for MP3 files, which led to 
failures in some cases of strange character use. 

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. Added support for AIF lossless type.

================================================================================
Version: 3.3.19
Date: 2019-12-31
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

This turned into a big release, lots of new features, mostly around making 
tagging and image embedding faster and easier. Also some bug fixes that matter 
in corner cases.

--------------------------------------------------------------------------------
FIXES:

1. Fixed -D checksum delete, better handling of weird ffp.txt and md5.txt type 
file names, now it will catch and delete more than before.
    
2. Finally figured out how to fix an annoying error that would pop up when 
File::Find was trying to read files in a root only readable directory, like 
lost+found, now correctly using File::Find::prune for all non readable 
directories. Could not use this for non-readable files because I found cases of 
readable files tripping the non readable input warning message. Only shows the 
message for each directory once per update to avoid redundant messages.

3. Found an oversight, file name escaping was not being done on tagging, only 
syncing, so I made new escape_file and unescape_file subroutines, and now 
everything escapes and unescapes as expected. Tested on worst case file names i 
use for testing purposes.
    
--------------------------------------------------------------------------------
ENHANCEMENTS:

1. Expanded auto.tag to have 8 PERFORMER, 5 COMMENT, 4 SOURCE, items, and added 
CDDB and ISRC in case you want to add or preserve those CD database ID values. 
This should be enough lines to handle most common situations.

2. New feature! --image/-I takes file name, or full path, to image file to embed 
into flac files. This is a flac only feature. Note that I urge moving to opus if 
you like embedded album art, opus supports natively getting the meta data, 
including image blocks, from flac files, but ogg only supports the comment 
block, doing images with ogg is a pain and is probably never going to happen in 
acxi, unless someone provides a neat and clean patch.
   
3. Another new feature, --tag/-T, which takes an argument of structure: 
"TAG1%:value^^TAG2%:value", where TAGx is the name of the FLAC comment field you 
want to replace or update or add. This lets you update for example all the files 
in a folder to have the same GENRE, or update artist/album name, or dates, 
whatever.

4. Added -R as shortcut for --remove-images now that --images is running, that 
can be useful. Note that --autotag and --image will never add images if the flac 
file already has image blocks in it, so -R is required to force the removal 
there.
    
5. Added --remove-padding/-P option, to force attempt at padding removal on 
tagging updates. This really slows tagging down, and as far as I could tell, 
repeated tagging does not appear to change padding, so I made this a non default 
action for -A and -T actions.

================================================================================
Version: 3.3.18
Date: 2019-12-19
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Maintenance release. None massive, but they add up to a nice package of 
improvements and enhancements

--------------------------------------------------------------------------------
BUGS:

1. Fixed bug with ffmpeg based shn/wav/ to flac conversion. The flac quality was 
not being used, and it would always default to the ffmpeg default (5, I think). 
Technically, this was the cause: -aq / -q:a do not actually do anything, ffmpeg 
reverts to default quality 5 always. This is fixed by using -compression_level 
instead, which works as expected.

--------------------------------------------------------------------------------
FIXES:

1. Fixed missing linebreak in help menu, that made the output after last line 
for --clean fail to wrap, now it's all hunky-dory.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. Added a really silly but on rare occasion useful feature, now acxi will let 
you convert mp3 to flac. Why? don't do it, there's only a tiny handful of cases 
where this makes any sense at all. But now you can.

2.  Added 2 more PERFORMER%: items and 1 more COMMENT%: to default auto.tag, 
that avoids having to manually add them if you needed more, 6 performers seems 
to cover most cases.

--------------------------------------------------------------------------------
CODE:
  
1. Added case insensitive sorts, no idea how I missed that one, now as acxi 
chugs through your collection, the sorts will be a more intuitive case 
insensitive as the syncs etc run.  

================================================================================
Version: 3.3.17
Date: 2019-10-19
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

This is just a small point release.

--------------------------------------------------------------------------------
BUGS:

1. I'd neglected to reset the list of found files each time file find was used, 
which led to glitches when using the new -AD / -AK combination option.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. The main new feature is adding -M @ for alphabetical pattern matching, for 
cases where you want to use letters for disk numbers, like A-01.flac for 
example. There are cases where this makes sense, not often, but sometimes. This 
extends -M, which previously only supported the % ([0-9]) item, to support 
pretty much any real world multidisc indicator scenario in a file name.

================================================================================
Version: 3.3.16
Date: 2019-10-08
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Some small fixes and enhancements.

--------------------------------------------------------------------------------
FIXES:

1. Added backtick ` escape.

2. Adjusted default copy values, removed some big file types, pdf, doc, tif, 
which a lossy collection probably does not need.

3. Removed --alt-ag, which was awkward to use, now --aggregate accepts a comma 
separated list of file names and types.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. Added --exclude, to let people exclude any string or strings found in the 
value passed to it.

5. Made it possible to do: acxi -AD [or -AK] -s ... so you don't have to type 
the stuff out twice when tagging then generating checksum files.

================================================================================
Version: 3.3.14
Date: 2019-08-14
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Documentation only release.

--------------------------------------------------------------------------------
DOCUMENTATION:

1. Updated man, help, and doc pages.

================================================================================
Version: 3.3.12
Date: 2019-08-12
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

New feature added, -G.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. --aggregate/-G and --alt-ag [track id] which lets you collect all auto.tag 
files, or with --alt-ag, any other filename in a collection to one place. This 
can be useful for tracking changes and exchanging information about such things.

================================================================================
Version: 3.3.06
Date: 2019-08-10
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

A few small enhancements, -K and -D.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. New shortcuts: -K for --checksum; -D for --checksum-delete, -V for 
--checksum-verify. Got tired of typing the long forms.

================================================================================
Version: 3.3.05
Date: 2019-08-10
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

New feature, -M.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. --autotag-create-multi / -M will follow a pattern you provide it to identify 
your track numbering scheme for multi disc sets.

This still has to be documented, but it's working well. I was initially thinking 
of making the logic 'smart' and to try to figure out automatically when file 
starters indicated disc numbers, but there are so many variants, it wasn't going 
to happen.

Note: this does not support multi folder disc storage, like:
 Disc 1/
 Disc 2/ 
because that's a real pain to deal with in automated systems that have to figure 
out where they are in your music library without actually knowing that. 

But assuming you've gotten rid of those legacy ways of storing per cd files, 
this will speed things up significantly, to a few minutes on a large multi disc 
set.

================================================================================
Version: 3.3.04
Date: 2019-08-10
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Fixes to checksum features.

--------------------------------------------------------------------------------
FIXES:

1. Stablized --checksum-verify, it now largely works as intended, checks against 
existing md5 files, and checks flac file integrity.

2. Converts windows or *nix line endings and folder paths to the local version 
so the .md5 sum file data will work no matter what OS generated the file or is 
checking it.

================================================================================
Version: 3.3.03
Date: 2019-08-09
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

New --checksum-verify feature.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. New feature --checksum-verify, to be used, currently, with --checksum or 
--checksum-delete. Will also verify FLAC files. This is time consuming, and is 
not yet handled by forking, and may not be because making forking output 
consistent is a real pain.

================================================================================
Version: 3.3.02
Date: 2019-08-09
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Bug fixes, fixes, new --ffmpeg experimental feature.

--------------------------------------------------------------------------------
BUGS:

1. --checksum was not correctly changing directories, and so would only make the 
checksums for the first directory it encountered in the following directories, 
resulting in checksum test failures, of course.

--------------------------------------------------------------------------------
FIXES:

1. Improvement. All the features now sort the file list so the files/directories 
are processed in order, which makes for nicer screen output.

2. Fixed some help menu ordering things.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. Added --ffmpeg flag. Don't use this, it's experimental, and so far the 
experiments don't look or work well.

--------------------------------------------------------------------------------
CHANGES:

1. Changed default opus bitrate to 144.

================================================================================
Version: 3.3.0
Date: 2019-07-27
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Rolling all the recent updates into acxi 3.3. I believe I've found all the 
issues I'm going to find on my own with tagging and image embedding.

--------------------------------------------------------------------------------
FIXES:

1. Better handling of file name/paths, now avoiding some errors that could 
happen if file name contained regex characters.
 
--------------------------------------------------------------------------------
ENHANCEMENTS:

1. Self updater -U/--update. No need to manually grab man/acxi from github 
anymore, let acxi do it for you.

2. Autotagging: --autotag/-A, --autotag-create/-C, --autotag-create-single/-S, 
--remove-images, which work with the newly created auto.tag text file format for 
quickly creating the tag data for a collection/album. Does not support Forking.

3. Checksum generation: --checksum and --checksum-delete. Either only create, or 
first delete old files, then create new checksum files. Does not support 
Forking. Only support flac ffp and md5.

--------------------------------------------------------------------------------
DOCUMENTATION:

1. Documentation pages:
 https://smxi.org/docs/acxi-man.htm
 https://smxi.org/docs/acxi-options.htm

================================================================================
Version: 3.2.16
Date: 2019-07-27
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Self updater -U added.
 
--------------------------------------------------------------------------------
ENHANCEMENTS:

1. -U self updater. I got tired of manually updating it. Now it joins all the 
other *xi tools to have a self-updater. 

2. Preserves REPLAYGAIN values when creating autotag-create file. This can help 
when the people who made the source flacs took the time to set replaygain data, 
but did not do any other tagging, or did incorrect tagging.

================================================================================
Version: 3.2.11
Date: 2019-07-27
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

auto.tag prefills added for single, checksum improvements.
 
--------------------------------------------------------------------------------
ENHANCEMENTS:

1. --autotag-create-single will also fill in the TRACKTOTAL and TRACKNUMBER for 
a single disk set. Due to complexity of handling various user multidisk naming 
and folder schemes, too hard to automate. But for single disks, it will speed up 
the auto.tag file generation process.
 
--------------------------------------------------------------------------------
CHANGES:

1. --checksum-delete now triggers --checksum so you don't have to type it again.

================================================================================
Version: 3.2.8
Date: 2019-07-26
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Bugs and new auto tag feature.
 
--------------------------------------------------------------------------------
BUGS:

 1. Found a long standing weakness that would result in some file paths/names 
containing regex characters, which would in some cases result in output or 
internal errors, failures to find paths. This has been corrected, and now all 
file trims use s/\Q$PATH\E// escapes, which I didn't know about. Those prevent 
anything in the variables executing as a regex character. Easy fix!

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. --autotag-create which creates an auto.tag file in the folder you are working 
on, prepopulated with track blocks with filenames already filled in.

================================================================================
Version: 3.2.4
Date: 2019-07-24
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

New auto tag feature.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. --autotag which uses a file, auto.tag, which follows a specific syntax to 
automatically generate tags for a recording/album. Includes support for per 
track specifics, etc.

================================================================================
Version: 3.2.2
Date: 2019-07-21
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Fixes, new checksum features, docs updates.

--------------------------------------------------------------------------------
FIXES:

1. Trimming off source and destination directory paths from copy, sync, and 
checksum generation paths. Since those show at the beginning, there's no point 
in repeating them over and over. --log 3 / --full will show the full paths 
however if you want.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. --checksum and --checksum-delete. --checksum will create .md5 and .ffp 
checksum files in each directory in --source that contains flac files. Only flac 
lossless format supported. --checksum-delete if used together with --checksum 
will delete all .md5, .ffp, .m5.txt, and .ffp.txt. The latter two are because 
some tools add a .txt extension, which is an error.

Current requirements are metaflac for .ffp generation, and md5sum for md5 
generation, though I may move to native Perl for md5 since there is no strict 
need to use an external program for that.

--------------------------------------------------------------------------------
DOCUMENTATION:

1. Man and help updated to show checksum features, and also rearranged a bit 
more to make more readable. Note that you can view online versions  of the help 
and man at:

https://smxi.org/docs/acxi-man.htm
https://smxi.org/docs/acxi-options.htm

--------------------------------------------------------------------------------
CODE:

1. More refactoring, now it's pretty much done, all main logic is wrapped in 
packages aka classes, which makes working on it easier.

================================================================================
Version: 3.2.0
Date: 2019-07-15
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Big update. Forking, shn to flac, copy type improvements, --log output option,
docs updates.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. now supports forking, using either --fork/-F [0-xxx], or config value: 
FORK=[0-xx]. This lets you use multithreading to run big conversions more 
quickly. Note that with really big jobs, in some cases, the OS will act a bit 
odd after a while if you assigned too many forks, but in general is very fast 
and works well. Thanks prupert for this suggestion on techpattern.com/forums.

Requires Perl module Parallel::ForkManager, will exit if FORK is greater than 0 
and module not present.

2. Finally, option to convert shn to flac. Requires shorten codec library and 
ffmpeg. 

See README.txt for where to find the shorten codec if you don't have it (hint: 
if you can play shn files, you probably have it).

3. New option: -a/--append, which lets you append more copy types on a one time 
basis to your existing list. This can be useful if for example you are doing a 
one time conversion of a mixed flac/shn directory to all flac: 

acxi -i shn -o flac -s /my/shn-flacs -d /my/flacs -a flac 

will copy over your flacs to the flac, if any found, and convert the shn to 
flac.

4. Screen output verbosity can now be triggered by the new --log [0-3] if you 
prefer that way to trigger verbosity levels. --debug will keep working but may 
be used for something else in future versions.

--------------------------------------------------------------------------------
CHANGES:

1. Got rid of some confusing terms for screen output:
--debug becomes --full
--default becomes --basic

--------------------------------------------------------------------------------
DOCUMENTATION:

1. Redo of man and help. Help reorganized into two sections, one for syncing 
options, like -c, -a, -d, -s, -i, -o, --fork, etc. The other is for screen 
output options, like -h, --version, --log, --basic, --full, --verbose.

--------------------------------------------------------------------------------
CODE:

1. Internal refactor to use packages/classes in some areas like Validation and 
configuration file processing. This makes the code easier to work on since you 
can fold those packages away in your code editor.

================================================================================
Version: 3.1.3
Date: 2019-07-05
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Fixes and docs updates. nlink options added.

--------------------------------------------------------------------------------
FIXES:

1. Issue #2 - fix for failure of File::Find to detect files or directories in a 
cifs mounted smb file system. 

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. Added default $File::Find::dont_use_nlink = 1 with override --nlink which 
sets it to 0, --no-nlink which sets it to 1, default, plus configuration item 
which allows for override as well via DONT_USE_NLINK item. Values 0 or 1. 1 is 
default.

--------------------------------------------------------------------------------
DOCUMENTATION:

1. Updates to man page as well to note the new options and explanation.

================================================================================
Version: 3.1.2
Date: 2019-07-04
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Bugs and fixes.

--------------------------------------------------------------------------------
BUGS:

1. When -q used, failed to assign quality level to opus.

--------------------------------------------------------------------------------
FIXES:

1. Improved error handling, now prints out all pretest errors before exiting. 
This should make it easier for new users to figure out how to setup acxi. Also 
made tests more granular, now does not run quality or application present tests 
if invalid input/output type. Note that acxi will exit with the last error 
return number found in that case.

================================================================================
Version: 3.1.1
Date: 2019-01-03
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Bugs and Fixes.

--------------------------------------------------------------------------------
BUGS:

1. Ogg quality level assigned to opus which leads to the worst quality level for 
opus.

--------------------------------------------------------------------------------
FIXES:

1. Added two filters (for " and $) in path/file name. This corrected issue #1 by 
gyratory. Thanks gyratory for finding that oversight and filing an issue report.

================================================================================
Version: 3.1.0
Date: 2018-12-18
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Opus support, ogg fractional quality, docs.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. Added support for Opus output type.

2. Added Ogg quality fractional levels, and the -1 value.

--------------------------------------------------------------------------------
DOCUMENTATION:

1. Corrected man/comments/help inconsistencies.

================================================================================
Version: 3.0.0
Date: 2018-12-07
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

New --clean, --test option, cleanups, fixes, bug fixes, man page added.

--------------------------------------------------------------------------------
BUGS:

1. Some tagging bugs were fixed for flac->mp3 generation.

--------------------------------------------------------------------------------
FIXES:

1. Improved error handling. More protections in place against user 
configuration and option use errors.

2. Improved output formatting, should usually fit in 80 column display.

3. Added the ability to have your target (compressed, lossy) directory inside 
your source directory.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. New --test option to test your configurations before actually running the 
syncs live.

2. New --clean option to remove files/directories not found in your source 
directory. Includes protections against accidental use.

--------------------------------------------------------------------------------
DOCUMENTATION:

1. Created a man page. 

--------------------------------------------------------------------------------
CODE:

1. Modernized Perl 5. The Perl runs with warnings/strict mode enabled as well.

top