Following the release of lossyWAV 1.2.0, I feel it is (yet again) time to kick off development of the next minor release.
Items currently on the list for inclusion in 1.3.0:
- [complete] Implementation of SG's adaptive noise shaping method;
- [v1.4.0] Identification and adaptation of a psy-model to use in conjunction with the new noise shaping method;
- [deleted] Enable use libfftw3f-3.dll for single precision FFT analyses;
- [complete] Introduce option to output a spectral "plot" of the processed audio data.
If you have any ideas, requests, suggestions, code optimisations, etc, please post them here.
Link to hydrogenaudio wiki lossyWAV article.
Suggested foobar2000 converter setup:
lossyFLAC:Encoder: c:\windows\system32\cmd.exe
Extension: lossy.flac
Parameters: /d /c c:\"program files"\bin\lossywav - --quality standard --silent --stdout|c:\"program files"\bin\flac - -b 512 -5 -f -o%d --ignore-chunk-sizes
Format is: lossless or hybrid
Highest BPS mode supported: 24
lossyTAK:Encoder: c:\windows\system32\cmd.exe
Extension: lossy.tak
Parameters: /d /c c:\"program files"\bin\lossywav - --quality standard --silent --stdout|c:\"program files"\bin\takc -e -p2m -fsl512 -ihs - %d
Format is: lossless or hybrid
Highest BPS mode supported: 24
lossyWV:Encoder: c:\windows\system32\cmd.exe
Extension: lossy.wv
Parameters: /d /c c:\"program files"\bin\lossywav - --quality standard --silent --stdout|c:\"program files"\bin\wavpack -hm --blocksize=512 --merge-blocks -i - %d
Format is: lossless or hybrid
Highest BPS mode supported: 24
Enclose the element of the path containing spaces within double quotation marks ("), e.g. C:\"Program Files"\directory_where_executable_is\executable_name. This is a Windows limitation.
Change log 1.3.0: 06/08/2011
Introduction of fixed noise shaping using curve based on SebastianG's noise shaping IIR filter previously used in 1.2.0. Parameter -s, --shaping [n] takes optional parameter (0<=n<=1) or is set automatically depending on quality setting;
Code improvements.
Bug hunting.
[!--sizeo:1--][span style=\"font-size:8pt;line-height:100%\"][!--/sizeo--]Change log beta 1.2.3p RC11: 14/06/2011
(Minor) modifications to --adaptive parameter;
Introduction of -W, --width <n> parameter (80<=n<=255) to allow user to select width of certain output options;
Introduction of -H, --histogram parameter to display 64-bin histogram of sample values;
Code improvements.
Bug hunting.
Change log beta 1.2.3o RC10: 16/05/2011
(Minor) modifications to --adaptive parameter.
Removal of fast / lower precision sqrt and log functions - seems to improve adaptive shaping "accuracy".
Bug hunting.
Previous beta versions / release candidates left up to allow side-to-side comparison, however, this is functionally very similar to beta 1.2.3n RC9.
Change log beta 1.2.3n RC9: 13/05/2011
Modifications to --adaptive parameter. Now allows user to disable default gain curve (use nogain) and default frequency warping (using nowarp) after the --adaptive parameter. Filter order still user selectable. Parameter takes multiple sub-parameters.
Bug hunting.
Change log beta 1.2.3m RC8: 11/05/2011
Modifications to adaptive noise shaping method. Now only uses "current" FFT results rather than using historical data as well.
Bug hunting.
Change log beta 1.2.3l RC7: 09/05/2011
(Minor) modifications to adaptive noise shaping method.
Bug hunting.
Change log beta 1.2.3k RC16: 06/05/2011
(Minor) modifications to adaptive noise shaping method.
Bug hunting.
Slight change to the --spread parameter (related to output of codec-block processing and subsequent spreading function(s)) - now indicates whether the static or dynamic maximum-bits-to-remove limits kicked in during processing (i.e. all FFTs for a particular codec block indicated more bits could be removed but bits-removed was limited to static and dynamic limits).
Change log beta 1.2.3j: 04/05/2011
Modifications to adaptive noise shaping method;
Change to --static parameter; maximum bits-to-keep now limited to bits-per-sample - 4.
Change log beta 1.2.3i: 22/04/2011
Modifications to adaptive noise shaping method;
DC offset now removed from audio data (and bit-removed data and correction data, when enabled) prior to analysis - seems to have improved "Furious" sample problem.
Change log beta 1.2.3h: 16/04/2011
Modifications to adaptive noise shaping method: higher sample-rates now treated differently - hopefully now avoiding the suspected phase related distortion encountered with 384kHz samples.
Change log beta 1.2.3g: 12/04/2011
Modifications to adaptive noise shaping method: --warp parameter removed due to complexity of selecting correct value. The value is now frequency dependent to allow for consistency in the portion of the warped spectrum associated with the frequency range of interest (up to 16kHz by default);
Modifications made to handling of sample-rates other than 44.1kHz. I realised that as all the testing has pretty much been carried out at that rate then there may be issues with handling other sample-rates. There were. I think that they're now fixed.
Change log beta 1.2.3f: 24/03/2011
Modifications to adaptive noise shaping method;
Addition of the --static parameter to allow the user to increase the number of (static) minimum-bits-to-keep in the range 7<=n<=16, default=6.
Change log beta 1.2.3e: 16/03/2011
Modifications to adaptive noise shaping method.
Change log beta 1.2.3d RC5: 28/02/2011
Change to parameter limits for -A, --adaptive: now 64<=n<=256;
Change to order of lower quality presets:- C, economic, 0.0;
- P, portable, -2.5;
- X, extraportable, -5.0.
Code tidy up and optimisation.
This is release candidate #5 for lossyWAV 1.3.0.
Change log beta 1.2.3c RC4: 22/02/2011
Parameter -i, --impulse removed. The shortest FFT (32 samples for 44.1/48kHz input) is now enabled by default for all quality settings, previously for int(q)>0. Can be disabled using --analyses 2 (default number of analyses is now 3).
A change to quality preset selection. Parameter -q, --quality will now accept a numeric value in the range -5 to 10 as before but also a short and long preset name as follows:- I, insane, 10.0;
- E, extreme, 7.5;
- H, high, 5.0;
- S, standard, 2.5 [default];
- P, portable, 0.0;
- N, intermediate, -2.5;
- X, extraportable, -5.0.
Code tidy up and optimisation.
This is release candidate #4 for lossyWAV 1.3.0.
Change log beta 1.2.3b RC3: 16/02/2011
--classic and --altpreset quality systems removed;
Fixed noise shaping removed;
Adaptive noise shaping now enabled by default. Use --adaptive OFF to disable. Parameter will still take numeric input to set number of taps for FIR filter used.
Remapping of quality presets as follows:- -I, --insane = -q 10.0;
- -E, --extreme = -q 7.5;
- -S, --standard = -q 5.0 [default];
- -R, --reasonable = -q 2.5;
- -P, --portable = -q 0.0;
- -e, --economic = -q -2.5;
- -s, --superportable = -q -5.0.
Code tidy up and optimisation.
This is release candidate #3 for lossyWAV 1.3.0.
Change log beta 1.2.3a RC2: 11/02/2011
(Very) minor changes to the adaptive noise shaping algorithm. Bug-fix to avoid divide-by-zero in levinson-durbin recursion.
Replacement of default internal settings, ranging from -5 to 10. Existing defaults now accessible using --classic parameter.
This is release candidate #2 for lossyWAV 1.3.0.
Change log beta 1.2.2z RC1: 10/01/2011
Minor changes to the adaptive noise shaping algorithm;
This is release candidate #1 for lossyWAV 1.3.0.
Change log beta 1.2.2y: 08/01/2011
Minor changes to the adaptive noise shaping algorithm, now a bit faster.
Change log beta 1.2.2x: 05/01/2011
Minor changes to the adaptive noise shaping algorithm - now takes into account long FFT analysis results for previous codec-block as well as present codec-block; Changes made to curve which modifies shape of desired filter output per codec-block-channel.
Change log beta 1.2.2w: 02/12/2010
Minor changes to the adaptive noise shaping algorithm; default FIR filter size=64;
Bug found in processing of multi-channel audio - also fixed in version 1.2.0 as maintenance release 1.2.0b (see Validated News);
Code tidy up.
Change log beta 1.2.2t: 11/11/2010
Minor changes to the adaptive noise shaping algorithm (max FIR filter size=512);
-X, --sortspread parameter removed;
-F, --fftw parameter removed. libfftw3-3.dll (double precision) used automatically if found;
Code tidy up.
Change log beta 1.2.2s: 08/08/2010
Further changes to the adaptive noise shaping algorithm;
Change log beta 1.2.2r: 26/07/2010
Bug-fixes and minor changes to the adaptive noise shaping algorithm;
Compatibility with libfftw3f-3.dll removed (single precision) to significantly simplify code;
Removal of added dither in bit-removal algorithm when adaptive noise shaping active.
Change log beta 1.2.2q: 29/06/2010
Further changes to the adaptive noise shaping algorithm;
Change to bit-removal algorithm when adaptive noise shaping active - dither introduced.
Change log beta 1.2.2p: 21/06/2010
Further changes to the adaptive noise shaping algorithm.
Change log beta 1.2.2n: 21/06/2010
Further changes to the adaptive noise shaping algorithm. Modification made to the high frequency portion of the desired shape.
Change log beta 1.2.2m: 17/06/2010
Further changes to the adaptive noise shaping algorithm. Now uses the results of both the long and short FFT analyses when determining the desired shape of filter.
Change log beta 1.2.2k: 11/06/2010
Desired shape of filter now changes more gradually per codec-block rather than totally;
Fix to calculation of frequency distribution to allow more accurate comparison of input and output.
Change log beta 1.2.2j: 04/06/2010
Temporary fix to stop spikes in output - attempt #1.
Change log beta 1.2.2i: 03/06/2010
Bug fix in FFT routine selection process.
Change log beta 1.2.2h: 03/06/2010
Bug fix in adaptive noise shaping method.
Change log beta 1.2.2g: 01/06/2010
Modifications made to adaptive noise shaping method.
Change log beta 1.2.2f: 31/05/2010
Modifications made to adaptive noise shaping method. Change in filter behaviour at higher frequencies.
Change log beta 1.2.2e: 31/05/2010
Modifications made to adaptive noise shaping method. Better filter resolution achieved (I think). --adaptive parameter now takes an integer value as the order of the FIR filter. Valid in the range 16<=n<=128, default=32.
Change log beta 1.2.2d: 29/05/2010
Modifications made to adaptive noise shaping method. Better resolution (I think) of the filter - interim beta - still work to do on this.
Change log beta 1.2.2c: 28/05/2010
Modifications made to adaptive noise shaping method. Attempt #1 to fix the low-frequency error.
Change log beta 1.2.2b: 27/05/2010
Modifications made to adaptive noise shaping method. Attempt #1 to fix clicking error.
Change log beta 1.2.2a: 26/05/2010
Further progress made with SG's adaptive noise shaping method. The --adaptive parameter now takes a parameter (in the range -1<n<1) to allow the warping factor to be changed. Error found and fixed in remove_bits routine (for adaptive-shaping).
Change log beta 1.2.1a: 25/05/2010
Further progress made with SG's adaptive noise shaping method. Extremely simplistic psy-model in place. Enable by adding --adaptive to the command line.
Post-analysis of the bit-removed audio data can be performed using the --postanalyse parameter in conjunction with the --freqdist parameter.
Change log pre beta 1.2.1a: 17/05/2010
Code optimisations;
Major part of the implementation of SG's adaptive noise shaping;
Modification of fftw_interface unit and FFT handling routines to allow the use of libfftw3f-3.dll as well as libfftw3-3.dll (-F, --fftw <single/double/off>);
Implementation of the spectral plot (--freqdist) for input and optionally output audio data.[/size]