Difference between revisions of "LossyWAV"

From Hydrogenaudio Knowledgebase
Jump to: navigation, search
(Presets)
Line 209: Line 209:
 
[[Image:Foobar2000_Converter_Settings.PNG]]
 
[[Image:Foobar2000_Converter_Settings.PNG]]
  
===Example flossy.bat file called from above converter settings===
+
===Example flossy.bat file called from Foobar2000===
 
<pre>
 
<pre>
 
@echo off
 
@echo off

Revision as of 20:58, 3 January 2008

lossyWAV
{{{logo}}}

Developer(s) Nick.C
Release information
Initial release {{{released}}}
Stable release beta v0.6.1
Preview release
Compatibility
Operating system MS-DOS
Additional information
Use Digital signal processing
License LGPL license
Website Hydrogenaudio

lossyWAV is a lossy pre-processor for PCM audio contained in the WAV file format. It reduces bit depth of the input signal, which, when used in conjunction with certain lossless codecs, reduces the bitrate of the encoded file significantly compared to unpreprocessed compression. lossyWAV's primary goal is to maintain transparency with a high degree of confidence when processing any audio data.

History

lossyFLAC is an idea started by 2Bdecided at hydrogenaudio, utilising the wasted bits feature of the FLAC lossless codec with the aim of transparently reducing audio bit depth (making some lower significant bits (LSB's) zero), consequently taking advantage of FLAC's detection of consistently zeroed lower significant bits within each single frame and significantly increasing coding efficiency.[1] In this way the user can enjoy audio encoded using the same codec (which may be all important from a hardware compatibility perspective) at a reduced bitrate compared to the lossless version.

Nick.C ported the original MATLAB implementation to Delphi (Many thanks CodeGear for Turbo Explorer!!) with a liberal sprinkling of IA-32 and x87 Assembly Language for speed.

Subsequently, lossyFLAC proved itself to work with other lossless codecs, so the application name was changed to lossyWAV.

Since then, Nick.C has heavily developed and built upon lossyWAV, with valuable tuning performed by halb27 at hydrogenaudio.

File Identification

lossyWAV-processed WAV files are named with a double filename extension, .lossy.wav, to make them instantly identifiable. e.g. ".lossy.flac" would indicate an audio file which was processed using lossyWAV, and subsequently encoded using FLAC.[2]

From beta v0.6.1, the -correction parameter is used when processing to create a correction file which is named with the .lwcdf.wav double filename extension. When "added" to the corresponding .lossy.wav, using a not yet implemented parameter of lossyWAV, the original file will be reconstituted.

Combinations of lossyWAV with each specific encoder are referred to as lossyX, where X is an abbreviation of the lossless codec name. Combination names are listed in the "known supported codecs" section below.

From v0.5.9, lossyWAV inserts a variable length FACT chunk into the WAV file immediately after the FMT chunk. This takes the form:
fact/<size>/lossyWAV beta vx.y.z : dd/mm/yyyy hh:mm:ss
-2 -cbs 512 -nts 0.00 -snr 21.00 -skew 36.00
-spf 22224-22235-22336-12347-12358 -fft 10101
Where the version, date & time and user settings are copied. Additionally, if a lossyWAV FACT chunk is found in a file, the processing will be halted (exit code = 16) to prevent re-processing of an already processed file.

The -check parameter can be used to determine whether a file has previously been processed without trying to process it, exit code = 16 if already processed; exit code = 0 if not.

Presets

  • -1: Highest quality preset, disc space-saving alternative to lossless archiving for large audio collections.
  • -2: Default preset; a compromise between -1 and -3.
  • -3: High quality preset for usage on a compatible DAP, approx. 370kbps for "normal" music. [3]

All tuning has been performed on quality preset -3 with -2 and -1 being more conservative. Quality preset -3 is generally accepted to be (and from testing so far is) transparent. If you find a track which -3 fails to achieve transparency after processing, please post a sample (no more than 30 seconds) in the development thread.

Apart from the quality presets the -nts (noise threshold shift) parameter is the most important parameter to control quality. Without noise threshold shifting (-nts 0) the number of bits to be removed is computed in a theoretically optimal way. -nts 0 is defaulted when using quality preset -2.

In order to be more cautious a negative -nts value can be chosen up to -48. -nts -3 is defaulted when using quality preset -1. For archiving purposes and/or very cautious users even more conservative values may be of interest.

Because of internal precautions in addition to 2Bdecided's principles experience so far tells us that a small positive -nts value doesn't keep the encodings from being transparent. That's why -nts 3 is defaulted when using quality preset -3. A more aggressive value may be welcome for a user who wants to keep average bitrate down a bit more. The higher the -nts value however the more probable is the arrival of a situation where lossyWAV is not transparent any more. A -nts value of more than 10 is not recommended though even with a value of ~10 transparency is achieved most usually.

Supported input formats

  • WAV: 16-bit, 24-bit; sample rate ≥ 32kHz PCM. Very high sample rates (>48kHz) have not been extensively tested. Tunings have been focussed on 16-bit, 44.1kHz samples (i.e. CD PCM).

Codec Compatibility

Known supported codecs

Recommended settings
Codec lossyWAV parameters Encoder parameters Combination name
FLAC -3 -m -e -r 2 -b 512 --keep-foreign-metadata[4] lossyFLAC
LPAC -b512 lossyLPAC
MPEG-4 ALS -l -n512 lossyALS
TAK -fsl512 lossyTAK
WavPack --blocksize=512 lossyWV
WMA Lossless -wmalsl (same as -cbs 2048) lossyWMALSL

There is also evidence — so-called "Bit Shifting" — to suggest that lossyWAV may work with MLP, but this remains untested due to prohibitive prices of encoders.

A comparison of portable media players is here, which shows FLAC and WMA Lossless compatibility among listed players. Any player supported by Rockbox can use FLAC or wavPack files after installing Rockbox.

Known unsupported codecs

lossyWAV application settings

lossyWAV beta v0.6.0 : WAV file bit depth reduction method by 2Bdecided.
Delphi implementation by Nick.C from a Matlab script, www.hydrogenaudio.org

Usage   : lossyWAV <input wav file> <options>

Example : lossyWAV musicfile.wav

Quality Options:

-1            extreme settings [4xFFT] (-cbs 512 -nts -3.0 -skew 36 -snr 21
              -spf 22224-22225-11235-11246-12358 -fft 11011)
-2            default settings [3xFFT] (-cbs 512 -nts  0.0 -skew 36 -snr 21
              -spf 22224-22235-22346-12347-12358 -fft 10101)
-3            compact settings [2xFFT] (-cbs 512 -nts +3.0 -skew 36 -snr 21
              -spf 22224-22235-22347-22358-2246C -fft 10001)

Standard Options:

-o <folder>   destination folder for the output file
-nts <n>      set noise_threshold_shift to n dB (-48.0dB<=n<=+48.0dB)
              (-ve values reduce bits to remove, +ve values increase)
-force        forcibly over-write output file if it exists; default=off
-check        check if WAV file has already been processed. default=off;
              errorlevel=16 if already processed, 0 if not.

Codec Specific Options:

-wmalsl       optimise internal settings for WMA Lossless codec; default=off

Advanced / System Options:

-shaping      enable fixed shaping using bit_removal difference of previous
              samples [value = brd(-1)/4]; default=off
-snr <n>      set minimum average signal to added noise ratio to n dB;
              (-215.0dB<=n<=48.0dB) Increasing value reduces bits to remove.
-skew <n>     skew fft analysis results by n dB (0.0db<=n<=48.0db) in the
              frequency range 20Hz to 3.45kHz
-spf <5x5hex> manually input the 5 spreading functions as 5 x 5 characters;
              These correspond to FFTs of 64, 128, 256, 512 & 1024 samples;
              e.g. 22235-22236-22347-22358-2246C (Characters must be one of
              1 to 9 and A to F (zero excluded).
-fft <5xbin>  select fft lengths to use in analysis, using binary switching,
              from 64, 128, 256, 512 & 1024 samples, e.g. 01001 = 128,1024
-cbs <n>      set codec block size to n samples (512<=n<=4608, n mod 32=0)

-quiet        significantly reduce screen output
-nowarn       suppress lossyWAV warnings
-detail       enable detailled output mode

-below        set process priority to below normal.
-low          set process priority to low.

Special thanks:

David Robinson for the method itself and motivation to implement it in Delphi.
Dr. Jean Debord for the use of TPMAT036 uFFT & uTypes units for FFT analysis.
Halb27 @ www.hydrogenaudio.org for donation and maintenance of the wavIO unit.

Indicative Bitrate Reduction

Conversion using lossyWAV beta v0.5.8, FLAC -8
lossyWAV Test Set FLAC -8 lossyWAV -1 lossyWAV -2 lossyWAV -3
10 Album Test Average 850kbps 480kbps 426kbps 376kbps
53 sample "problem" set 784kbps 543kbps 491kbps 434kbps
Large Foobar2000 Conversion: (lossyWAV -3; FLAC -3 -m -e -r 2 -b 512)
Album FLAC -8 lossyWAV -1 lossyWAV -2 lossyWAV -3
3283 Tracks; 258 Discs; 87.2GB>36.8GB 880kbps N/A N/A 371kbps

Using lossyWAV

Example Foobar2000 Converter Settings

Foobar2000 Converter Settings.PNG

Example flossy.bat file called from Foobar2000

@echo off
c:\data_nic\bin\lossyWAV %1 %3 %4 %5 %6 %7 %8 %9 -below -nowarn -quiet
c:\data_nic\bin\flac.exe -8 -f -b 512 "%~N1.lossy.wav" -o"%~N2.flac" 
del "%~N1.lossy.wav"

Frequently asked questions

  • Question: Is it VBR?
  • Short answer: Yes.
  • Question: Is it transparent?
  • Short answer: Almost certainly.
  • Question: Is it lossless?
  • Short answer: No.
  • Question: Why should I use this?
  • Answer:
  • high quality
  • extremely low chance of audible artefacts
  • reasonable bitrates
  • usable with unmodified, established lossless formats.

Current Test Settings

No current test settings

External links