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
TThe 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:
- Audio is converted to a spectrogram
- Key features (peaks, patterns) are extracted
- Features are hashed into a compact fingerprint
- 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
FrameDuration
Gets or sets the duration of each fingerprint frame in seconds.
public double FrameDuration { get; protected set; }
Property Value
Name
Gets the name of the fingerprinting algorithm.
public abstract string Name { get; }
Property Value
SampleRate
Gets the expected sample rate for input audio.
public int SampleRate { get; protected set; }
Property Value
Methods
ComputeAlignedSimilarity(uint[], uint[], int)
Computes similarity at a specific alignment offset.
protected double ComputeAlignedSimilarity(uint[] queryHashes, uint[] referenceHashes, int offset)
Parameters
queryHashesuint[]Query fingerprint hashes.
referenceHashesuint[]Reference fingerprint hashes.
offsetintAlignment 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
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
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
featuresT[,]Feature matrix [rows, cols].
thresholdTThreshold 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
fp1AudioFingerprint<T>First fingerprint.
fp2AudioFingerprint<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
queryHashesuint[]Query fingerprint hashes.
referenceHashesuint[]Reference fingerprint hashes.
maxOffsetintMaximum 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
queryAudioFingerprint<T>The query fingerprint.
referenceAudioFingerprint<T>The reference fingerprint to search in.
minMatchLengthintMinimum 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
audioTensor<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
audioVector<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
frameIndexintFrame index.
Returns
- double
Time in seconds.
TimeToFrame(double)
Converts time in seconds to frame index.
protected int TimeToFrame(double time)
Parameters
timedoubleTime in seconds.
Returns
- int
Frame index.