• 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!

Audio Fake Detector PRO

If you have doubt see spectrograms with Spek
i actually think the person who mastered the Sharon Van Etten (which i tested above) album for streaming, upscaled from 48khz to 96 , just to get that "HiRes" labeling going on in platforms that support it. shame
 
somebody give me a program that checks high bitrate lossy mp3 ( 320 kb ) against lossless , because programs like this were already available many years ago and can be substituted by any piece of software that displays frequency spectrum
 
Version 7.7 updated 2026-05-31
# CHANGELOG removed from PS1 scripts, CHANGELOG.txt added.
somebody give me a program that checks high bitrate lossy mp3 ( 320 kb ) against lossless , because programs like this were already available many years ago and can be substituted by any piece of software that displays frequency spectrum
Spectral analysis is the gold standard for qualitative audio verification, and there is no substitute for human expertise when it comes to inspecting the nuances of a spectrogram.

The motivation behind developing Audio Fake Detector PRO was not to replace manual inspection, but to solve the issue of scalability. While manual spot-checking is perfectly viable for a few tracks, it becomes a bottleneck when processing or auditing large-scale personal libraries. The tool is essentially a batch-processing wrapper that applies consistent detection thresholds across thousands of files, allowing the user to automate the heavy lifting and focus their attention only on the 'borderline' cases that require manual review.

It is designed for those who want to maintain the rigor of spectral analysis but need to apply it efficiently across an entire collection. It’s meant to complement—not replace—the manual inspection workflow.

Have you actually tested Audio Fake Detector PRO on a set of files, or are you referring to the general idea of lossy-to-lossless detection? I'm interested in any specific cases where you think the results are equivalent to a wrong spectrum analysis.
 
Last edited:
Here's LosslessAudioChecker. One click to launch, drag and drop a folder onto it, or multiple folders, job done.
I abandoned LAC because it shit itself when i imported japanese or korean characters(ofc fonts intalled), it would take 5-10 minutes to check a song and most of the time it just locked up or crashed.
 
I have no titles with Japanese or Korean characters.

For me, that would make it hard to work out what the tracks were - it'd be a show-stopper for me to use these characters. For you, that makes LAC a show-stopper of course. But you may be in a minority if you live in a country using Latin-based alphabets. I would guess runes don't work either.

I do have album names (folders) and track names (files) that include the full gamut of western characters (accents, umlauts, whatever) and these have all worked fine in all the s/w tools I used.

I have found that anything that is doing a spectral analysis tends to be compute-intense, so a fast PC is a benefit. I just run LAC as a background task when doing things like MP3Tag.

I'm not saying it's the bees-knees, but it has spotted a few files that have been upsampled on legit bought material.

If a newer, better, faster equivalent with a similarly good GUI to LAC was availble, I'd certainly try it!

TLDR. Unless you are interested character set issues...

I have occasionally had issues - with several programs - with alternative versions of some characters, including dashes, spaces and apostrophes. I run everything through Advanced Renamer which has a profile to trap and substitute several characters known to cause problems. I generate MP3 versions of my rips for use in the car, and I apply MP3gain to these, and that programs is very fussy about characters! All my rips go through MP3Tag to get uniformity, and I also have "actions" set up in it to do substitutions of known 'bad characters' (and many OCD things!). Playlists can have issues too, but if I spot a track that's not playing on one of my devices, I just run a TextCrawler on the file (think: grep with a GUI)
 
Last edited:
I have found that anything that is doing a spectral analysis tends to be compute-intense,
I use my laptop as a foobar media server and LAC takes minutes(when it decides to work at all) while SPEK takes a few seconds to give me the same answer.
 
I use my laptop as a foobar media server and LAC takes minutes(when it decides to work at all) while SPEK takes a few seconds to give me the same answer.
For me, LAC effectively takes zero time, as it just runs and completes while I'm doing something else!
 
[15:45:57] [1/1] G:\Music\USBs\USB MELODIC\Goa Trance Mixes\Various\Classic Goa Trance Continuous Mix (Vol. 1) Oct.
2000_93194570 - Third Wave 第三浪 (ॐ_道)\Classic Goa Trance Continuous Mix (Vol. 1) Oct. 2000_93194570 - Third Wave 第三浪
(ॐ_道).mp3
[15:45:59] Full analysis (bitrate >= 170 kbps).
[15:46:00] Engine: spectrogram (lossy format).
[15:47:06] slot@853s(rms=0.18) -> cutoff=18860 Hz | wall=False | ratio=0.087 | peak=84.8 | NR=False
[15:47:11] slot@1757s(rms=0.221) -> cutoff=18731 Hz | wall=False | ratio=0.122 | peak=102.7 | NR=False
[15:47:17] random@2650s(rms=0.162) -> cutoff=18838 Hz | wall=False | ratio=0.042 | peak=95 | NR=False
[15:47:24] slot@3499s(rms=0.197) -> cutoff=18558 Hz | wall=False | ratio=0.298 | peak=91.8 | NR=False
[15:47:32] end@4345s -> cutoff=17696 Hz | wall=True | ratio=0.868 | peak=79.1 | NR=False
[15:47:36] [OK] Wall vote 0/4 | average cutoff ~18747 Hz | average ratio=0.137 | high bitrate rules clear (0/4
walled <= 17500 Hz)
[15:47:36] 268 kbps | 4367 s
[15:47:36]
[15:47:36]
[15:47:36] =========================================================================================================
[15:47:36] SUMMARY
[15:47:36] =========================================================================================================
[15:47:36] Files found : 1 (including hidden)
[15:47:36] Analyzed : 1
[15:47:36] Skipped : 0
[15:47:36] OK : 1
[15:47:36] FAKE : 0
[15:47:36] SUSPECT : 0
[15:47:36] UNKNOWN : 0
[15:47:36] Orphan dirs : 0 moved to ~Fake
[15:47:36] =========================================================================================================
[15:47:36] Reports : G:\Music\USBs\USB MELODIC\Goa Trance Mixes\Various\Classic Goa Trance Continuous Mix (Vol. 1)
Oct. 2000_93194570 - Third Wave 第三浪 (ॐ_道)\~Report
[15:47:36] Log : G:\Music\USBs\USB MELODIC\Goa Trance Mixes\Various\Classic Goa Trance Continuous Mix (Vol. 1)
Oct. 2000_93194570 - Third Wave 第三浪 (ॐ_道)\~Report\AudioFakeDetector_20260606_154555.log
[15:47:36] CSV : G:\Music\USBs\USB MELODIC\Goa Trance Mixes\Various\Classic Goa Trance Continuous Mix (Vol. 1)
Oct. 2000_93194570 - Third Wave 第三浪 (ॐ_道)\~Report\AudioFakeDetector_20260606_154555.csv
[15:47:37] HTML : G:\Music\USBs\USB MELODIC\Goa Trance Mixes\Various\Classic Goa Trance Continuous Mix (Vol. 1)
Oct. 2000_93194570 - Third Wave 第三浪 (ॐ_道)\~Report\AudioFakeDetector_20260606_154555.html
[15:47:37] =========================================================================================================
[15:47:37] Temp folder cleaned: C:\Users\Ale\Musica\.scripts\AudioFakeDetector\Data\App\Temp
 
any chance for a Linux version of the app?
Rename the attached file to detect.py - this script requires numpy and ffmpeg - it's command line only.

install numpy (python3-numpy) - apt install python3-numpy on Debian.

Install ffmpeg

Run it: python3 detect.py <filename> - only tested on flac so far (this is a very quick draft written with the help of AI)

python3 detect.py 01BlackCow.flac
Analyzing: 01BlackCow.flac
Detected Native Sample Rate: 88200 Hz (Max printable frequency: 44100 Hz)
Processing 29 non-final audio segment(s)...

==============================
ANALYSIS REPORT
==============================
Highest frequency detected in best segment: 20989.10 Hz
------------------------------
Verdict: FAKE HD
Reason: File is detected as a high-definition 88200 Hz container, but cuts off below 22,050 Hz. This is in fact a fake HD file.
==============================

python3 detect.py /mnt/music/Yes_-_Yessongs_-_Disc_1/1_Opening-Excerpt_from_Firebird_Suite-.flac
Analyzing: 1_Opening-Excerpt_from_Firebird_Suite-.flac
Detected Native Sample Rate: 44100 Hz (Max printable frequency: 22050 Hz)
Processing 21 non-final audio segment(s)...

==============================
ANALYSIS REPORT
==============================
Highest frequency detected in best segment: 22050.00 Hz
------------------------------
Verdict: AUTHENTIC STANDARD DEFINITION
Reason: File detected has a sample rate of 44100 Hz and as such is not an HD file, and neither is it fake.
==============================
 

Attachments

Rename the attached file to detect.py - this script requires numpy and ffmpeg - it's command line only.

install numpy (python3-numpy) - apt install python3-numpy on Debian.
hmm...this one says the same file i tested before (in this thread) is real

python3 detect.py ~/mount/nas/music/2025/Sharon\ Van\ Etten\ -\ Sharon\ Van\ Etten\ \&\ The\ Attachment\ Theory/Sharon\ Van\ Etten\ -\ Sharon\ Van\ Etten\ \&\ The\ Attachment\ Theory\ -\ 01\ Live\ Forever.flac
Analyzing: Sharon Van Etten - Sharon Van Etten & The Attachment Theory - 01 Live Forever.flac
Detected Native Sample Rate: 96000 Hz (Max printable frequency: 48000 Hz)
Processing 32 non-final audio segment(s)...

==============================
ANALYSIS REPORT
==============================
Highest frequency detected in best segment: 22264.30 Hz
------------------------------
Verdict: AUTHENTIC HIGH DEFINITION
Reason: File is 96000 Hz and contains high-frequency content extending safely past standard CD quality.
==============================
 
Highest frequency detected in best segment: 22264.30 Hz
So something has been detected above nyquist for 44.1k (22050) but not by much (214Hz).

It would be interesting to see a spectrogram of this file.
 
Rename the attached file to detect.py - this script requires numpy and ffmpeg - it's command line only.

install numpy (python3-numpy) - apt install python3-numpy on Debian.

Install ffmpeg

Run it: python3 detect.py <filename> - only tested on flac so far (this is a very quick draft written with the help of AI)

python3 detect.py 01BlackCow.flac
Analyzing: 01BlackCow.flac
Detected Native Sample Rate: 88200 Hz (Max printable frequency: 44100 Hz)
Processing 29 non-final audio segment(s)...

==============================
ANALYSIS REPORT
==============================
Highest frequency detected in best segment: 20989.10 Hz
------------------------------
Verdict: FAKE HD
Reason: File is detected as a high-definition 88200 Hz container, but cuts off below 22,050 Hz. This is in fact a fake HD file.
==============================

python3 detect.py /mnt/music/Yes_-_Yessongs_-_Disc_1/1_Opening-Excerpt_from_Firebird_Suite-.flac
Analyzing: 1_Opening-Excerpt_from_Firebird_Suite-.flac
Detected Native Sample Rate: 44100 Hz (Max printable frequency: 22050 Hz)
Processing 21 non-final audio segment(s)...

==============================
ANALYSIS REPORT
==============================
Highest frequency detected in best segment: 22050.00 Hz
------------------------------
Verdict: AUTHENTIC STANDARD DEFINITION
Reason: File detected has a sample rate of 44100 Hz and as such is not an HD file, and neither is it fake.
==============================
 
Rename the attached file to detect.py - this script requires numpy and ffmpeg - it's command line only.

install numpy (python3-numpy) - apt install python3-numpy on Debian.

Install ffmpeg

Run it: python3 detect.py <filename> - only tested on flac so far (this is a very quick draft written with the help of AI)

python3 detect.py 01BlackCow.flac
Analyzing: 01BlackCow.flac
Detected Native Sample Rate: 88200 Hz (Max printable frequency: 44100 Hz)
Processing 29 non-final audio segment(s)...

==============================
ANALYSIS REPORT
==============================
Highest frequency detected in best segment: 20989.10 Hz
------------------------------
Verdict: FAKE HD
Reason: File is detected as a high-definition 88200 Hz container, but cuts off below 22,050 Hz. This is in fact a fake HD file.
==============================

python3 detect.py /mnt/music/Yes_-_Yessongs_-_Disc_1/1_Opening-Excerpt_from_Firebird_Suite-.flac
Analyzing: 1_Opening-Excerpt_from_Firebird_Suite-.flac
Detected Native Sample Rate: 44100 Hz (Max printable frequency: 22050 Hz)
Processing 21 non-final audio segment(s)...

==============================
ANALYSIS REPORT
==============================
Highest frequency detected in best segment: 22050.00 Hz
------------------------------
Verdict: AUTHENTIC STANDARD DEFINITION
Reason: File detected has a sample rate of 44100 Hz and as such is not an HD file, and neither is it fake.
==============================
Thanks for sharing your script and the analysis. I took a closer look at the logic, and while the approach of checking the maximum frequency is a great starting point, I noticed a critical blind spot in how detect.py evaluates high-definition audio.

The Blind Spot in the Python Script
In your script, "Rule 1" considers a 96 kHz container to be "Authentic" as long as its maximum frequency extends past 22,050 Hz.

While this logic successfully catches fake Hi-Res files upsampled from standard 44.1 kHz CDs (which naturally cap at 22.050 kHz), it completely misses files upsampled from 48 kHz sources. A native 48 kHz master (very common in modern digital productions) has a natural Nyquist limit of 24,000 Hz. If you artificially upsample a 48 kHz track to 96 kHz, its frequency spectrum will still abruptly stop around 24 kHz.

Because your script detected a maximum frequency of 22,264 Hz in Live Forever—which is greater than 22,050 Hz—it mistakenly gave it an "Authentic" verdict. It was tricked by a 48 kHz master.

Why the File is Actually a "Fake 96kHz"
For Hi-Res files, my utility relies on a custom spectrogram engine that combines strict FFT cutoff evaluation with high-frequency ratio checks to expose both artificial upsampling and quantization noise.

When analyzing Afterlife (from the exact same album), the engine found a hard frequency cutoff at 24,352 Hz.
In a true, authentic 96 kHz Hi-Res recording, the high-frequency harmonic content should extend safely past 28 kHz (up to a theoretical maximum of 48,000 Hz). The fact that the audio hits a "brick wall" right around the 24 kHz mark is the mathematical proof that the track is simply a standard 48 kHz master placed inside a 96 kHz container.

Your script is very close to being perfect! It just needs to account for the 24,000 Hz cutoff of 48 kHz masters to catch these types of "Fake HD" files.
 
Last edited:
T

When analyzing Afterlife (from the exact same album), the engine found a hard frequency cutoff at 24,352 Hz.
In a true, authentic 96 kHz Hi-Res recording, the high-frequency harmonic content should extend safely past 28 kHz (up to a theoretical maximum of 48,000 Hz). The fact that the audio hits a "brick wall" right around the 24 kHz mark is the mathematical proof that the track is simply a standard 48 kHz master placed inside a 96 kHz container.

Your script is very close to being perfect! It just needs to account for the 24,000 Hz cutoff of 48 kHz masters to catch these types of "Fake HD" files.
just a reminder the Afterlife song I analyzed with Audio Fake Detector, is from a downloaded Bandcamp album (paid digital download). Bandcamp as a rule do not allow artists to upload mp3s , only FLACs or WAVs. but as we see here, they don't examine upscaled files at all.
 
Back
Top Bottom