Table of Contents

Class AudioFingerprinterBase<T>

Namespace
AiDotNet.Audio.Fingerprinting
Assembly
AiDotNet.dll

Base class for audio fingerprinting algorithms.

public abstract class AudioFingerprinterBase<T> : IAudioFingerprinter<T>

Type Parameters

T

The numeric type used for calculations.

Inheritance
AudioFingerprinterBase<T>
Implements
Derived
Inherited Members

Remarks

Audio fingerprinting creates compact identifiers that can recognize audio content even after degradation (compression, noise, speed changes). Unlike neural network approaches, fingerprinting typically uses signal processing techniques.

For Beginners: Audio fingerprinting is like Shazam - it can identify a song from a short audio clip, even if the audio is noisy or compressed.

How it works:

  1. Audio is converted to a spectrogram
  2. Key features (peaks, patterns) are extracted
  3. Features are hashed into a compact fingerprint
  4. Fingerprints can be matched against a database

This base class provides:

  • Hash computation utilities
  • Hamming distance for comparison
  • Time alignment for matching

Constructors

AudioFingerprinterBase()

Initializes a new instance of the AudioFingerprinterBase class.

protected AudioFingerprinterBase()

Fields

NumOps

Operations for the numeric type T.

protected readonly INumericOperations<T> NumOps

Field Value

INumericOperations<T>

Properties

FingerprintLength

Gets the fingerprint length in bits or elements.

public int FingerprintLength { get; protected set; }

Property Value

int

FrameDuration

Gets or sets the duration of each fingerprint frame in seconds.

public double FrameDuration { get; protected set; }

Property Value

double

Name

Gets the name of the fingerprinting algorithm.

public abstract string Name { get; }

Property Value

string

SampleRate

Gets the expected sample rate for input audio.

public int SampleRate { get; protected set; }

Property Value

int

Methods

ComputeAlignedSimilarity(uint[], uint[], int)

Computes similarity at a specific alignment offset.

protected double ComputeAlignedSimilarity(uint[] queryHashes, uint[] referenceHashes, int offset)

Parameters

queryHashes uint[]

Query fingerprint hashes.

referenceHashes uint[]

Reference fingerprint hashes.

offset int

Alignment offset.

Returns

double

Similarity score (0.0 to 1.0).

ComputeAverageHammingDistance(uint[], uint[])

Computes average Hamming distance between fingerprint hash sequences.

protected double ComputeAverageHammingDistance(uint[] hashes1, uint[] hashes2)

Parameters

hashes1 uint[]

First fingerprint hash sequence.

hashes2 uint[]

Second fingerprint hash sequence.

Returns

double

Average Hamming distance (0.0 to 1.0 normalized).

ComputeHammingDistance(uint, uint)

Computes Hamming distance between two fingerprint hashes.

protected int ComputeHammingDistance(uint fp1, uint fp2)

Parameters

fp1 uint

First fingerprint hash.

fp2 uint

Second fingerprint hash.

Returns

int

Number of differing bits.

Remarks

For Beginners: Hamming distance counts how many bits are different between two fingerprints. Lower distance = more similar audio.

ComputeHashes(T[,], T)

Converts a feature matrix to hash values.

protected uint[] ComputeHashes(T[,] features, T threshold)

Parameters

features T[,]

Feature matrix [rows, cols].

threshold T

Threshold for binarization.

Returns

uint[]

Array of hash values.

ComputeSimilarity(AudioFingerprint<T>, AudioFingerprint<T>)

Computes the similarity between two fingerprints.

public abstract double ComputeSimilarity(AudioFingerprint<T> fp1, AudioFingerprint<T> fp2)

Parameters

fp1 AudioFingerprint<T>

First fingerprint.

fp2 AudioFingerprint<T>

Second fingerprint.

Returns

double

Similarity score (0-1, higher is more similar).

FindBestAlignment(uint[], uint[], int)

Finds the best alignment offset between two fingerprint hash sequences.

protected (int Offset, double Similarity) FindBestAlignment(uint[] queryHashes, uint[] referenceHashes, int maxOffset = 100)

Parameters

queryHashes uint[]

Query fingerprint hashes.

referenceHashes uint[]

Reference fingerprint hashes.

maxOffset int

Maximum offset to search.

Returns

(int Offset, double Similarity)

Best offset and corresponding similarity score.

FindMatches(AudioFingerprint<T>, AudioFingerprint<T>, int)

Finds matching segments between two fingerprints.

public abstract IReadOnlyList<FingerprintMatch> FindMatches(AudioFingerprint<T> query, AudioFingerprint<T> reference, int minMatchLength = 10)

Parameters

query AudioFingerprint<T>

The query fingerprint.

reference AudioFingerprint<T>

The reference fingerprint to search in.

minMatchLength int

Minimum length of matching segment.

Returns

IReadOnlyList<FingerprintMatch>

List of matching segments with time offsets.

Fingerprint(Tensor<T>)

Generates a fingerprint from audio data.

public abstract AudioFingerprint<T> Fingerprint(Tensor<T> audio)

Parameters

audio Tensor<T>

Audio samples as a tensor (mono audio).

Returns

AudioFingerprint<T>

The audio fingerprint.

Fingerprint(Vector<T>)

Generates a fingerprint from audio data.

public virtual AudioFingerprint<T> Fingerprint(Vector<T> audio)

Parameters

audio Vector<T>

Audio samples as a vector (mono audio).

Returns

AudioFingerprint<T>

The audio fingerprint.

FrameToTime(int)

Converts frame index to time in seconds.

protected double FrameToTime(int frameIndex)

Parameters

frameIndex int

Frame index.

Returns

double

Time in seconds.

TimeToFrame(double)

Converts time in seconds to frame index.

protected int TimeToFrame(double time)

Parameters

time double

Time in seconds.

Returns

int

Frame index.