C # AudioFingerprinting and Terrain

Ive detected simlar messages before this, but nothing answers the question.

In my fingerprint, I create a recordset that has 5 integers. For example: 33,42,88,121,194

They correspond to the frequencies that have the greatest value for a particular sample of music. For example: for 30 ms audio sampling, I have buckets of the following frequencies:

0-40

40-80

80-120

120-180

180-250

I am trying to create a hash (forgiving) that could possibly produce the same hash for 33,42,88,121,194, as it would for example

33,43,88,122,195

where there are slight differences in frequencies, a similar hash will be generated.

Is it LSH first? as I read that this is best suited for audio printing.

If not, can someone provide some psuedocode or C # for a function that could do what it was looking for? I read about LSH and the matlab and perl implementations, but I donโ€™t understand them, so posting a link to them will not help me much.

Thanks again!

+3
source share
1 answer

This may be a duplicate of this: Compare the two spectrograms to find the offset where they fit the algorithm , what you are apparently trying to do is create a histogram for a rough distribution of the peaks in the sample. There are several ways to do this, there is another โ€œexampleโ€ here: Compare two spectrograms to find the offset, where they correspond to the algorithm

One way to do this is to use the fast Fourier transform of the peak data and its distribution (over time) to obtain rough equivalence of the sample in distilled form. To do this, you do something similar to:

  • Divide the sample into discrete discrete parts (say 1 s)
  • For each part of the sample, create a fingerprint that approximates the sample (say, taking 5-7 high and low peaks, normalizing them, and then hashing them
  • Now you can either save each fingerprint individually (in the collection), or perform a sequence conversion to create one fingerprint depending on your needs. Basically, you just add sequences together to get a linear print at 1 second intervals.

To compare the fingerprint, you start the same process on the second sample, and then use the Diff algorithm to compare the two, using some "fuzz" to decide how close they are. You will need to compare the fingerprints on two dimensions, the order of the discrete fingerprints, as well as the total difference in each sample.

This article about creating the crude Java equivalent of Shazaam was published some time ago: http://www.redcode.nl/blog/2010/06/creating-shazam-in-java/ and may help you.

0
source

All Articles