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.

Supported: MP3, WAV, FLAC, OGG, M4A, AAC
Ready
0 items

📖 How Audio Duplicate Detection Works (Meyda MFCC)

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.

100% Private — Your Audio Files Never Leave Your Computer Everything runs inside your browser using Meyda.js and the Web Audio API. No uploads, no accounts, no tracking. Close the tab and all data is gone.

🎵 What This Tool Does

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.

MFCC Fingerprinting

Extracts 13 Mel-Frequency Cepstral Coefficients per frame using Meyda.js — capturing the timbral envelope as the human ear perceives it.

Euclidean Distance Matching

Computes the average Euclidean distance between two files' MFCC sequences. Smaller distance = more similar timbre. The slider controls how strict matching is.

Runs in Background

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.

Built-In Audio Player

Every card has a custom play/pause/seek/mute player. Playing one track automatically pauses all others.

🧠 How the Meyda MFCC Algorithm Works

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:

  1. Load Meyda.js from CDN

    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.

  2. Decode & Resample to 22,050 Hz, Take First 10 Seconds

    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.

  3. Split Into Overlapping Frames (512 samples, hop 256)

    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.

  4. Extract 13 MFCCs via 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.

  5. Store the MFCC Sequence

    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.

  6. Compare Using Average Euclidean Distance

    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.

Why Euclidean distance for MFCCs? Euclidean distance measures the straight-line distance between two points in 13-dimensional MFCC space. Two recordings with identical timbral character produce distance 0. A smaller distance means the two frames sound more alike to the human ear — same voice, same instrument, same acoustic environment. It is the standard metric for MFCC-based audio comparison.

🎚️ Understanding the MFCC Distance Threshold Slider

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.

Low values (5–10) — Very strict

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.

Medium values (11–25) — Balanced (default: 15)

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.

High values (26–50) — Loose

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.

Re-clustering is instant. When you adjust the slider and release it, all already-extracted MFCC sequences are re-compared using the new threshold immediately — no re-scanning needed. The scan only needs to run once per folder.
The slider uses a direct linear scale. Slider value 15 = maximum average Euclidean distance of 15.0. Each step of 1 is one unit of Euclidean distance in 13-dimensional MFCC space. Lower values are stricter — the same direction as Hamming distance sliders.

✅ What It Finds — and What It Might Miss

✅ Finds Well
  • Duplicate podcasts and spoken-word recordings
  • The same voice recording at different bitrates
  • Sound effects saved in multiple formats or quality levels
  • The same speaker re-recorded in the same room
  • Lossless vs. lossy exports of the same audio (WAV vs MP3)
  • Re-encoded copies with similar timbral character
⚠️ May Struggle With
  • Covers or re-performances of songs (different timbre)
  • Transpositions or pitch-shifted recordings
  • Music with complex or varied instrumentation (less stable timbre)
  • Very short clips (under ~5 seconds) — fewer MFCC frames
  • Files with heavy noise or severe codec artifacts
  • Recordings where only the first 10 seconds are very different
For music where you want to find covers, alternate keys, or harmonically similar recordings, try the Essentia HPCP algorithm instead — it uses Harmonic Pitch Class Profiles specifically designed for harmonic similarity. For exact re-encodes, Chromaprint is faster and requires no CDN.

▶️ The Custom Audio Player

Every audio card has a built-in player. Here's how to use it:

All audio player controls and their functions
ControlWhat it does
▶️ Play buttonStarts playback. Automatically pauses any other playing track on the page.
⏸️ Pause buttonPauses playback. Audio position is remembered.
Progress barClick anywhere on the bar to seek to that position. Drag left/right to scrub.
🔊 / 🔇 Mute buttonMutes or unmutes this individual track.
🔇 Audio (toolbar)Mutes or unmutes all audio on the page at once.
Time displayShows current position / total duration (e.g. 1:23 / 3:45).
← / → arrow keysWhen the progress bar is focused, seeks backward or forward 5 seconds.
Exclusive playback. When you press play on any card, all other currently-playing tracks pause automatically. This makes it easy to audition multiple candidates from a duplicate group one by one.

📋 Step-by-Step: How to Use the Audio Duplicate Finder

Step 1

Select a Folder to Scan

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.

Meyda MFCC scanning runs fully in the background — you can switch browser tabs freely. Because only the first 10 seconds of each file are analysed, even very large audio libraries scan quickly compared to full-track methods.
Step 2

Wait for the Scan

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.

Step 3

Adjust the MFCC Distance Threshold

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.

  • Start at the default of 15 (balanced — good for speech and mixed audio)
  • Lower to 8–10 if you see false positives (unrelated files grouped)
  • Raise to 20–25 if expected duplicates are not appearing
Step 4

Review the Groups

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.

  • Click a card to select it (blue border)
  • Ctrl+Click (Cmd+Click on Mac) to add to the compare list (purple border)
  • Click the 🔍 icon on hover to open a full-screen preview with the modal-size player
  • Right-click any card for the context menu
  • Click & drag on empty space to box-select multiple cards
Step 5

Compare Files Side-by-Side

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.

Step 6

Move, Delete, or Copy

Select files and use the toolbar. With Queue Mode on (recommended), files are staged for review first:

📋 CopyCopy filename(s) to clipboard
📂 MoveStage for move to Audio-Duplicates folder
🗑️ DeleteStage for permanent deletion
⚖️ CompareView and listen side-by-side
Step 7

Queue Mode — Review Before You Commit

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.

🏛️ Quick Reference — All Controls

All toolbar buttons and keyboard shortcuts for the audio duplicate finder
Button / ControlWhat it does
🔄 New SearchReload 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 AllRemove selection from all cards
⚖️ Compare (N)Open compare modal for Ctrl+clicked files. Needs 2+.
🔇 AudioMute / unmute all audio players on the page
Queue Mode checkboxStage files for review before executing. Recommended on.
MFCC Distance Threshold sliderControls matching strictness (5–50, lower = stricter). Re-clusters instantly on release without re-scanning.
Click cardSelect / deselect the file
Ctrl + Click cardAdd / remove from compare list (purple border)
Click & drag (empty area)Box-select multiple cards
Ctrl + dragAdd to existing selection with box
Right-click cardContext menu: Copy / Move / Delete / Compare
🔍 hover icon on cardOpen full-size preview with modal-size player
▶️ on card playerPlay audio. Pauses all other players on page.

💡 Tips for Best Results

Back Up First

Always back up your audio library before deleting anything. Deleted files bypass the recycle bin and cannot be recovered.

Listen Before Deleting

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.

Start at Default 15

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.

Compare the Metadata

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.

Move, Don't Delete

Use Move to an "Audio-Duplicates" folder rather than deleting outright. Review the moved files after a few days before permanently removing them.

Best for Voice & Speech

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.

No Matches? Try a Higher Threshold

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.

⚠️ Known Limitations

Only the first 10 seconds are analysed.

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.

No undo for file deletion.

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.

Less effective for music than speech.

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.

Single folder at a time.

You can't scan two separate folders in one session. Workaround: scan their common parent directory so both are included in the same scan.

Move and Delete require Chrome or Edge.

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 requires network access to load.

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.

🔒 Privacy & Security

Only Meyda.js loads from the network. One script file is loaded from cdn.jsdelivr.net at page load. After that, all audio decoding and MFCC computation run locally. Open DevTools → Network tab during a scan: zero outbound requests to any server.
No accounts, no cookies, no analytics. The only localStorage data is your Queue Mode preference. No file names, paths, or MFCC data are ever saved or transmitted.
Folder access is scoped and session-only. Browser permission covers only the folder you selected, lasts only while the tab is open, and can be revoked from browser site settings at any time.
Purely static — no backend. Sakarto is HTML, CSS, and JavaScript. There is no server-side component, database, or API endpoint receiving any data from you.

❓ Frequently Asked Questions

Why only 10 seconds? Doesn't that miss duplicates that sound different at the start?
Ten seconds is a deliberate trade-off. It keeps per-file processing under 1 second, making Meyda practical for libraries with thousands of long files. For most content — podcasts, voice memos, sound effects, and songs — the timbral character is fully established within the first few seconds and stays consistent throughout. The main edge case is audio where the first 10 seconds are atypical — for example, a podcast with a 30-second intro jingle followed by speech that differs from the reference. If you suspect this is causing missed matches, use Chromaprint instead, which analyses the full track at the cost of longer scan time.
What exactly is an MFCC, and why is it useful for finding duplicates?
Mel-Frequency Cepstral Coefficients (MFCCs) are a compact description of the timbral texture of a sound — the perceptual "colour" or "character" that makes a violin sound different from a piano, or one person's voice recognisably different from another's. Meyda computes 13 coefficients per frame by applying an FFT, mapping the spectrum to the Mel scale (which matches human hearing perception), taking log energies, and then applying a Discrete Cosine Transform. The resulting 13 numbers capture the broad spectral shape while ignoring pitch — so two recordings of the same speaker will have similar MFCCs even at different pitches, bitrates, or volume levels. This makes MFCC the best of the three algorithms for voice and speech matching.
The same recording in MP3 and WAV isn't being grouped. How do I fix it?
Try raising the MFCC Distance Threshold slider. Lossless (WAV/FLAC) and lossy (MP3) versions of the same master differ slightly in their timbral profile because MP3 compression modifies the spectral envelope. A threshold of 15–20 usually catches these pairs. If they still don't match, verify both files have similar duration — the duration pre-check excludes pairs where one file is shorter than 50% of the other. Very heavily compressed MP3s (below 96 kbps) may produce MFCC profiles different enough that a threshold above 25 is needed.
Two completely different audio files are being grouped together. What should I do?
Lower the MFCC Distance Threshold slider. At high threshold values (25+), recordings made in the same acoustic environment can have similar enough MFCC profiles to match — for example, two different interviews recorded in the same room with the same microphone, or two different wind instruments. Drop the slider to 8–12 if false positives are common. Always use the built-in player to audition both tracks before acting. If you're unsure, Move rather than Delete so you can recover the files from the destination folder if needed.
Is Meyda MFCC good for finding duplicate podcasts and voice memos?
Yes — this is Meyda MFCC's strongest use case. MFCCs were originally developed for speech recognition, and two recordings of the same speaker in the same environment will produce very similar MFCC profiles even at different bitrates or volume levels. Use a threshold of 10–15 for strict matching (exact re-encodes of the same episode) or 18–25 for broader voice similarity (different episodes by the same host recorded consistently). The 10-second window is particularly well-suited to voice content since the speaker's timbral signature is fully established within the first few seconds.
How does Meyda MFCC compare to Chromaprint and Essentia for music?
For music, MFCC sits between the other two in terms of what it detects. It works well when two recordings use the same instrument and recording setup — for example, two MP3 exports of the same guitar track. It does not reliably detect harmonic duplicates (same melody on a different instrument) — use Essentia HPCP for that. It also doesn't match re-encoded versions as reliably as Chromaprint for most music files. Meyda MFCC's advantage is specifically with voice, speech, and sound effects where timbre is the defining characteristic rather than pitch or spectral energy shape.
Why is Meyda loaded from a CDN rather than bundled like Chromaprint?
Meyda.js is a third-party audio feature extraction library that implements the Mel filterbank, DCT, and MFCC computation. Bundling it would significantly increase page weight. Loading it from 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.
Can Meyda MFCC detect duplicate sound effects?
Yes — this is one of its better use cases alongside speech. Sound effects have a consistent timbral texture (footsteps always sound like footsteps; rain always sounds like rain) that MFCC captures well. Two exports of the same sound effect at different bitrates or sample rates will typically produce similar MFCC vectors. Use a threshold of 10–15 for strict matching. Note that the 10-second window means short sound effects (under 2 seconds) produce very sparse MFCC data — if you're scanning a library of very short clips, Chromaprint may give more reliable results.
Does this work on Firefox or Safari?
Scanning, MFCC extraction, the built-in player, result display, and the Compare modal all work in Firefox and Safari. The limitation is Move and Delete, which depend on the File System Access API and are only available in Chrome 86+ and Edge 86+. In other browsers, scan and review results normally, use the Compare modal to audition tracks side by side, then use Download List to export a report and manage files manually.