Academy
Updated on
Nov 30, 2024

Sound Intelligence: A Deep Dive into Audio Fingerprinting Using Vector Embeddings

Learn how to effectively prepare a dataset, transform audio into vector embeddings, and establish a robust vector search system for audio queries.

Sound Intelligence: A Deep Dive into Audio Fingerprinting Using Vector Embeddings
Ready to build AI-powered products or integrate seamless AI workflows into your enterprise or SaaS platform? Schedule a free consultation with our experts today.

An Introduction to Audio Fingerprinting

Audio fingerprinting is a technology that enables the identification and retrieval of audio content by creating a unique representation, or "fingerprint," of an audio signal. This process involves converting audio data into vector embeddings, which are dense numerical representations that capture the essential features of the audio. 

As digital audio usage continues to grow, efficient audio processing techniques are becoming more critical. Audio fingerprinting can identify audio clips even with some distortions or noise. By transforming audio samples into vector embeddings, you can achieve precise audio matching and facilitate applications such as speaker identification, music recognition, and voice verification.

Applications of Audio Fingerprinting

  • Music Recognition: Services like Shazam utilize audio fingerprinting to identify songs based on short clips.
  • Content-Based Retrieval: Users can search for audio content by humming or singing a tune, which the system then converts into an embedding for comparison against stored fingerprints.
  • Audio Analysis: Embeddings enable advanced analysis tasks such as genre classification and mood detection based on the characteristics captured in the vectors



What Will You Learn in This Guide?

In this guide, you will learn how to prepare a dataset, convert audio into vector embeddings, and set up a vector search for audio queries, making it possible to match audio samples efficiently and accurately.




Prerequisites to the Technical Implementation 

Before diving into the code and setup, ensure you have a basic understanding of :

  1. Embeddings: An embedding is a vector representation of data. We’ll be using Wav2Vec 2.0 as an embedding model to convert audio formats into embeddings.

Wav2Vec 2.0 is a state-of-the-art embedding model by Facebook AI, specifically designed for speech recognition. It uses a convolutional neural network to extract features from raw audio and map them into vector embeddings. Wav2Vec 2.0 is pre-trained on large-scale datasets, allowing it to capture meaningful representations of audio data. For tasks such as audio fingerprinting, these embeddings provide a high-quality numerical representation that can distinguish between different audio samples.

You can also experiment with other audio embedding models like VGGish by Google, which is trained on YouTube sound data and can be a suitable choice for general audio tasks.

  1. Vector Search: Vector search allows for efficient comparison of these representations. For this project, we will use ChromaDB for vector searches. 

ChromaDB is a vector database designed to support high-speed similarity searches. It enables efficient storage, indexing, and retrieval of vector embeddings, making it ideal for applications requiring fast query times and scalability. 

  1. Libraries and Tools: For this tutorial, we’ll use Python with libraries like `librosa` (for audio processing) and a vector database for storing and querying embeddings (such as FAISS or Qdrant). 

Ensure you have Python installed, along with the following libraries:

! pip install librosa
! pip install librosa pydub
! pip install transformers torch
! pip install chromadb
! pip install numpy scipy



Technical Implementation: Step-by-Step Guide

Step 1: Preparing the Dataset

A high-quality dataset is essential for accurate audio fingerprinting. For this project, we have selected a small set of audio files to illustrate the steps involved in fingerprinting:

  • Audio Samples:
    • 1. Christina Perri - A Thousand Years (Lyrics)
    • 2. Boone - Beautiful Things (Official Music Video)
    • 3. Cover song for testing: A Thousand Years - Christina Perri (Boyce Avenue Acoustic Cover)

To prepare these files for embedding and vector storage, we will preprocess them by normalizing, resampling, and trimming them to a standard duration. Preprocessing includes:

  • Normalizing Audio Levels: We normalize audio files to a consistent volume, ensuring better embeddings.
  • Consistent Sampling Rate: We load the audio file and resample it to a target sample rate (16 kHz here) if it’s not already in that format.
  • Padding/Trimming to a Fixed Duration: After loading and normalizing, we adjust the audio’s length to the target duration of 60 seconds (or 960,000 samples at 16 kHz). If the audio is shorter, add padding; if longer, trim it to ensure consistency in the audio duration.
import librosa
import numpy as np


TARGET_DURATION = 60  
def preprocess_audio(file_path, target_sr=16000, target_duration=TARGET_DURATION):
   y, sr = librosa.load(file_path, sr=target_sr)


   y = librosa.util.normalize(y)


   target_length = target_sr * target_duration


   if len(y) < target_length:
       padding = target_length - len(y)
       y = np.pad(y, (0, padding), mode='constant')
  
   else:
       y = y[:target_length]
  
   return y, sr

Step 2: Converting Audio to Vector Embeddings

To represent audio files numerically, we convert them into embeddings:

  1. Select an Embedding Model: Pre-trained models like VGGish (trained on YouTube sounds) or Wav2Vec 2.0 (trained on speech) offer excellent audio embeddings. Here, we’ll demonstrate using `Wav2Vec 2.0` for audio representation.
  2. Extract Embeddings: Load each audio file, pass it through the model, and retrieve a vector embedding for each audio sample.
  3. Store the Embeddings: Save embeddings in a structured format (e.g., `.npy` or `.pkl` files) for later use with the vector database.
from transformers import Wav2Vec2Processor, Wav2Vec2Model
import torch


processor = Wav2Vec2Processor.from_pretrained("facebook/wav2vec2-base-960h")
model = Wav2Vec2Model.from_pretrained("facebook/wav2vec2-base-960h")


def get_audio_embedding(file_path):
   audio, sr = preprocess_audio(file_path)
   inputs = processor(audio, sampling_rate=sr, return_tensors="pt", padding=True)
   with torch.no_grad():
       embeddings = model(**inputs).last_hidden_state.mean(dim=1)
   return embeddings.squeeze().numpy()

Step 3: Setting Up Vector Search

With embeddings ready, we need a database for efficient querying. ChromaDB is ideal because it supports similarity-based search and can handle metadata.

  1. Create or load a collection: Use ChromaDB to store audio embeddings, indexed by audio IDs for quick retrieval.
  2. Add embeddings to the database: Store embeddings along with metadata, like file paths, for efficient retrieval.
import chromadb
client = chromadb.Client()


collection = client.get_or_create_collection(name="audio_embeddings")


def add_to_database(embedding, audio_id):
   collection.add(
       embeddings=[embedding],
       metadatas=[{"audio_id": audio_id, "location": audio_id}],
       ids=[audio_id]
   )





Step 4: Query Audio Processing

To find matches for a new audio file:

  1. Preprocess the Query Audio: Ensure it follows the same preprocessing steps (trimming, normalization) as the dataset.
  2. Convert to Embedding: Generate the embedding for the query audio using the same model.
  3. Search the Vector Database: Using the vector database, query for the most similar audio files based on the query embedding.
def search_audio(query_file, top_k=5):
   query_embedding = get_audio_embedding(query_file)
  
   results = collection.query(
       query_embeddings=[query_embedding],
       n_results=top_k
   )
  
   return results["ids"][0], results["distances"][0]
def print_search_results(query_file):
   documents, distances = search_audio(query_file)
  
   for i, (doc, dist) in enumerate(zip(documents, distances)):
       print(f"Rank {i + 1}: Audio ID = {doc}, distance = {dist}")

Step 5: Retrieving and Ranking Results

With the core system in place, we can test it with actual audio files.

embedding = get_audio_embedding("/home/ml/projects/audio-fingerprinting/dataset/Christina Perri - A Thousand Years (Lyrics).wav")
add_to_database(embedding, "/home/ml/projects/audio-fingerprinting/dataset/Christina Perri - A Thousand Years (Lyrics).wav")

print_search_results("/home/ml/projects/audio-fingerprinting/dataset/A_Thousand_Years_Christina_Perri_Boyce_Avenue_acoustic_cover_on.wav")

Step 6: Results

Number of requested results 5 is greater than number of elements in index 2, updating n_results = 2


Rank 1: Audio ID = /home/ml/projects/audio-fingerprinting/dataset/Christina Perri - A Thousand Years (Lyrics).wav, distance = 2.059918165206909
Rank 2: Audio ID = /home/ml/projects/audio-fingerprinting/dataset/Benson Boone - Beautiful Things (Official Music Video).wav, distance = 2.201109647750854

Here, Rank 1 shows a high similarity score with Christina Perri - A Thousand Years (Lyrics), suggesting a strong match, while Rank 2 has a slightly lower score, indicating that it’s less similar to the query.




Summarizing the Tech

Above, we demonstrated the process of building an audio fingerprinting system using Wav2Vec 2.0 for embedding extraction and ChromaDB for vector search. By following these steps, you can transform audio files into embeddings, store them in a vector database, and efficiently retrieve matches based on similarity scores. This approach is scalable and can handle large datasets by simply adding more audio embeddings to ChromaDB. The process also illustrates the versatility of embedding models like Wav2Vec 2.0 in handling diverse audio sources, from original songs to covers.




Future Improvements

For future enhancements, consider:

  • Fine-tuning the Embedding Model: You can fine-tune embeddings for specific characteristics in your audio samples.
  • Testing on Larger Datasets: Expanding the dataset size and diversity can improve system robustness and accuracy.
  • Experimenting with Different Embedding Models: Testing other models like VGGish or fine-tuning Wav2Vec 2.0 for more accurate fingerprinting.
  • Optimizing Database Performance: Moving to a distributed or cloud-based vector database, such as Pinecone, could enhance retrieval speed and scalability.
  • Advanced Preprocessing Techniques: Incorporating noise reduction, pitch normalization, or segment-based embeddings could improve accuracy, especially with noisy or highly variable audio samples.

By implementing these improvements, the fingerprinting system can achieve higher accuracy and greater flexibility, allowing it to handle more complex audio tasks in real-world applications.




Industries Most Impacted by Audio Fingerprinting

Audio fingerprinting technology is likely to impact several industries by enhancing how audio content is identified, tracked, and utilized. Below are the key industries that will experience substantial changes.

1. Music Industry

The music industry is perhaps the most directly affected sector. Audio fingerprinting allows for:

  • Copyright Management: It enables accurate tracking of music usage across various platforms, ensuring that artists receive proper royalties for their work. This is crucial for streaming services, where monitoring song plays and usage is essential for revenue distribution.
  • Music Discovery: Applications such as Shazam have revolutionized how listeners discover music. Users can identify songs in seconds, leading to increased engagement and sales for artists.
  • Content Protection: Fingerprinting helps prevent unauthorized use of music, allowing copyright holders to enforce their rights more effectively in a digital landscape where piracy is prevalent.

2. Advertising and Marketing

In advertising, audio fingerprinting can be utilized to:

  • Track Advertisements: Brands can monitor when and where their audio ads are played across various media channels, ensuring compliance with advertising agreements and measuring campaign effectiveness.
  • Targeted Marketing: By analyzing audio content consumption patterns, companies can tailor advertisements to specific audiences based on their listening habits, enhancing the relevance of marketing efforts.

3. Broadcasting

The broadcasting industry can benefit from audio fingerprinting through:

  • Content Monitoring: Radio and television stations can use fingerprinting to verify that they are broadcasting licensed content. This ensures compliance with copyright laws and helps in reporting usage statistics accurately.
  • Audience Analytics: By understanding which segments of audio are most popular, broadcasters can refine their programming strategies and improve audience engagement.

4. Entertainment

In the broader entertainment sector, including film and television:

  • Soundtrack Identification: Audio fingerprinting allows for automatic identification of soundtracks used in shows and movies, facilitating licensing agreements and royalty payments.
  • Second Screen Applications: Viewers can use apps to identify background music or sound effects while watching shows, creating an interactive experience that enhances viewer engagement.

5. Social Media and User-Generated Content

Platforms that host user-generated content will also see significant impact:

  • Content Moderation: Social media platforms can automatically detect copyrighted music in user uploads, helping to enforce copyright policies without manual intervention.
  • Enhanced User Experience: Users can easily tag or identify music in videos they create, driving engagement and content sharing on platforms like TikTok or Instagram.

6. Gaming Industry

In gaming, audio fingerprinting can enhance user experiences by:

  • Dynamic Soundtrack Management: Games can adapt their soundtracks based on player actions or environments by identifying which tracks are being played or need to be played next based on player preferences.
  • User Engagement Analytics: Developers can analyze which audio elements resonate most with players, allowing for more tailored game design and marketing strategies.



Conclusion

As audio fingerprinting technology continues to evolve, its applications will expand across various sectors beyond those mentioned. The ability to accurately identify and manage audio content will not only streamline operations but also create new business models centered around data-driven insights into consumer behavior. 

If you want to learn more about the potential of audio fingerprinting for your business, connect with us for a demo.

Authors