Summary of new features :
- Reduce drastically memory consumption
- New intelligent system to identify the similar covers
- The search can be stopped
- New CoverFlow View (thx to Romain Guy for his portion of code)
1. Automatic detection of similar covers
Similar covers are now detected and grouped together. The algorithm to do so is based on the computation of the PSNR (Peak Signal Noise Ratio) between two images.
By default, inside a group of similar covers, only the “best” one is shown. If you wish, you can also show the other similar covers in the group by unchecking the checkbox “Hide similar covers” in the status bar. If you do so, all thumbnails of a same group will be “grayed” except the first one (i.e. the best one). To actually view the groups, you must sort the table by similarity by clicking on the column header “Similarity”.
You can tune the way the similarity detection algorithm works, in two ways:
- You can change the threshold starting from which two images are considered similar, by using the slider “Similarity Threshold” in the status bar. Values for this threshold go from 8.0 to 20.0. The higher the threshold, the more strict the similarity will be. The default is 12.0.
- The second slider “Max. distance” is a more technical: it allows you to change the maximum distance allowed between two images in a same group. If this maximum distance is exceeded, the worst covers in the group are removed until we fall back under the maximal allowed distance.
2. Cover Dialog improvements
This dialog can now handle multiple images (i.e. user selects “View Image” when there are several covers selected):
- the selected images can be browsed back and forward with the left and right arrow keys
- the “Save” popup menu will then save the currenlty visible image
3. Behavior changes regarding cover selection
- clicking on one of the already selected covers leave the selection unchanged, and the popup menu appears for this selection.
- clicking on an unselected cover replace the current selection with this cover, and the popup menu appear for this one cover
4. Internationalization
- the column names have been externalized in resource bundle
- at startup, the language code is fetched from the user preferences (if the preference is not set, the default locale is used)
- when the user selects another language, he is invited to restart the application
- currently supported languages: English, French and Dutch
5. Implemented drag and drop in both directions
You can drop a MP3 file anywhere in the main panel and it will start searching for the corresponding artist and/or album. Dropping is disabled if there is an ongoing search.
You can select one or more covers and start dragging them: the covers will be downloaded to disk (and a nice progress dialog then shows up). When the covers are downloaded (i.e. when the progress dialog has disappeared) you can safely drop the covers in any directory of your Windows explorer. If the drop is not done, the covers are simply deleted.
6. New Search features
The user can now specify a minimum cover size before searching:
- cover dimensions are checked before download if the search engine has returned the dimensions
- otherwise the dimensions are checked after the cover has been downloaded
- covers with an unknown size (this happens when the search engine has returned a thumbnail URL but not the full-size dimensions) will be rejected if the user specifies any minimum dimension.
7. Other Improvements
Memory usage: we don’t keep the full size covers in memory anymore!
- when a cover is downloaded we resize it to fit into a square of 160×160px (keeping the original aspect ratio) and the full size image is then immediately flushed and gc’d
- the 160px image is used for displaying into the tooltip in list and table view, for the cover flow and for the PSNR computation
- the thumbnail for the list view (which can be in enabled or disabled state) is built from the 160px image the first time it is requested
- when saving a cover to disk we download the image from the URL, keeping the original extension (instead of JPEG-compressing an image residing in memory)
- when viewing an image, we download it first (asynchronously):
-
- a nice infinite progress wheel is displayed while the image is being downloaded
- a global image cache allows keeping the N last viewed full-size images in memory (N is currently set to 10)
- the resize cache used for the PSNR computation is cleared when all covers have been found (images are flushed and gc’d)
- The full size cover is downloaded only once, and only the first time it is really needed.
Before these changes, after downloading 122 covers of Nirvana, the heap size was +/-300MB. After the changes, the heap size is only 28M ! (with a peak to 80M during download)
8. Stop button
You can now stop a running search with the Stop button.
When all search engines are done (either normally or after a Stop), we display the following text in the status bar: “Finishing pending downloads… (Downloads: n/N)”
9. Other
- the default filename for saving a cover is built from the cover info, but we replace the characters not matching “[a-zA-Z\d-\. ]” by an underscore (to avoid errors with ‘:’, ‘/’, etc.)
- if an error occurs when saving an image an error message box is displayed
- removed two libraries : forms and looks (4OOK saved).