• Welcome to ASR. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

AES6 Wow & Flutter Meter — Python & Standalone Analyzer (2σ Method)

alvaro-oliver

Member
Joined
Jun 26, 2025
Messages
42
Likes
76
Location
Santiago de Chile
Hi everyone,


After spending a good amount of time researching wow & flutter measurement methods — and climbing a pretty steep learning curve — I decided to share the result of that journey in case it helps others navigate the same path.

I’ve developed an open-source implementation of a Wow & Flutter analyzer, based on the AES6-2008 (rev. 2012) standard, using the preferred Two Sigma method for both unweighted and weighted measurements.

Educational Purpose:
The main goal of this project is not to compete with existing commercial tools, but rather to provide a transparent, testable and educational reference implementation — especially since no public code examples of standard-compliant W&F measurement seem to be available.



Features​


  • Weighted and unweighted W&F calculation using 2σ method
  • AES6-compliant weighting filter (simple IIR approximation, within spec tolerance)
  • Standalone .exe version for Windows, no Python needed
  • Full Python script for inspection, modification, or extension
  • Validated against synthetic reference tones (Virtins method)
  • Includes example WAV files and actual turntable test recording (Reloop RP-4000MK2)



Screenshots​


Measurement output vs Virtins Multi-Instrument (real turntable tone):


09 Reloop RP4000 test tone.png



AES6 weighting filter response (IIR implementation):

weighting_filter_screenshot.png






Repository and Downloads​


GitHub:
https://github.com/alvaro-oliver/aes6-wow-and-flutter-meter


The latest standalone Windows executable is available under the Releases section:
Download here




Happy to answer any questions about the implementation or help others get started. Feedback is always welcome.


Cheers,
Álvaro
 
Will try the Python script when time allows.
 
Great, thanks.
Needed to trim off start and end of virtin verification file
1751034700020.png


On a real file like this
1751035169426.png


I get this...
it picks out there arm-cartridge resonance not the speed..
1751035278401.png


50 sec track ,maybe som drift??

1751035710902.png

1751036060593.png


Same record, another TT, a DD.
1751036483784.png


2025 d51f tp257 amv2 3150 hpass.wav
1751046021140.png


hi pass lopass filtered
1751046299194.png


same on other program
1751046611037.png



[/ISPOILER]
 
Last edited:
Tested on a file I had.

First test Linn axis.png
 
I wonder why my unweighted is so terribly high, the DD is very good an every other test, this is not the best record though
 
Need to play a bit more. But good to get 2 sigma, it's not there with the Nag T100.
 
Found another file, better speed adjust of this one.

Axis LP12 platter DP8 arm.png


Main problems of my current Axis are 1.0, 1.1 and 2.2 Hz. 1.1 an 2.2 I can understand from the record, but not 1.0 Hz. I have some things to check, I have not looked carefully at the pulley to inner platter symmetry.
 
Seems like the app senses much larger speed variations than reality..100hz variation from 3150 does not seem right
 
Seems like the app senses much larger speed variations than reality..100hz variation from 3150 does not seem right
Something wrong with your results. I used the Python script, put all files in a folder and ran it with IDLE. Seems to work here.
 
I use the Windows file.. I am afraid of Python . I have screwed up the Frequency script before by adding things. What is IDLE
? I use Spyder{anaconda) to run other scrips for frequency response and polar W&F plot, can I put this script in ha same folder and run? Not sure how to add the “ tkinter” thing, without messing up my existing scrips in the folder

You plot show a variation larger than 3180- 3150 which is also extremely large…
 
Last edited:
Something wrong with your results. I used the Python script, put all files in a folder and ran it with IDLE. Seems to work here.
uses ONE channel only and 1khxz high pass filter ,looks more resonable, stil I cannot understand how peak speed cariation is between 3125 abd 3185, shakenspin is nowhere near those values
1751105645516.png


1751105897027.png


Anoter TT and different record..
1751107446029.png

another record again
1751122927562.png


1751123262796.png
 
Last edited:
uses ONE channel only and 1khxz high pass filter ,looks more resonable, stil I cannot understand how peak speed cariation is between 3125 abd 3185, shakenspin is nowhere near those values
View attachment 460063
Agreed, I do not really understand the top graph. There is some questions regarding resolution, is it affected by noise somehow? The other graphs seem reasonable.

Note: IDLE is just the app I use to run Python on the Mag Pro.
 
Last edited:
I hav no idea on how the script works, but if is uses zero crossings to determine speed it my be fooled by rumble and clicks and distortion
 
Simulated 0.8Hz 0.05% mixed with 4Hz 0.1%
1751130397317.png

same with Mkanes DIN W&F
1751130436981.png



Those who do not think w&Flutter matter much can listen to this...these are not high levels 2S 0.19% according to Mkane and about 0.1% according to the new 2S app

And a good test record on a good DD drive Denon 51F sounds like this,

and it looks like this
1751131353390.png
 
Last edited:
So the synthetic test signal gives +/- 0.0990 % for the script and 0.189 % with MKane's software. Something not computes here.
 
Great, thanks.
Needed to trim off start and end of virtin verification file
View attachment 459949

On a real file like this
View attachment 459951

I get this...
it picks out there arm-cartridge resonance not the speed..
View attachment 459956

50 sec track ,maybe som drift??

View attachment 459960
View attachment 459961

Same record, another TT, a DD.
View attachment 459963

2025 d51f tp257 amv2 3150 hpass.wav
View attachment 459983

hi pass lopass filtered
View attachment 459984

same on other program
View attachment 459987


[/ISPOILER]
Hi Balle, thanks for sharing your results.


Something unusual is happening with your first file, it’s definitely not simple drift. Based on the instantaneous frequency plot and the histogram, it looks like there’s a DC offset in the recorded signal that the app isn’t correcting.


In your second and third tests, if you applied a high-pass filter, that likely removed the offset. Both results look quite consistent. The capture time (17 and 50 seconds) is what makes the difference, especially in the low-frequency region, as shown in the spectrograms. Would you mind sharing the WAV file so I can take a closer look?

As for the direct-drive turntable: everything looks good. If the cartridge is properly aligned, there's no need to apply extra filters, the app takes care of that internally.

I hadn’t heard of Multitone before, but I’ll definitely give it a try. The spectrum output seems to match my app quite well, though the W&F figures differ. Do you know if the DIN measurement is using the 2-sigma method or a quasi-peak approach? If you can share the file, I’d be happy to check it.


Best regards,
Álvaro
 
Found another file, better speed adjust of this one.

View attachment 459969

Main problems of my current Axis are 1.0, 1.1 and 2.2 Hz. 1.1 an 2.2 I can understand from the record, but not 1.0 Hz. I have some things to check, I have not looked carefully at the pulley to inner platter symmetry.
Hi Thomas, thanks for sharing. Your measurements look great.

The difference you're seeing between 33.30 and 33.33 RPM across both files can be explained in a few ways. Personally, I’ve noticed that speed and stability tend to improve on my turntable after a few minutes of warm-up, but the W&F measurements remain quite consistent overall.

Regarding the 1 Hz peak, feel free to send me the file if you’d like me to cross-check it using Multi-Instrument.

Best regards,
Álvaro
 
Seems like the app senses much larger speed variations than reality..100hz variation from 3150 does not seem right
That's sharp. What you're seeing is mostly a visual thing. The instantaneous freq method is super sensitive to transient noise, way more than synthetic tones.
Vinyl can show big peak-to-peak swings even if WnF is just ~0.2%, because tiny phase shifts cause those sharp spikes. But they don’t really add much to the overall deviation.
The two-sigma metric is built to ignore those rare peaks. Clean tones behave nicely, real vinyl, not so much.
 
I use the Windows file.. I am afraid of Python . I have screwed up the Frequency script before by adding things. What is IDLE
? I use Spyder{anaconda) to run other scrips for frequency response and polar W&F plot, can I put this script in ha same folder and run? Not sure how to add the “ tkinter” thing, without messing up my existing scrips in the folder

You plot show a variation larger than 3180- 3150 which is also extremely large…
The .exe version works perfectly fine! It runs the exact same Python code, just bundled so you don't have to deal with installs or dependencies .
 
I hav no idea on how the script works, but if is uses zero crossings to determine speed it my be fooled by rumble and clicks and distortion
You're right. The script does use zero crossings to estimate the mean frequency. That value sets the filter range and normalization.

It could be thrown off by heavy rumble or big clicks, but in most cases it's more reliable than averaging the Hilbert-derived freq, especially on low sample rate files. That’s actually the method recommended in the Virtins guide, which the script follows pretty closely.

So yeah, clean audio always helps, but it’s a deliberate choice based on how this kind of analysis works.
 
Back
Top Bottom