====== Exact Audio Helper for Exact Audio Copy v1.5 ======
===== Overview =====
=== Exact Audio Copy ===
* EAC is an excellent audio grabber which I'm using since many years to copy the tracks from my audio CDs.
* Exact Audio Helper has been tested with EAC v1.5 and v1.6.
=== Exact Audio Helper ===
* I created EAH (Exact Audio Helper) to automate EAC, so that CDs can be copied and tagged with minimum effort and mouse clicks.
* Download Exact Audio Helper which piggybacks on Exact Audio Copy, included in my {{:media:eah.zip|EAH/AAH package}}.
* You may use [[media:aah|Audacity Audio Helper]] for a similar automation to copy and tag files created by Audacity.
=== Requirements ===
- Copy tracks compressed losslessly to my audio file server for home use. I use the [[https://xiph.org/flac/|FLAC]] codec for this.
- Copy tracks compressed lossy with maximum compatibility and small file size to my audio file server for portable use. I use the [[https://en.wikipedia.org/wiki/MP3|MP3]] codec for this, with the [[https://lame.sourceforge.io/index.php|LAME]] encoder.
- Simple and speedy copying and encoding
- Every CD is processed only one time for both formats
- Proper meta tagging
- Replay Gain calculation in tags only, without modifying original compressed track file
- Integrate Album Art into each track file
- Compatible with the [[https://en.wikipedia.org/wiki/Logitech_Media_Server|Logitech Media Server]] and [[http://mysqueezebox.com/index/Home|Logitech Squeezebox]]
- Compatible with Apple and Android portable devices
=== Other encoders ===
* EAH is built so that you can use any 2 encoders you prefer, as long as there is an encoder executable which you can set in EAC, and a meta tag executable which you can set in EAH's ini file
* There used to be a scripting extension called REACT (Run EAC Tasks), which was built for EAC version 0.99. It is not being maintained since 2008, and does not work with EAC version 1.0 and later. REACT supported MP3, FLAC, as well as AAC, WavPack, Ogg, and TAK, so if you need one of those change the encoder settings in the ini file of EAH. Refer to the REACT-track.cfg file for help on the encoder settings (see [[media:react|Exact Audio Copy v0.99 with Scripting support - Run EAC Tasks]]).
===== Installation =====
==== Ripping and tagging ====
- Download and install [[http://www.exactaudiocopy.de/|Exact Audio Copy]]
- Download {{:media:eah.zip|Exact Audio Helper}} and install the zip file to a portable directory. Create a tools folder within this directory to keep the executables required to run EAC and EAH.
- Download the current 64 bit version of [[https://xiph.org/flac/download.html|FLAC]] (as of 4 Sep 2020 this is version 1.3.2). Open the zip file and extract //flac.exe// and //metaflac.exe// from the //win64// folder to your //EAH tools// folder (a folder of your choice).
- Download the current 64 bit version of [[https://lame.sourceforge.io|LAME]] from [[http://www.rarewares.org/mp3-lame-bundle.php|Rarewares' LAME Bundles]] (as of 4 Sep 2020 this is version 3.100). Open the zip file and extract //lame.exe// and //lame_enc.dll// to your //EAH tools// folder.
- Download [[https://hydrogenaud.io/index.php?topic=63179.0|Akkurat's REACT mod]], or this file {{av:react_2.0.akku.b04.zip|react_2.0.akku.b04.zip}}, in case the link is not active. Open the zip file and extract //metamp3.exe// from the //tools// folder to your //EAH tools// folder.
- Download and install [[https://imagemagick.org/|ImageMagic]]. There are many different versions available, you may choose to download a zip file without installer. Choose the //Portable Win64 static at 16 bits-per-pixel component//, you won't need HDRI. As of 4 Sep 2020 this is version 7.0.10-28. Open the zip file and extract //convert.exe// to your //EAH tools// folder.
- Download and install the current 64 bit version of [[http://sourceforge.net/projects/album-art|Album Art Downloader]], as of 4 Sep 2020 this is version 1.0.5. Album Art Downloader needs the .NET 3.5 Framework to run, which you might need to install first.
==== Trouble shoot encoder settings ====
=== Mp3tag ===
[[https://www.mp3tag.de/en/download.html|Mp3tag]] is a powerful meta tag viewer and editor. Despite it's name it supports many different audio file formats:
* Advanced Audio Coding (AAC)
* Apple Lossless Audio Codec (ALAC)
* Audio Interchange File Format (AIF / AIFC / AIFF)
* Direct Stream Digital (DSF)
* Monkey's Audio (APE)
* Free Lossless Audio Codec (FLAC)
* Matroska (MKA / MKV)
* MPEG Audio Layer 3 (MP3)
* MPEG-4 (iTunes® compatible MP4 / M4A / M4B)
* Musepack (MPC)
* Ogg Vorbis (OGG)
* IETF Opus (OPUS)
* OptimFROG/OptimFROG DualStream (OFR/OFS)
* Speex (SPX)
* Tom's lossless Audio Kompressor (TAK)
* True Audio (TTA)
* Waveform Audio File Format (WAV)
* WavPack (WV)
* Windows Media Audio (WMA)
=== mid3v2 ===
mid3v2 is part of the [[https://mutagen.readthedocs.io/en/latest/index.html|Mutagen]] package which allows detailed analysis of MP3 meta tags.
- Install Python. Go to the Microsoft Store, search for "python", and install Python 3.8. Check that it has properly installed with:powershell python --version
- Install [[https://mutagen.readthedocs.io/en/latest/index.html|Mutagen]] with:powershell python -m pip install mutagen
- There will be a warning that the script directory is not in your path, so Windows cannot find the executables automatically. It will display something like "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\Scripts"
- Add this path to your user's environment, so you don't need to type the full path everytime you need to run //mid3v2.exe//. Open Windows' Start Search, type "env", then choose "Edit the system environment variables", and click the "Environment Variables…" button at the bottom.
==== Music player ====
* Windows: Install [[http://www.foobar2000.org/download|foobar2000]]. It plays flac and mp3 files, and gives you comprehensive meta tag information on both formats.
===== Configuration =====
Configuration of EAH is very flexible and can be adjusted to your EAC configuration. I have included my own setup in the walk through below, which adds proper meta tags, the album art image, and replay gain to each extracted track for mp3 and flac. To make EAC and EAH work together seamlessly I have also added the important settings of EAC to the walk through. EAH is configured completely independently from EAC, and does not modify any EAC settings or the registry. This keeps is transparent, but requires that you setup EAC properly in order to work with EAH.
==== EAC Configuration ====
* After installing EAC, run EAC's Configuration Wizard to configure your basic settings. Go through the procedure of determining whether your CD reader can provide proper CR2 error feedback. To do this, copy a CD to a new disk and scratch this disk with a few scratches. If the CD reader can provide proper CR2 feedback, then EAC will detect a faulty CD within a few seconds, but will not detect any scratches on the original of the same CD.
* Check the [[media:eah#configuration_walk_through|Configuration walk through]] for details on how to setup one ore two encoders in EAC
* __**Note**__: ReplayGain is great for a music compilation of pop and rock, specially when you love to hear your music managed by playlists. But it is not recommended for classical music. Remove the replay gain setting in EAH.ini, or create an alternative ini file you can use whenever you tag classical music tracks.
* __**Note**__: EAH will move all files to the destination directory and leave the work space empty after completion. If you interrupt the script (or something goes wrong) you need to delete these files manually.
==== MP3 Configuration ====
* I found metamp3.exe to be the best tool to modify mp3 meta tags. The configuration options for mp3 are in the EAH.ini file, all entries are explained with some remarks.
* In EAC you need to configure the mp3 encoder as well. It is better and more flexible to select //User Defined Encoder//, enter the path to the executable, and add the following command line options:-V4 --vbr-new --id3v2-only --replaygain-accurate --ignore-tag-errors --ta "%artist%" --tt "%title%" --tl "%albumtitle%" --ty "%year%" --tn "%tracknr1%/%numtracks%" --tg "%genre%" --tv "TPE2=%albumartist%" --tv "TPE3=%albuminterpret%" --tv "TPOS=%cdnumber%/%totalcds%" --tv "TCOM=%composer%" %source% %dest%
* See the [[media:eah#Configuration walk through|Configuration walk through]] for details
* [[https://help.mp3tag.de/main_tags.html|Tag field mappings]]
* [[https://en.wikipedia.org/wiki/ID3#ID3v2_frame_specification|ID3v2 frame specification]]
==== FLAC Configuration ====
* In EAC you need to configure the flac encoder as well. Select //User Defined Encoder//, enter the path to the executable, and add the following command line options:-8 -V -T "ARTIST=%artist%" -T "TITLE=%title%" -T "ALBUM=%albumtitle%" -T "DATE=%year%" -T "TRACKNUMBER=%tracknr1%" -T "TOTALTRACKS=%numtracks%" -T "GENRE=%genre%" -T "ALBUMARTIST=%albumartist%" -T "PERFORMER=%albuminterpret%" -T "DISCNUMBER=%cdnumber%" -T "TOTALDISCS=%totalcds%" -T "COMPOSER=%composer%" %source% -o %dest%
* See the [[media:eah#Configuration walk through|Configuration walk through]] for details
* [[https://captainrookie.com/how-to-setup-exact-audio-copy-for-flac-ripping/|How to setup Exact Audio Copy for FLAC ripping]]
* [[https://xiph.org/flac/documentation_tools_metaflac.html|metaflac documentation]]
==== Place holders ====
EAH and AAH use the same place holders as EAC does. This table explains the place holders, and where they are available. You can use them for file names and other options where reference to album and track information is required.
^ Place holder ^ Explanation ^ EAC ^ EAH ^ AAH ^
^ Place holders available in EAC only ^^^^^
| %source% | source filename | T | - | - |
| %dest% | destination filename | T | - | - |
| %original% | original filename (without temporary renaming) | T | - | - |
| %ishigh% | text between 2 such place holders only when "High quality" selected | A | - | - |
| %islow% | text between 2 such place holders only when "Low quality" selected | A | - | - |
| %haslyrics% | text between 2 such place holders only when lyrics exist | T | - | - |
| %hascover% | text between 2 such place holders only when storing cd cover is enabled and cover exists | A | - | - |
| %crcenabled% | text between 2 such place holders only when "CRC checksum" selected | T | - | - |
| %tracklen% | track duration | T | - | - |
| %lengthmin% | track duration (minutes part) | T | - | - |
| %lengthsec% | track duration (seconds part) | T | - | - |
| %cddbtype% | freedb music type | A | - | - |
| %cddbid% | freedb ID | A | - | - |
| %lyrics% | lyrics | T | - | - |
| %lyricsfile% | filename of lyrics text file | T | - | - |
| %trackcrc% | CRC of extracted track | T | - | - |
| %bitrate% | selected bitrate | A | - | - |
^ Place holders available in EAH and AAH ^^^^^
| %tracknr% | track number (same as %tracknr2%) | T | - | **T** |
| %tracknr1% | track number (at least 1 digit) | T | - | **T** |
| %tracknr2% | track number (at least 2 digits) | T | - | **T** |
| %tracknr3% | track number (at least 3 digits) | T | - | **T** |
| %numtracks% | number of tracks on CD/album | A | - | **A** |
| %cdnumber% | number of the CD | A | **A** | **A** |
| %totalcds% | total number of CDs in the given CD set | A | **A** | **A** |
| %title% | track title | T | - | **T** |
| %artist% | track artist | T | - | **T** |
| %genre% | music genre | A | **A** | **A** |
| %year% | year | A | **A** | **A+T**1 |
| %composer% | track performer | T | - | **T** |
| %albumtitle% | CD title | A | **A** | **A** |
| %albumartist% | CD artist | A | **A** | **A** |
| %albumcomposer% | CD composer | A | **A** | **A** |
| %albuminterpret% | CD performer | A | **A** | **A** |
| %comment% | comment | A | **A** | **A** |
| %coverfile% | filename of CD cover image | A | **A** | **A** |
| %workspace% | working folder for temporary files | - | **F** | **F** |
| %scriptdir% | directory the script is run from | - | **F** | **F** |
| %username% | current user logged in to windows | - | **A** | **A** |
| %today% | today's date | - | **A** | **A** |
Scope: **A**=album, **T**=track, **F**=folder, -=not available. 1In AAH %year% is replaced with the //year// indicated for each track, if a [[media:aah#work_flow|track_artists.txt]] file exists and the year is specified for the track, replaced with the "album" //year// taken from the GUI otherwise.
===== Work flow =====
- You should always make sure that your workspace (the extraction directory) is empty before you start a new session.
- Start EAH which starts EAC and inserts an additional menu entry "Encode"{{ :media:eac_main.jpg?direct |EAC}}
- **Multi-CD album**: set //Number of CDs// and //CD Number// first.
- If you have a Compilation CD, set the //Various Artists// checkbox. The //CD Artist// field will be replaced with the string for Various Artists as set in EAH.ini. In case you have a Compilation CD but you want to assign a main artist to this CD, this is possible too. In this case, set the checkbox, then overwrite the CD Artist field with the main artist.
- Select //Encode --> Copy & encode tracks// or Shift-F5. This is the same as invoking EAC's built-in function //Action --> Copy Selected Tracks --> Compressed...// and is repeated here for convenience. All tracks will be copied from CD and encoded with the encoders as defined in the EAC configuration. {{ :media:eac_menu.jpg?direct |EAH menu}}
- After all tracks have been copied, hit the "OK" button, then select "Create Log" and "Save", which saves the log file to the extraction directory, then hit "OK" to finish extraction.
- **Multi-CD album**: select //Encode --> Multi CD file rename//. I prefer to have all music files in one directory for multiple CD albums, rather than having them split into different album names. All tracks which are not renamed yet will be renamed with the CD Number in front of the file name. For example, file "01 First track.mp3" becomes "1-01 First track.mp3". This is necessary to separate the tracks from the different CDs in the set, and is the better way than EAC's built-in //Continue from last track number// functionality. The file rename does not affect track naming.
- **Multi-CD album**: repeat step 5-7 for all CDs in the set.
- Select //Encode --> Get album art// or Shift-F9 to open AlbumArtDownloader.exe, find a cover file, and save it to the work space. If a jpg image file already exists in work space, or in the "AlbumArtPath" (which is in EAH.ini settings), then this step is not necessary and can be skipped.
- Finally, select //RG & Cover Art & file tracks// or Ctrl-F9 to compute replay gain, add the cover art image file to each track, add the comment as set in the EAH.ini file, and move all tracks to the folder for encoded tracks as set in EAH.ini. It is easy to organize your music into a structure like "flac/artist name/album name" or "mp3/artist name/album name".
===== Configuration walk through =====
==== EAC Options ====
In tab //General//, enable "Show status dialog after extraction", "wait for external compressors", and chose the "language"{{ :media:eac_options_general.jpg?direct |EAC Options - General}}
In tab //Filename// and //Additional Filename//, set the Naming scheme to "%tracknr2% %title%"{{ :media:eac_options_filename.jpg?direct |EAC Options - Filename}}
In tab //Extraction//, enable "Lock drive tray during extraction", set Extraction and compression priority to "Normal", and Error recovery quality to "High"{{ :media:eac_options_extraction.jpg?direct |EAC Options - Extraction}}
In tab //Directories//, chose the directory for the temporary files, which must be the same directory as set for option "Workspace" in EAH.ini{{ :media:eac_options_directories.jpg?direct |EAC Options - Directories}}
In tab //Character Replacements//, change the replacement settings to your preference, I prefer to replace double quotes " with single quotes ', "?" with an empty string, "’" with "'", and ":" with ";". Refer to the [[media:eah#limitations|Limitations]] below for further information about the character replacements in file names.{{ :media:eac_options_characterreplacements.jpg?direct |EAC Options - Character Replacements}}
===== Compression Options =====
In tab //External Compression// and //Additional External Compression//, select "Use external program for compression", "User Defined Encoder", matching "file extension", "Program, including path, used for compression", "Additional command-line options", "Bit rate", "Delete WAV after compression" (for //External Compression// only), "High quality", and un-check "Add ID3 tag"{{ :media:compression_options_external_compression.jpg?direct |Compression Options - External Compression}}
\\
For MP3 encoding I chose a medium bit rate of 160 kBit/s, which ensures good audio quality with relatively small file size. These files are used on mobile devices, a higher bit rate would probably remain unnoticed on such devices. I would set the following command line options, which ensure all meta tags are set except replay gain, cover art image, and comment, as these will be set through EAH and set in EAH.ini under "MetaOpt":-V4 --vbr-new --id3v2-only --replaygain-accurate --ignore-tag-errors --ta "%artist%" --tt "%title%" --tl "%albumtitle%" --ty "%year%" --tn "%tracknr1%/%numtracks%" --tg "%genre%" --tv "TPE2=%albumartist%" --tv "TPE3=%albuminterpret%" --tv "TPOS=%cdnumber%/%totalcds%" --tv "TCOM=%composer%" %source% %dest%
For FLAC encoding I chose the highest bit rate of 1024 kBit/s, which ensures best possible audio quality. These files are used on my HIFI audio system at home, where I don't want to compromise on audio quality. I would set the following command line options, which ensure all meta tags are set except replay gain, cover art image, and comment, as these will be set through EAH and set in EAH.ini under "AddMetaOpt":-8 -V -T "ARTIST=%artist%" -T "TITLE=%title%" -T "ALBUM=%albumtitle%" -T "DATE=%year%" -T "TRACKNUMBER=%tracknr1%" -T "TOTALTRACKS=%numtracks%" -T "GENRE=%genre%" -T "ALBUMARTIST=%albumartist%" -T "PERFORMER=%albuminterpret%" -T "DISCNUMBER=%cdnumber%" -T "TOTALDISCS=%totalcds%" -T "COMPOSER=%composer%" %source% -o %dest%
\\
In tab //ID3 Tag//, check "Write ID3V2 tags using UTF16", un-check "Write ID3V1 tags", "Use ID3V1.1 tags instead of ID3V1.0 tags", "Add cover image to ID3V2 tag", and "Write cover image into extraction folder" (all of which will be handled by EAH){{ :media:compression_options_id3_tag.jpg?direct |Compression Options - ID3 Tag}}
===== Trouble Shooting / Limitations =====
==== Trouble Shooting ====
- Use Verify Audio Helper (VAH.exe) to make sure your destination folders are in sync, if you use 2 encoders. There is no separate help file, but the app is self explanatory, and the settings in the ini file are simple.
- Set $debug = 1 in the source file and run in from within the AutoIt environment
==== Limitations ====
- Track names cannot start with 1 or 2 digits followed by a hyphen and 2 or 3 digits, if the track is part of a MultiCD when tagging.
- If a track name contains more than 1 dot before the extension (e.g. //Even in the Quietest Moments....mp3//), then all but 1 dot are removed from the track file name, because //metamp3.exe// cannot handle it. The resulting file name would be something like //01 Even in the Quietest Moments.mp3//. This does not apply if the multiple dots are in the middle or at the beginning of the track name.
- Illegal file name characters are removed from the track file name, but not from the track title in the meta tags. Illegal characters are defined in EAC or in the ini file, see [[media:eah#eac_options|EAC Options - Character Replacements]]. You need to add character ’ to that list, which //metamp3.exe// cannot handle. There might be more characters //metamp3.exe// cannot handle, which I did not find yet. You can find them when you observe the output after invoking function "RG & Cover Art & file tracks" and check the total files processed. If that number is lower than the number of tracks in EAC check which file does not get processed by //metamp3.exe//.
Here is how to deal with these limitations:
- Remove the hyphen between the digits before encoding. Complete encoding, tagging and moving all tracks to the destination folder, then modify the title tag of these files manually with [[media:aah#trouble_shoot_encoder_settings|Mp3tag]].