skills/willsigmon/sigstack/Audio Fingerprint Expert

Audio Fingerprint Expert

SKILL.md

Audio Fingerprint Expert

Identify and match audio content using fingerprinting.

Use Cases for Modcaster

  • Skip intros/outros automatically
  • Detect and skip ads
  • Identify music in podcasts
  • Match duplicate content

Top Services

Commercial APIs

AudD ($2-5/1000 requests)

  • Neural network based
  • Music recognition
  • Real-time and batch

ACRCloud

  • Industry leader
  • Cross-platform SDKs
  • Custom fingerprint databases

ShazamAPI (via RapidAPI)

  • The classic
  • Huge music database
  • Enterprise options

Open Source

AcoustID (Free)

  • Links to MusicBrainz
  • Community-powered
  • Chromaprint fingerprinting

Dejavu

  • Python implementation
  • Self-hosted
  • Custom audio matching

AudD API

Recognize Music

curl -X POST "https://api.audd.io/" \
  -F "api_token=YOUR_TOKEN" \
  -F "file=@audio.mp3" \
  -F "return=spotify,apple_music"

Python

import requests

response = requests.post('https://api.audd.io/', data={
    'api_token': 'YOUR_TOKEN',
    'return': 'spotify,apple_music',
}, files={
    'file': open('audio.mp3', 'rb'),
})

result = response.json()
if result['result']:
    print(f"Found: {result['result']['title']} by {result['result']['artist']}")

AcoustID (Free)

Generate Fingerprint

# Install chromaprint
brew install chromaprint

# Generate fingerprint
fpcalc -json audio.mp3

Lookup

import acoustid

for score, recording_id, title, artist in acoustid.match(API_KEY, 'audio.mp3'):
    print(f"Match ({score:.2f}): {title} by {artist}")

Dejavu (Self-Hosted)

Setup

from dejavu import Dejavu

djv = Dejavu(config={
    "database_type": "sqlite",
    "database": "fingerprints.db"
})

# Fingerprint known audio
djv.fingerprint_directory("known_intros/", [".mp3", ".wav"])

# Match unknown audio
songs = djv.recognize(FileRecognizer, "podcast_episode.mp3")
print(songs)  # Returns matches with timestamps

Podcast Ad Detection Pattern

# 1. Fingerprint known ads
for ad_file in known_ads:
    dejavu.fingerprint_file(ad_file)

# 2. When processing episode
matches = dejavu.recognize(episode_file)

# 3. Get timestamps of ads
ad_segments = [(m['offset'], m['offset'] + m['duration']) for m in matches]

# 4. Skip those segments in player

Accuracy Tips

  • Use 10-30 second samples
  • Higher sample rate = better accuracy
  • Noise affects matching
  • Store fingerprints, not audio

Use when: Music recognition, ad skipping, duplicate detection, audio matching

Weekly Installs
0
GitHub Stars
7
First Seen
Jan 1, 1970