Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: Improved FLAC encoder (Read 64431 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

Improved FLAC encoder

[attachment=2212:attachment]
This is a win32 version of the flac-1.1.2 encoder with improvements based on Garf's suggestions (or it can be rebuilt from the current CVS code).  For me on CD audio, properly applied it can improve the compression ratio 1% or 2% (e.g. ratio dropping by 1% from 51% to 50%, or a 2% improvement on a ratio of ~50%) with no effect on the decoding speed or complexity.

Garf's suggestion about applying a Hann window to the data before LPC analysis prompted me to go back to that part of the codec and investigate what could be improved.  Some of the things normally done in LPC analysis (like overlapping windows) would be a big pain to do in the reference encoder because of the way it's designed (and probably with little gain).  Other things (like adjusting for the mean in autocorrelation) are easy but yield little gain.  But using one or more windows on the data has had an immediately positive effect.

This version of flac adds a new -A option that lets you specify one or more window functions.  Instead of a rectangular window, the default is currently tukey(0.5) (first and last quarters of the window are cosine-tapered).  Here is how it's used:

Code: [Select]
-A "function", --apodization="function" 

Window audio data with given the apodization function. The functions are: bartlett, bartlett_hann, blackman, blackman_harris_4term_92db, connes, flattop, gauss(STDDEV), hamming, hann, kaiser_bessel, nuttall, rectangle, triangle, tukey(P), welch.

For gauss(STDDEV), STDDEV is the standard deviation (0<STDDEV<=0.5).

For tukey(P), P specifies the fraction of the window that is tapered (0<=P<=1; P=0 corresponds to "rectangle" and P=1 corresponds to "hann").

More than one -A option (up to 32) may be used. Any function that is specified erroneously is silently dropped. The encoder chooses suitable defaults in the absence of any -A options; any -A option specified replaces the default(s).

***When more than one function is specified, then for every subframe the encoder will try each of them separately and choose the window that results in the smallest compressed subframe. Multiple functions can greatly increase the encoding time.***


What I would like help with is coming up with optimal general-case -A defaults for the -3 .. -8 presets.  In my testing the optimal window seems to depend heavily on the spectral characteristics of the audio (as you would expect).  If you use multiple windows that have different characteristics this leads to better overall results but increases the encoding time.  So what I'd like to answer is:

1. What is the best window for CD audio "in general" (to be used for the lower presets)
2. What are the best 2 (and maybe 3 if it makes a big difference) windows (to be used for the highest presets)

This can be done with with brute force (try all combinations), heuristics (by knowing the characteristics of each window) or haphazard.  I'm hoping that with your help we'll be able to arrive at general answers.  I'm afraid mine are too specific and biased by my corpus.

So if anyone who wants to experiment can try with different -A settings, and reply here with their results (compression differences and the nature of the corpus like "classical", "metal", "noisy", "quiet") that would be great.  Thanks to Garf and thanks in advance to testers.  I'll post my results with the standard FLAC corpus next.

Josh


these are the results I got trying each window in turn with -5 and -8.

-5  uncompressed size=780558856
Code: [Select]
 409849350 tukey(0.125)
409855256 tukey(0.25)
409875833 tukey(0.03125)
409877499 tukey(0.0625)
409883425 tukey(0.015625)
409892304 tukey(0.5)
409896700 tukey(0.0078125)
409919399 gauss(0.5)
409942585 hamming
410099774 welch
410127063 triangle
410139341 connes
410145159 hann
410206946 blackman
410209682 kaiser_bessel
410245892 blackman_harris_4term_92db
410261735 nuttall
410334114 gauss(0.25)
410443236 flattop
410593346 gauss(0.125)
411043098 gauss(0.0625)
411764264 gauss(0.03125)
413032246 bartlett_hann
413099455 gauss(0.015625)
413457591 rectangle
413871409 bartlett
415302473 gauss(0.0078125)


-5 for the "non-classical" tracks (which is what I think the general populace is biased toward)
uncompressed size=321208244
Code: [Select]
 213272941 hamming
213279899 gauss(0.5)
213293852 tukey(0.5)
213324056 connes
213326549 welch
213330829 triangle
213334318 tukey(0.25)
213337944 hann
213351475 blackman
213362011 kaiser_bessel
213362020 tukey(0.125)
213377272 tukey(0.0625)
213383367 nuttall
213383604 blackman_harris_4term_92db
213388948 tukey(0.03125)
213396140 tukey(0.015625)
213400261 tukey(0.0078125)
213431582 gauss(0.25)
213457420 flattop
213615243 gauss(0.125)
213864173 gauss(0.0625)
214223504 gauss(0.03125)
214376512 bartlett_hann
214445900 rectangle
214763174 bartlett
214836383 gauss(0.015625)
215909945 gauss(0.0078125)


-8 uncompressed size=780558856
Code: [Select]
 406740688 tukey(0.5)
406786760 tukey(0.25)
406824594 tukey(0.125)
406850821 welch
406862118 tukey(0.0625)
406863285 hamming
406879377 connes
406879491 hann
406884072 tukey(0.03125)
406891990 tukey(0.015625)
406897041 tukey(0.0078125)
406897975 triangle
406929514 blackman
406943550 kaiser_bessel
406949271 blackman_harris_4term_92db
406971792 nuttall
407010949 gauss(0.25)
407144075 gauss(0.5)
407155852 flattop
407198841 gauss(0.125)
407519399 gauss(0.0625)
408079300 gauss(0.03125)
409140225 gauss(0.015625)
410968550 gauss(0.0078125)
411083716 bartlett_hann
411877779 rectangle
412069308 bartlett


-8 "non-classical" uncompressed size=321208244
Code: [Select]
 212016651 tukey(0.5)
212020858 hamming
212025289 hann
212026935 connes
212035402 blackman
212035638 triangle
212037703 welch
212045149 kaiser_bessel
212053628 blackman_harris_4term_92db
212055529 nuttall
212061598 tukey(0.25)
212081934 gauss(0.25)
212087652 gauss(0.5)
212091180 tukey(0.125)
212114878 tukey(0.0625)
212126112 tukey(0.03125)
212130608 flattop
212132781 tukey(0.015625)
212136244 tukey(0.0078125)
212212269 gauss(0.125)
212411636 gauss(0.0625)
212734806 gauss(0.03125)
213284875 gauss(0.015625)
213419896 bartlett_hann
213599770 rectangle
213869540 bartlett
214205800 gauss(0.0078125)

Improved FLAC encoder

Reply #1
While I appreciate you trying to "tweak" a 1-2% compression improvement out of FLAC, I sure hope it doesn't break backward compatability with FLAC decoders or audio players that are out there. I like FLAC just the way it is (a lossless standard) that just works. I have entrusted my entire archive of audio masters to the FLAC format and would dislike immensely having to deal with a new version that might be buggy and/or break compatability over a 1 to 2% coding improvement. My 2 cents... Thanks for writing FLAC.

Improved FLAC encoder

Reply #2
In your case, M. Coalson (do you mind if I call you Sir? ), your best bet would be to pick half a turkey -- the default is fine as it is right now, and seems quite optimized.  Maybe allowing a custom setting on the generic encoder could help people trying to squeeze a few drops of extra optimization out, but at least from the standard flac corpus, it seems to be optimized to the maximum, right now.

Short answer : Tukey 0.5

Is there any slowdown resulting of this window application (when it is changed)?

Improved FLAC encoder

Reply #3
If I've observed one thing about the way Josh works over the years I've been following (and using!) FLAC, it's that he is careful to always preserve backward compatibility. No worries there....

    - M.

Improved FLAC encoder

Reply #4
Yeah I did a quick test:

Quick Test

I only tested -8 because that's the only preset I use. I didn't really pour over the results, I just highlighted the setting that gave the best compression. I'll do some more files tomorrow, but as of right now it's already past my normal bedtime. 

Improved FLAC encoder

Reply #5
Quote
' date='May 2 2006, 10:01 PM' post='388693']In your case, M. Coalson (do you mind if I call you Sir? )
hehe, am I being knighted?  I'm just a Josh...
Quote
Is there any slowdown resulting of this window application (when it is changed)?

no, only if you specify multiple -A options.  even in the default case one window is always applied, and applying the window itself is pretty negligible compared to the rest of the analysis stage.

Josh

Improved FLAC encoder

Reply #6
While I appreciate you trying to "tweak" a 1-2% compression improvement out of FLAC, I sure hope it doesn't break backward compatability with FLAC decoders or audio players that are out there.

don't worry, this has no effect on the decoder, it's purely an encoder improvement.

@zoom, thanks, that format is useful.

also, a couple other things that would be interesting to know... 1. if there there are any mistakes in any of the window formulas (wouldn't surprise me)

[attachment=2213:attachment]

2. if there is an efficient technique for determining what kind of window would be best.  I imagine that looking at the signal in the frequency domain might give a hint but I'm not sure that would be faster than just trying a couple of different windows.

Josh

Improved FLAC encoder

Reply #7
Windows users can use this .cmd file to test the encoder:
Code: [Select]
for %%n in ("tukey(0.875)" "tukey(0.75)" "tukey(0.625)" "tukey(0.5)" "tukey(0.375)" "tukey(0.25)" "tukey(0.125)" "gauss(0.5)" "gauss(0.4375)" "gauss(0.375)" "gauss(0.25)" "gauss(0.1875)" "gauss(0.125)" "gauss(0.0625)" "hamming" "hann" "blackman" "kaiser_bessel" "connes" "triangle" "welch" "blackman_harris_4term_92db" "nuttall" "flattop" "bartlett_hann" "rectangle" "bartlett") do (start "%%n" /B /LOW /WAIT "flac.exe" -8 -A %%n "test.wav" -o "%%n.flac" & dir /N "*.flac" >>"temp.txt" &  del "*.flac")
dir /N *.wav | find ".wav" >"report.txt"
type temp.txt | find ".flac" | sort >>"report.txt"

or this one for users with "," (comma) as decimal point in system locale (e.g., Russia):
Code: [Select]
for %%n in ("tukey(0,875)" "tukey(0,75)" "tukey(0,625)" "tukey(0,5)" "tukey(0,375)" "tukey(0,25)" "tukey(0,125)" "gauss(0,5)" "gauss(0,4375)" "gauss(0,375)" "gauss(0,25)" "gauss(0,1875)" "gauss(0,125)" "gauss(0,0625)" "hamming" "hann" "blackman" "kaiser_bessel" "connes" "triangle" "welch" "blackman_harris_4term_92db" "nuttall" "flattop" "bartlett_hann" "rectangle" "bartlett") do (start "%%n" /B /LOW /WAIT "flac.exe" -8 -A %%n "test.wav" -o "%%n.flac" & dir /N "*.flac" >>"temp.txt" &  del "*.flac")
dir /N *.wav | find ".wav" >"report.txt"
type temp.txt | find ".flac" | sort >>"report.txt"

Copy contents to a .cmd file, place it in a folder with the new flac.exe and some test.wav and run. Output files will be named as blackman.flac etc., report.txt file will contain sorted (ascending sizes) list of files.

Edit. Updated the script to run with IDLE priority (in backgroung) and modified list of functions.
Edit 2. Made the script not to create bunch of flac files.

Improved FLAC encoder

Reply #8
Are the blocks' windows currently overlapping?
Did you try it Vorbis-style? (overlapping + Vorbis window)

Sebi

Improved FLAC encoder

Reply #9
I encoded a few songs using Egor's .cmd. tukey(0.25) seems to give better results for the heavier songs

Pink Floyd - Time
Prog Rock
Code: [Select]
74,946,524     original wav

43,298,415     tukey(0.5)
43,299,286     connes
43,299,513     triangle
43,301,660     hann
43,302,460     welch
43,303,237     blackman
43,303,325     tukey(0.25)
43,303,921     kaiser_bessel
43,305,526     blackman_harris_4term_92db
43,308,517     nuttall
43,310,975     tukey(0.125)
43,311,345     gauss(0.25)
43,312,623     hamming
43,314,715     tukey(0.0625)
43,319,185     flattop
43,319,745     tukey(0.03125)
43,320,245     tukey(0.015625)
43,320,473     tukey(0.0078125)
43,333,742     gauss(0.125)
43,347,970     gauss(0.5)
43,375,339     gauss(0.0625)
43,449,666     gauss(0.03125)
43,574,439     gauss(0.015625)
43,772,976     gauss(0.0078125)
43,824,232     bartlett_hann
43,899,492     rectangle
43,952,327     bartlett

Ennio Morricone - The Ecstacy of Gold
Err... classical? :/
Code: [Select]
35,849,228     original wav

19,399,369     tukey(0.0078125)
19,399,423     tukey(0.03125)
19,399,551     tukey(0.015625)
19,399,588     tukey(0.0625)
19,400,363     tukey(0.125)
19,400,453     tukey(0.25)
19,401,527     tukey(0.5)
19,404,046     welch
19,406,528     triangle
19,406,895     hann
19,407,121     connes
19,409,607     hamming
19,410,162     kaiser_bessel
19,410,872     blackman
19,411,842     blackman_harris_4term_92db
19,412,074     nuttall
19,414,466     gauss(0.25)
19,415,691     gauss(0.5)
19,417,452     flattop
19,425,566     gauss(0.125)
19,438,696     gauss(0.0625)
19,462,919     gauss(0.03125)
19,507,293     gauss(0.015625)
19,590,546     gauss(0.0078125)
19,687,589     bartlett_hann
19,731,890     rectangle
19,745,621     bartlett

Symphony X - Inferno (Unleash The Fire)
Prog/Speed Metal
Code: [Select]
58,689,500     original wav

41,504,232     tukey(0.25)
41,505,556     tukey(0.5)
41,505,871     welch
41,506,215     tukey(0.125)
41,506,506     tukey(0.0625)
41,506,549     tukey(0.0078125)
41,507,788     tukey(0.03125)
41,507,834     tukey(0.015625)
41,513,590     triangle
41,516,383     connes
41,516,849     hamming
41,520,538     hann
41,522,831     gauss(0.5)
41,531,739     blackman
41,535,021     kaiser_bessel
41,542,636     blackman_harris_4term_92db
41,543,320     nuttall
41,554,387     gauss(0.25)
41,573,664     flattop
41,600,210     gauss(0.125)
41,641,811     gauss(0.0625)
41,694,697     gauss(0.03125)
41,716,091     bartlett_hann
41,730,106     rectangle
41,784,002     gauss(0.015625)
41,793,242     bartlett
41,920,042     gauss(0.0078125)

In Flames - Acoustic Medley
Instrumental (acoustic harmony)
Code: [Select]
27,076,268     original wav

13,895,201     gauss(0.125)
13,896,080     gauss(0.0625)
13,904,998     gauss(0.25)
13,905,189     nuttall
13,905,232     flattop
13,905,571     blackman_harris_4term_92db
13,909,832     kaiser_bessel
13,910,960     blackman
13,913,454     hann
13,913,926     gauss(0.03125)
13,916,395     connes
13,917,893     triangle
13,922,512     welch
13,923,928     tukey(0.5)
13,932,504     hamming
13,934,215     tukey(0.25)
13,937,193     tukey(0.125)
13,940,294     tukey(0.0625)
13,941,648     tukey(0.03125)
13,944,015     tukey(0.015625)
13,948,647     tukey(0.0078125)
13,952,120     gauss(0.015625)
13,975,455     gauss(0.5)
14,013,929     gauss(0.0078125)
14,144,818     bartlett_hann
14,163,763     bartlett
14,192,943     rectangle

Enforsaken - Tales of Bitterness
Melodic Death Metal (heaviest song encoded)
Code: [Select]
61,542,476     original wav

46,212,870     tukey(0.25)
46,213,819     tukey(0.125)
46,215,229     tukey(0.0625)
46,215,631     tukey(0.5)
46,215,752     tukey(0.03125)
46,216,228     tukey(0.015625)
46,216,760     tukey(0.0078125)
46,217,205     welch
46,224,433     gauss(0.5)
46,225,065     triangle
46,225,543     hamming
46,227,927     connes
46,231,745     hann
46,242,472     blackman
46,245,556     kaiser_bessel
46,252,841     nuttall
46,253,016     blackman_harris_4term_92db
46,262,017     gauss(0.25)
46,278,066     flattop
46,308,016     gauss(0.125)
46,363,746     gauss(0.0625)
46,443,073     bartlett_hann
46,446,791     gauss(0.03125)
46,451,070     rectangle
46,537,101     bartlett
46,583,945     gauss(0.015625)
46,800,927     gauss(0.0078125)
</signature>

Improved FLAC encoder

Reply #10
It seems to me that testing with CD images is not practical: it takes very long to complete and it may contain long inter-track digital silence parts. So probably it is better to test with ONE song per test.
Code: [Select]
[url=http://www.amazon.com/gp/product/B00074CC1Y/sr=8-2/qid=1146647028/ref=pd_bbs_2/102-1628512-5068934?%5Fencoding=UTF8]Michael Buble - It's time[/url] (Jazz Vocal / Popular)
flac -8

590 281 484 test.wav

367 258 943 tukey(0,625)
367 260 079 tukey(0,618034)
367 264 606 tukey(0,5)
367 269 016 tukey(0,75)
367 284 590 tukey(0,875)
367 292 956 connes
367 293 894 hamming
367 293 912 welch
367 301 748 hann
367 302 185 triangle
367 307 853 tukey(0,25)
367 333 950 blackman
367 346 199 kaiser_bessel
367 348 342 tukey(0,125)
367 360 482 gauss(0,5)
367 366 460 nuttall
367 369 648 blackman_harris_4term_92db
367 381 199 tukey(0,0625)
367 400 137 tukey(0,03125)
367 407 823 gauss(0,25)
367 410 875 tukey(0,015625)
367 414 333 tukey(0,0078125)
367 485 735 flattop
367 628 021 gauss(0,125)
367 934 476 gauss(0,0625)
368 439 444 gauss(0,03125)
369 179 530 bartlett_hann
369 305 745 gauss(0,015625)
369 486 263 rectangle
369 771 271 bartlett
370 751 786 gauss(0,0078125)

Improved FLAC encoder

Reply #11
Seems like tukey (0.5) is an overall champion.
Infrasonic Quartet + Sennheiser HD650 + Microlab Solo 2 mk3. 

Improved FLAC encoder

Reply #12
Genre classification is taken from Amazon.com ("Look for similar items by category"). All links lead to corresponding Audio CD item with short 20-30 sec. music clips available for listen in WMA and/or RA.

Code: [Select]
[url=http://www.amazon.com/gp/product/B00000F1D6/sr=1-1/qid=1146668521/ref=sr_1_1/102-1628512-5068934?%5Fencoding=UTF8&s=music]Seal - Lost My Faith[/url]
Adult Contemporary / Pop / Pop Rock / Vocal Pop / Rock

48 474 764 test.wav

29 797 004 tukey(0,75)
29 797 180 tukey(0,6875)
29 797 213 tukey(0,25)
29 797 458 tukey(0,125)
29 798 177 tukey(0,71875)
29 798 222 tukey(0,625)
29 798 398 tukey(0,5)
29 800 109 tukey(0,0625)
29 801 244 tukey(0,03125)
29 802 229 tukey(0,015625)
29 803 137 tukey(0,875)
29 804 148 welch
29 804 438 hamming
29 804 873 connes
29 805 012 tukey(0,0078125)
29 806 527 triangle
29 807 314 hann
29 809 327 blackman
29 811 448 kaiser_bessel
29 811 496 nuttall
29 812 210 blackman_harris_4term_92db
29 813 799 gauss(0,5)
29 817 479 gauss(0,25)
29 824 973 flattop
29 830 982 gauss(0,125)
29 860 623 gauss(0,0625)
29 909 657 gauss(0,03125)
29 990 596 gauss(0,015625)
30 033 688 bartlett_hann
30 067 595 rectangle
30 099 657 bartlett
30 132 632 gauss(0,0078125)
Code: [Select]
[url=http://www.amazon.com/gp/product/B00000DC4A/sr=1-1/qid=1146667276/ref=sr_1_1/102-1628512-5068934?%5Fencoding=UTF8&s=music]Bryan Adams - Cloud Number Nine[/url]
Pop / Pop Rock / Rock / Adult Contemporary

39 788 828 test.wav

27 354 308 blackman
27 354 541 gauss(0,25)
27 354 698 blackman_harris_4term_92db
27 355 443 nuttall
27 356 279 flattop
27 356 694 kaiser_bessel
27 357 733 tukey(0,875)
27 358 142 hann
27 358 818 connes
27 359 964 hamming
27 360 192 tukey(0,71875)
27 360 643 tukey(0,75)
27 360 721 tukey(0,6875)
27 361 506 gauss(0,125)
27 363 033 triangle
27 363 394 tukey(0,625)
27 366 078 tukey(0,5)
27 366 474 welch
27 372 787 gauss(0,5)
27 375 991 gauss(0,0625)
27 377 582 tukey(0,25)
27 387 775 tukey(0,125)
27 393 651 tukey(0,0625)
27 396 525 tukey(0,03125)
27 397 724 tukey(0,015625)
27 398 791 tukey(0,0078125)
27 406 955 gauss(0,03125)
27 466 587 gauss(0,015625)
27 562 553 gauss(0,0078125)
27 564 003 bartlett_hann
27 601 758 rectangle
27 620 854 bartlett

Code: [Select]
[url=http://www.amazon.com/gp/product/B0007QCLS6/sr=8-2/qid=1146666821/ref=sr_1_2/102-1628512-5068934?%5Fencoding=UTF8]Acoustic Alchemy - So Kylie[/url]
Jazz / Smooth Jazz / New Age

46 247 420 test.wav

31 082 004 flattop
31 084 092 gauss(0,25)
31 085 215 blackman_harris_4term_92db
31 085 631 nuttall
31 087 579 kaiser_bessel
31 088 416 blackman
31 089 980 gauss(0,125)
31 095 130 hann
31 097 849 connes
31 097 851 tukey(0,875)
31 099 848 hamming
31 102 273 triangle
31 102 425 tukey(0,75)
31 104 121 tukey(0,71875)
31 105 341 tukey(0,6875)
31 108 436 tukey(0,625)
31 108 965 gauss(0,0625)
31 111 493 gauss(0,5)
31 114 695 welch
31 115 786 tukey(0,5)
31 136 227 tukey(0,25)
31 143 722 gauss(0,03125)
31 148 950 tukey(0,125)
31 156 207 tukey(0,0625)
31 160 024 tukey(0,03125)
31 161 325 tukey(0,015625)
31 162 139 tukey(0,0078125)
31 172 280 bartlett_hann
31 189 186 bartlett
31 203 537 gauss(0,015625)
31 209 187 rectangle
31 297 414 gauss(0,0078125)

Code: [Select]
[url=http://www.amazon.com/gp/product/B00074CC6Y/ref=sr_11_1/102-1628512-5068934?%5Fencoding=UTF8]3rd Force - You Got It[/url]
Jazz / New Age

48 423 020 test.wav

32 524 489 blackman_harris_4term_92db
32 524 503 nuttall
32 524 574 kaiser_bessel
32 524 638 blackman
32 525 499 gauss(0,25)
32 528 466 hann
32 529 867 flattop
32 530 914 tukey(0,875)
32 531 204 connes
32 534 237 tukey(0,75)
32 535 370 hamming
32 535 886 tukey(0,71875)
32 537 112 tukey(0,6875)
32 537 227 triangle
32 539 904 tukey(0,625)
32 542 725 gauss(0,125)
32 545 130 gauss(0,5)
32 546 652 welch
32 547 263 tukey(0,5)
32 565 544 gauss(0,0625)
32 567 758 tukey(0,25)
32 581 849 tukey(0,125)
32 590 546 tukey(0,0625)
32 594 973 tukey(0,03125)
32 597 231 tukey(0,015625)
32 597 751 tukey(0,0078125)
32 598 698 gauss(0,03125)
32 603 189 bartlett_hann
32 606 696 bartlett
32 648 365 rectangle
32 653 773 gauss(0,015625)
32 741 336 gauss(0,0078125)

Code: [Select]
[url=http://www.amazon.com/gp/product/B00005RD77/ref=sr_11_1/102-1628512-5068934?%5Fencoding=UTF8]The Temptations - A love I can see[/url]
Oldies / Classic R&B / R&B / Soul

61 039 148 test.wav

42 603 149 tukey(0,6875)
42 603 260 tukey(0,625)
42 604 157 tukey(0,75)
42 605 036 tukey(0,5)
42 605 283 welch
42 605 489 tukey(0,875)
42 605 912 triangle
42 605 960 hamming
42 606 559 connes
42 608 149 hann
42 609 320 gauss(0,5)
42 613 505 tukey(0,25)
42 613 851 blackman
42 616 907 kaiser_bessel
42 622 192 nuttall
42 622 417 tukey(0,125)
42 622 759 blackman_harris_4term_92db
42 626 694 tukey(0,0625)
42 629 175 tukey(0,03125)
42 630 495 tukey(0,015625)
42 631 024 tukey(0,0078125)
42 631 272 gauss(0,25)
42 645 378 flattop
42 672 991 gauss(0,125)
42 721 847 gauss(0,0625)
42 767 332 bartlett_hann
42 772 875 rectangle
42 788 818 gauss(0,03125)
42 857 372 bartlett
42 895 465 gauss(0,015625)
43 059 477 gauss(0,0078125)

Improved FLAC encoder

Reply #13
Glad to see someone testing using tukey values over 0.5.

Josh may have only listed results from 0-0.5; however, as his docs state, it ranges from 0-1.

Egor's results appear to show that a higher value than 0.5 may be better...

Edit: I was actually hoping to be smug and be the first to test higher values, but Egor beat me to the punch.

Edit 2: Am I going mental?  I thought the original batch script didn't include values over 0.5, and Insolent's results appear to bear that out.  I dunno, I'm confused.  Remember to test values over 0.5 anyway children, but always get an adult to supervise.
I'm on a horse.

Improved FLAC encoder

Reply #14
I did a test just now with Egor's script and here's the results:
Would it be useful to record the length of time it takes to do each test for encoding and decoding? The only problem is it wouldn't be very accurate because the guy working the stopwatch is a bit tired right now 

Code: [Select]
File: Econoline Crush "Surefire". Moderately fast, hard rock,
album replay gain value is -7.18, peak level 0.982.
Track 01 in album "The Devil You Know".

Original size of .wav: 37996604

Baseline test with the old flac.exe 1.1.2 with -8 results: size: 26548249, ratio: 0.699
Baseline test with the old flac.exe 1.1.2 with -5 results: size: 26597329, ratio: 0.700

    26,373,390    tukey(0.0625).flac
    26,373,419    tukey(0.015625).flac
    26,373,552    tukey(0.03125).flac
    26,373,866    tukey(0.25).flac
    26,374,304    tukey(0.0078125).flac
    26,375,957    tukey(0.5).flac
    26,376,569    tukey(0.625).flac
    26,376,703    welch.flac
    26,379,314    tukey(0.75).flac
    26,381,420    tukey(0.875).flac
    26,381,883    connes.flac
    26,382,157    triangle.flac
    26,383,403    hamming.flac
    26,383,762    hann.flac
    26,384,467    gauss(0.5).flac
    26,389,232    blackman.flac
    26,390,587    kaiser_bessel.flac
    26,393,578    nuttall.flac
    26,394,967    blackman_harris_4term_92db.flac
    26,398,926    gauss(0.25).flac
    26,406,505    flattop.flac
    26,419,611    gauss(0.125).flac
    26,448,924    gauss(0.0625).flac
    26,494,724    gauss(0.03125).flac
    26,537,577    bartlett_hann.flac
    26,548,247    rectangle.flac
    26,572,386    gauss(0.015625).flac
    26,595,903    bartlett.flac
    26,689,265    gauss(0.0078125).flac

Improved FLAC encoder

Reply #15
Here's another one:

Code: [Select]
File: Black Sabbath "Reunion", track 7 of disc 2, "Paranoid (live)". Metal, with a
loud audience track.
.wav file size: 47604524 bytes
Baseline tests with old flac 1.1.2: -8 result was 33483792 bytes, ratio 0.703
                   -5 result was 33539684 bytes, ratio 0.705

        33,350,660    tukey(0.25).flac
        33,350,752    tukey(0.125).flac
        33,351,083    tukey(0.03125).flac
        33,351,089    tukey(0.0625).flac
        33,351,553    tukey(0.015625).flac
        33,351,644    tukey(0.0078125).flac
        33,353,213    tukey(0.5).flac
        33,354,387    welch.flac
        33,355,954    tukey(0.625).flac
        33,358,746    tukey(0.75).flac
        33,360,615    gauss(0.5).flac
        33,361,061    triangle.flac
        33,361,724    tukey(0.875).flac
        33,362,022    connes.flac
        33,362,137    hamming.flac
        33,364,682    hann.flac
        33,371,447    blackman.flac
        33,373,167    kaiser_bessel.flac
        33,377,505    nuttall.flac
        33,378,299    blackman_harris_4term_92db.flac
        33,384,174    gauss(0.25).flac
        33,396,431    flattop.flac
        33,417,378    gauss(0.125).flac
        33,458,057    gauss(0.0625).flac
        33,483,790    rectangle.flac
        33,486,829    bartlett_hann.flac
        33,516,644    gauss(0.03125).flac
        33,544,766    bartlett.flac
        33,607,746    gauss(0.015625).flac
        33,740,096    gauss(0.0078125).flac

Improved FLAC encoder

Reply #16
Are the blocks' windows currently overlapping?

no, this is really hard to do with the reference encoder due to its design.

Did you try it Vorbis-style? (overlapping + Vorbis window)

you mean this one?  no, haven't tried it, what is the motivation behind that function?

Josh

edit: just found this

 

Improved FLAC encoder

Reply #17
Results from 4 CD images. Compression level is -5. If CD images are of any use, I can repeat the runs for -8, and maybe add some more. I used Egor's batch file (thanks).

Rock, Indie rock
Code: [Select]
Franz Ferdinand - Franz Ferdinand ( Rock, Indie rock )

Settings     flac -5

411.000.284  wav

263.146.891  hamming
263.213.796  tukey(0,75)
263.219.469  tukey(0,875)
263.225.582  connes
263.229.532  gauss(0,5)
263.234.058  tukey(0,625)
263.234.129  hann
263.242.693  triangle
263.244.283  tukey(0,5)
263.244.351  welch
263.256.663  blackman
263.265.702  kaiser_bessel
263.294.433  nuttall
263.298.751  blackman_harris_4term_92db
263.312.349  tukey(0,25)
263.348.230  gauss(0,25)
263.368.586  tukey(0,125)
263.384.188  flattop
263.403.331  tukey(0,0625)
263.416.217  tukey(0,03125)
263.426.772  tukey(0,015625)
263.431.307  tukey(0,0078125)
263.624.620  gauss(0,125)
264.007.491  gauss(0,0625)
264.667.490  gauss(0,03125)
265.609.974  bartlett_hann
265.670.090  gauss(0,015625)
265.804.430  rectangle
266.350.898  bartlett
267.144.977  gauss(0,0078125)


Classical, Chamber
Code: [Select]
Bartok - The 6 String Quartets - Hagen Quartett - CD2 ( Classical, Chamber )

Settings     flac -5

792.388.844  wav

328.807.460  tukey(0,015625)
328.808.011  tukey(0,03125)
328.816.780  tukey(0,0625)
328.817.533  tukey(0,0078125)
328.824.978  tukey(0,125)
328.848.866  tukey(0,25)
328.907.717  tukey(0,5)
328.954.232  tukey(0,625)
328.990.946  welch
329.034.004  tukey(0,75)
329.119.309  tukey(0,875)
329.142.472  gauss(0,5)
329.159.989  hamming
329.165.919  connes
329.245.401  hann
329.275.609  flattop
329.291.402  triangle
329.462.428  blackman
329.520.377  kaiser_bessel
329.621.737  nuttall
329.635.319  blackman_harris_4term_92db
329.791.393  gauss(0,25)
330.368.669  gauss(0,125)
331.143.291  gauss(0,0625)
331.630.913  rectangle
332.065.047  bartlett
332.083.237  bartlett_hann
332.234.396  gauss(0,03125)
333.747.781  gauss(0,015625)
335.701.502  gauss(0,0078125)


Rock, Pop, Dance, Electronica
Code: [Select]
Madonna - Music ( Rock, Pop, Dance, Electronica )

Settings     flac -5

521.913.548  wav

339.256.667  flattop
339.292.763  kaiser_bessel
339.292.915  nuttall
339.297.501  blackman_harris_4term_92db
339.300.268  blackman
339.313.694  gauss(0,25)
339.326.053  hann
339.341.414  hamming
339.345.183  tukey(0,875)
339.354.898  connes
339.370.916  tukey(0,75)
339.407.096  triangle
339.414.757  tukey(0,625)
339.466.101  gauss(0,5)
339.466.944  tukey(0,5)
339.474.566  welch
339.597.401  gauss(0,125)
339.642.737  tukey(0,25)
339.759.687  tukey(0,125)
339.820.297  tukey(0,0625)
339.860.098  tukey(0,03125)
339.882.491  tukey(0,015625)
339.901.977  tukey(0,0078125)
340.067.700  gauss(0,0625)
340.791.923  gauss(0,03125)
341.228.752  bartlett_hann
341.406.438  rectangle
341.715.784  bartlett
341.955.434  gauss(0,015625)
343.911.423  gauss(0,0078125)


Jazz
Code: [Select]
The Dave Brubeck Quartet - Time out ( Jazz )

Settings     flac -5

410.447.564  wav

233.113.139  tukey(0,75)
233.113.646  tukey(0,625)
233.118.157  tukey(0,875)
233.118.799  connes
233.119.233  tukey(0,5)
233.120.528  hamming
233.123.485  hann
233.124.423  triangle
233.126.009  welch
233.129.824  gauss(0,5)
233.145.960  blackman
233.154.044  kaiser_bessel
233.156.273  tukey(0,25)
233.173.263  nuttall
233.175.633  blackman_harris_4term_92db
233.193.930  tukey(0,125)
233.205.649  gauss(0,25)
233.218.003  tukey(0,0625)
233.232.815  tukey(0,03125)
233.240.404  tukey(0,015625)
233.240.596  flattop
233.246.803  tukey(0,0078125)
233.374.878  gauss(0,125)
233.589.049  gauss(0,0625)
233.647.616  bartlett_hann
233.691.834  rectangle
233.939.049  gauss(0,03125)
233.947.922  bartlett
234.596.944  gauss(0,015625)
235.735.481  gauss(0,0078125)

Improved FLAC encoder

Reply #18
Original WAV                    46,223,900





05/03/2006  02:09 PM        29,229,288 blackman.flac
05/03/2006  02:09 PM        29,229,510 kaiser_bessel.flac
05/03/2006  02:09 PM        29,230,648 nuttall.flac
05/03/2006  02:09 PM        29,230,869 blackman_harris_4term_92db.flac
05/03/2006  02:09 PM        29,232,884 hann.flac
05/03/2006  02:09 PM        29,233,992 gauss(0.25).flac
05/03/2006  02:09 PM        29,235,303 tukey(0.875).flac
05/03/2006  02:09 PM        29,235,885 connes.flac
05/03/2006  02:09 PM        29,237,784 hamming.flac
05/03/2006  02:09 PM        29,240,103 flattop.flac
05/03/2006  02:09 PM        29,240,127 tukey(0.75).flac
05/03/2006  02:09 PM        29,240,700 triangle.flac
05/03/2006  02:09 PM        29,247,420 tukey(0.625).flac
05/03/2006  02:09 PM        29,253,185 gauss(0.5).flac
05/03/2006  02:09 PM        29,253,760 welch.flac
05/03/2006  02:09 PM        29,257,277 tukey(0.5).flac
05/03/2006  02:09 PM        29,265,523 gauss(0.125).flac
05/03/2006  02:09 PM        29,285,601 tukey(0.25).flac
05/03/2006  02:09 PM        29,301,418 gauss(0.0625).flac
05/03/2006  02:09 PM        29,305,862 tukey(0.125).flac
05/03/2006  02:09 PM        29,317,644 tukey(0.0625).flac
05/03/2006  02:09 PM        29,323,825 tukey(0.03125).flac
05/03/2006  02:09 PM        29,327,476 tukey(0.015625).flac
05/03/2006  02:09 PM        29,328,710 tukey(0.0078125).flac
05/03/2006  02:09 PM        29,348,962 gauss(0.03125).flac
05/03/2006  02:09 PM        29,397,980 bartlett_hann.flac
05/03/2006  02:09 PM        29,422,630 gauss(0.015625).flac
05/03/2006  02:09 PM        29,433,043 rectangle.flac
05/03/2006  02:09 PM        29,445,063 bartlett.flac
05/03/2006  02:14 PM        29,461,245 test.flac
05/03/2006  02:09 PM        29,539,707 gauss(0.0078125).flac

Improved FLAC encoder

Reply #19
Need any more tests? 

Improved FLAC encoder

Reply #20
Edit 2: Am I going mental?  I thought the original batch script didn't include values over 0.5, and Insolent's results appear to bear that out.  I dunno, I'm confused.  Remember to test values over 0.5 anyway children, but always get an adult to supervise.

I think Egor edited his script after I'd already done my tests. Because I don't remeber seeing 0.75 and 0.875 in there.
</signature>

Improved FLAC encoder

Reply #21
I ran two tests and I have more on the way later

Code: [Select]
Opeth - The Drapery Falls
Death Metal

Original size: 115,342,124

05/03/2006  08:07p          84,925,538 tukey(0.625).flac
05/03/2006  08:07p          84,926,049 tukey(0.75).flac
05/03/2006  08:07p          84,927,584 tukey(0.5).flac
05/03/2006  08:07p          84,928,237 welch.flac
05/03/2006  08:07p          84,929,268 tukey(0.875).flac
05/03/2006  08:07p          84,929,275 triangle.flac
05/03/2006  08:07p          84,930,206 connes.flac
05/03/2006  08:07p          84,931,772 hann.flac
05/03/2006  08:07p          84,933,449 hamming.flac
05/03/2006  08:07p          84,938,885 tukey(0.25).flac
05/03/2006  08:07p          84,941,754 blackman.flac
05/03/2006  08:07p          84,946,453 kaiser_bessel.flac
05/03/2006  08:07p          84,951,194 tukey(0.125).flac
05/03/2006  08:07p          84,952,685 blackman_harris_4term_92db.flac
05/03/2006  08:07p          84,953,268 nuttall.flac
05/03/2006  08:07p          84,955,396 gauss(0.5).flac
05/03/2006  08:07p          84,956,352 tukey(0.0625).flac
05/03/2006  08:07p          84,961,363 tukey(0.03125).flac
05/03/2006  08:07p          84,964,095 tukey(0.015625).flac
05/03/2006  08:07p          84,964,670 tukey(0.0078125).flac
05/03/2006  08:07p          84,965,453 gauss(0.25).flac
05/03/2006  08:07p          84,987,934 flattop.flac
05/03/2006  08:07p          85,029,063 gauss(0.125).flac
05/03/2006  08:07p          85,106,610 gauss(0.0625).flac
05/03/2006  08:07p          85,225,779 gauss(0.03125).flac
05/03/2006  08:07p          85,413,339 bartlett_hann.flac
05/03/2006  08:07p          85,418,708 gauss(0.015625).flac
05/03/2006  08:07p          85,456,032 rectangle.flac
05/03/2006  08:07p          85,586,037 bartlett.flac
05/03/2006  08:07p          85,709,985 gauss(0.0078125).flac


And just out of interest, I ran a mono file through:

Code: [Select]
Phil Harris - "The Dark Town Poker Club" (mono)
Big Band

Original Size: 17,057,924

05/03/2006  08:27p           8,397,704 gauss(0.03125).flac
05/03/2006  08:27p           8,400,230 gauss(0.015625).flac
05/03/2006  08:27p           8,405,118 gauss(0.0625).flac
05/03/2006  08:27p           8,405,835 gauss(0.125).flac
05/03/2006  08:27p           8,406,988 tukey(0.125).flac
05/03/2006  08:27p           8,409,333 tukey(0.875).flac
05/03/2006  08:27p           8,410,243 tukey(0.5).flac
05/03/2006  08:27p           8,411,396 welch.flac
05/03/2006  08:27p           8,411,481 tukey(0.015625).flac
05/03/2006  08:27p           8,411,784 triangle.flac
05/03/2006  08:27p           8,412,951 blackman.flac
05/03/2006  08:27p           8,412,953 nuttall.flac
05/03/2006  08:27p           8,413,914 tukey(0.03125).flac
05/03/2006  08:27p           8,414,332 tukey(0.25).flac
05/03/2006  08:27p           8,414,512 gauss(0.25).flac
05/03/2006  08:27p           8,414,700 hann.flac
05/03/2006  08:27p           8,415,178 tukey(0.0078125).flac
05/03/2006  08:27p           8,415,700 tukey(0.0625).flac
05/03/2006  08:27p           8,416,148 tukey(0.625).flac
05/03/2006  08:27p           8,416,680 kaiser_bessel.flac
05/03/2006  08:27p           8,417,520 tukey(0.75).flac
05/03/2006  08:27p           8,417,637 blackman_harris_4term_92db.flac
05/03/2006  08:27p           8,420,836 connes.flac
05/03/2006  08:27p           8,423,927 flattop.flac
05/03/2006  08:27p           8,436,133 gauss(0.0078125).flac
05/03/2006  08:27p           8,445,898 hamming.flac
05/03/2006  08:27p           8,503,197 gauss(0.5).flac
05/03/2006  08:27p           8,871,029 bartlett_hann.flac
05/03/2006  08:27p           8,937,868 bartlett.flac
05/03/2006  08:27p           8,958,712 rectangle.flac

Improved FLAC encoder

Reply #22
Edit 2: Am I going mental?  I thought the original batch script didn't include values over 0.5, and Insolent's results appear to bear that out.  I dunno, I'm confused.  Remember to test values over 0.5 anyway children, but always get an adult to supervise.

I added values over 0.5 a little later, sorry for not mentioning it in the original post.

Improved FLAC encoder

Reply #23
A Perfect Circle - Mer De Noms (full Album)
Style: Hard Rock
Code: [Select]
Original Wav
471,199,724 A Perfect Circle - Mer De Noms.wav

Flac 1.1.2 -8 Results
314,591,233 A Perfect Circle - Mer De Noms.flac

Flac 1.1.2_CVS -8 Results
311,793,269 tukey(0.875).flac
311,795,907 hann.flac
311,799,691 tukey(0.75).flac
311,800,567 connes.flac
311,800,932 blackman.flac
311,805,213 kaiser_bessel.flac
311,807,392 tukey(0.625).flac
311,819,838 nuttall.flac
311,820,794 triangle.flac
311,821,621 blackman_harris_4term_92db.flac
311,824,423 tukey(0.5).flac
311,836,389 hamming.flac
311,839,182 welch.flac
311,842,671 gauss(0.25).flac
311,911,330 flattop.flac
311,911,482 tukey(0.25).flac
311,973,386 tukey(0.125).flac
312,003,993 gauss(0.5).flac
312,011,598 tukey(0.0625).flac
312,028,774 gauss(0.125).flac
312,029,537 tukey(0.03125).flac
312,050,233 tukey(0.015625).flac
312,059,872 tukey(0.0078125).flac
312,319,289 gauss(0.0625).flac
312,783,031 gauss(0.03125).flac
313,596,101 gauss(0.015625).flac
314,287,375 bartlett_hann.flac
314,591,231 rectangle.flac
314,927,922 gauss(0.0078125).flac
314,978,062 bartlett.flac
Who are you and how did you get in here ?
I'm a locksmith, I'm a locksmith.

Improved FLAC encoder

Reply #24
Need any more tests? 
I hope so as I've got 1,680 files being encoded at home as I type! 

I intend to post results on 28 files testing tukey values from 0.1 to 1 in 0.1 increments for compression settings 3 through 8.

I think tukey looks like an interesting candidate at the moment so I wanted to try to pin it down a little more.

Afterward I may look at some of the other top contenders, like welch, connes, hamming, etc., if I have time.

Edit: Updated figures (I thought I was doing tukey(0) but I'm not)
I'm on a horse.