Find Duplicate Audio (Meyda MFCC)
Select a folder to scan. Uses Meyda.js MFCC (Mel-frequency cepstral coefficients) to find duplicate and similar audio files — especially effective for speech, podcasts, voice memos, and sound effects.
Select a folder to scan. Uses Meyda.js MFCC (Mel-frequency cepstral coefficients) to find duplicate and similar audio files — especially effective for speech, podcasts, voice memos, and sound effects.
A complete guide to finding duplicate and similar audio files using Mel-Frequency Cepstral Coefficients. Covers the Meyda.js MFCC algorithm, the MFCC Distance Threshold slider, the custom player, and every button in the interface.
This tool finds duplicate and similar audio files by analysing the actual timbral texture of each file — not file names or metadata. It extracts Mel-Frequency Cepstral Coefficients (MFCCs) from each audio file using Meyda.js and compares them using Euclidean distance, the same technique used in speech recognition, voice identification, and audio classification systems.
Unlike pitch-based methods, MFCC captures the shape of the frequency spectrum as perceived by the human ear — the timbral quality of sound. This makes it excellent at matching spoken word, podcasts, sound effects, and voice recordings regardless of exact pitch or tempo.
Extracts 13 Mel-Frequency Cepstral Coefficients per frame using Meyda.js — capturing the timbral envelope as the human ear perceives it.
Computes the average Euclidean distance between two files' MFCC sequences. Smaller distance = more similar timbre. The slider controls how strict matching is.
Audio decoding and MFCC extraction continue even when you switch browser tabs — no pausing. Meyda.js runs statelessly per frame, loading from CDN once per session.
Every card has a custom play/pause/seek/mute player. Playing one track automatically pauses all others.
The algorithm uses Meyda.js — a JavaScript audio feature extraction library — to compute Mel-Frequency Cepstral Coefficients for each audio file. Here is what happens step by step when you scan a file:
Meyda.js v5.6.3 is loaded from cdn.jsdelivr.net at page load. It is a lightweight stateless library that processes one audio frame at a time. There is no initialisation delay — Meyda is ready as soon as the script tag loads.
The browser decodes the file using AudioContext at 22,050 Hz — the standard rate for MFCC analysis. Only the first 10 seconds of audio are analysed. This keeps processing fast (under 1 second per file) while still capturing enough timbral content for reliable matching.
The 10-second audio sample is divided into 512-sample frames with a 256-sample hop (50% overlap). At 22,050 Hz each frame is about 23 ms. Shorter frames than Essentia or Chromaprint mean faster processing and finer time resolution for the MFCC analysis.
Meyda.extract("mfcc", frame) For each 512-sample frame, Meyda's extract("mfcc", frame) computes 13 Mel-Frequency Cepstral Coefficients. The process maps the spectrum onto the Mel scale (which approximates human pitch perception), takes the log of each Mel band's energy, then applies a Discrete Cosine Transform. The result is a 13-element vector describing the overall timbral shape of that frame — robust against pitch transposition and small bitrate differences.
One 13-element vector is produced per frame. For a 10-second clip at hop 256 and 22,050 Hz this produces roughly 860 vectors. The sequence is stored in memory for comparison. Because only 10 seconds are analysed, MFCC fingerprints are compact — far less RAM than HPCP sequences of full-length tracks.
To compare two files, their MFCC sequences are aligned frame by frame (using the shorter length), and the Euclidean distance between each pair of 13-element vectors is computed and averaged. A smaller average distance means more similar timbral texture. If the average falls at or below the threshold set by the slider, the files are grouped as duplicates. A duration pre-check rejects pairs where one file is shorter than 50% of the other.
The slider labeled MFCC Distance Threshold (5–50) controls how strictly two MFCC profiles must match to be grouped as duplicates. It is the most important control on this page. Lower values are stricter — a distance of 0 means identical timbral content.
Only nearly identical files match. Use for exact duplicates, same recording at different bitrates, or lossless vs. lossy exports of the same master. Very few false positives.
Catches re-encoded versions, different bitrates, light post-processing, and recordings with similar vocal or instrumental timbre. The default of 15 is a good starting point for spoken-word and mixed audio libraries.
Groups files with broadly similar timbral character. Useful for finding all recordings from the same room or microphone, even if the content differs. Expect more false positives — always review before deleting.
Every audio card has a built-in player. Here's how to use it:
| Control | What it does |
|---|---|
| ▶️ Play button | Starts playback. Automatically pauses any other playing track on the page. |
| ⏸️ Pause button | Pauses playback. Audio position is remembered. |
| Progress bar | Click anywhere on the bar to seek to that position. Drag left/right to scrub. |
| 🔊 / 🔇 Mute button | Mutes or unmutes this individual track. |
| 🔇 Audio (toolbar) | Mutes or unmutes all audio on the page at once. |
| Time display | Shows current position / total duration (e.g. 1:23 / 3:45). |
| ← / → arrow keys | When the progress bar is focused, seeks backward or forward 5 seconds. |
Click 📁 Select Folder to Scan. A native folder picker opens (Chrome / Edge). Or drag and drop a folder onto the page. All audio files inside the folder and its subfolders are collected. Only the first 10 seconds of each file are analysed, so scanning is fast — typically under 1 second per file.
Supported formats: MP3, WAV, FLAC, OGG, M4A, AAC. Files over 100 MB are skipped. Non-audio files are silently ignored.
A progress bar shows how many files have been processed. Processing is fast — expect under 1 second per file because only the first 10 seconds are analysed. Duplicate groups appear live as they're found — you don't have to wait for the full scan to finish before reviewing results.
Click Stop at any time to halt the scan. Results found so far remain visible.
After scanning, use the MFCC Distance Threshold slider to control matching sensitivity. Moving the slider re-groups all already-extracted MFCC sequences instantly — no re-scanning is needed.
Results appear in numbered groups. Each group contains audio files that the algorithm considers similar. Use the built-in players to listen to each file before making decisions.
Ctrl+Click two or more cards, then click ⚖️ Compare in the toolbar. A modal opens showing each file with its own modal-size player, file metadata (duration, size, type, path), and a similarity percentage. For 3+ files, a full pairwise similarity matrix is shown.
Each file in the compare modal also has Copy Name, Move, and Delete buttons for quick actions without closing the modal.
Select files and use the toolbar. With Queue Mode on (recommended), files are staged for review first:
Queue Mode (enabled by default) stages files instead of acting immediately. Switch to the Move Queue or Delete Queue tab in the sidebar. Review the queued files, listen to them, remove any you change your mind about, then click Move All Files or Delete All Files to execute.
The default destination folder for Move is Audio-Duplicates, created inside the scanned folder. You can rename it in the queue input field.
| Button / Control | What it does |
|---|---|
| 🔄 New Search | Reload the page and start a fresh scan |
| 📋 Copy (N) | Copy selected filenames to clipboard. N = count. |
| 📂 Move (N) | Move selected files or stage them in Move Queue |
| 🗑️ Delete (N) | Delete selected files or stage in Delete Queue |
| ✕ Deselect All | Remove selection from all cards |
| ⚖️ Compare (N) | Open compare modal for Ctrl+clicked files. Needs 2+. |
| 🔇 Audio | Mute / unmute all audio players on the page |
| Queue Mode checkbox | Stage files for review before executing. Recommended on. |
| MFCC Distance Threshold slider | Controls matching strictness (5–50, lower = stricter). Re-clusters instantly on release without re-scanning. |
| Click card | Select / deselect the file |
| Ctrl + Click card | Add / remove from compare list (purple border) |
| Click & drag (empty area) | Box-select multiple cards |
| Ctrl + drag | Add to existing selection with box |
| Right-click card | Context menu: Copy / Move / Delete / Compare |
| 🔍 hover icon on card | Open full-size preview with modal-size player |
| ▶️ on card player | Play audio. Pauses all other players on page. |
Always back up your audio library before deleting anything. Deleted files bypass the recycle bin and cannot be recovered.
Play both tracks using the built-in players before removing one. The algorithm is good but not perfect — always verify by ear for important files.
The default of 15 is well-calibrated for spoken-word and mixed audio. Lower toward 8–10 if you want only very close matches. Raise toward 25–30 if expected duplicates are not appearing.
In the Compare modal, check file size and duration. A larger file is usually higher quality. Keep the FLAC or high-bitrate version; delete the compressed copy.
Use Move to an "Audio-Duplicates" folder rather than deleting outright. Review the moved files after a few days before permanently removing them.
MFCC excels at matching voice recordings, podcasts, and spoken-word content. For music, it works best when tracks share the same instrument (e.g. two piano recordings) rather than the same melody.
If Meyda MFCC finds nothing, raise the Distance Threshold toward 25–30. For music with harmonic similarity rather than timbral similarity, try Essentia HPCP or Chromaprint instead.
To keep scanning fast, Meyda MFCC only processes the first 10 seconds of each file. Two recordings that share timbral content starting at the 30-second mark will not be detected. If your files have long intros, this is a known limitation.
The File System Access API bypasses the OS recycle bin entirely. Deleted audio files are gone permanently. Queue Mode exists for exactly this reason — always review before executing.
MFCC captures timbral texture, not harmonic pitch. It is excellent at matching voices and acoustic environments, but may produce false positives for music where different songs share the same instrument or recording environment.
You can't scan two separate folders in one session. Workaround: scan their common parent directory so both are included in the same scan.
The File System Access API is only available in Chrome 86+ and Edge 86+. Firefox and Safari can scan and display results but cannot move or delete files. Use "Download List" to export results in those browsers.
Meyda.js v5.6.3 is loaded from cdn.jsdelivr.net at page load. If this CDN is blocked by a firewall or ad-blocker, scanning will fail silently. Check the browser console for load errors if no files are processed. Chromaprint requires no external library.
cdn.jsdelivr.net means most users already have it cached from other sites that use Meyda. The library is lighter than Essentia.js (no WASM compilation step) and typically loads in under a second. If the CDN is blocked on your network, the scan simply won't start — in that case, use Chromaprint which has no external dependencies.