A method of searching for audio fingerprints stored in a database, the method implemented within an audio fingerprint detection system and comprising the steps of: a. dividing known audio files into frames that overlap; b. extracting audio fingerprints for each frame from the known audio files; c. archiving the audio fingerprints into the database, wherein the archiving comprises i. assigning the fingerprints into clusters, ii. assigning the clusters into branches of a fingerprint tree, and iii. repeating steps i. and ii. to recursively break down each cluster until a desired depth is obtained of the fingerprint tree; and d. comparing and classifying an incoming unknown audio stream wherein said comparing and classifying is based on the extent of the match of the fingerprints of the unknown audio stream with the fingerprints archived in the database, wherein the matching of fingerprints starts from the root of the fingerprint tree to perform a depth-first search in the tree and comprises the following: i. comparing the fingerprints of the unknown audio stream with a cluster centroid of a node of the fingerprint tree, ii. if a distance between the cluster centroid of the node and the fingerprint of the unknown audio stream exceeds a threshold, skipping all the child nodes of the node, iii. repeating steps i. and ii. until a leaf node of the fingerprint tree is reached, iv. matching the fingerprint of the unknown audio stream with all the fingerprints archived within the leaf node reached in step iii., and v. returning matches to the system. a. dividing known audio files into frames that overlap; b. extracting audio fingerprints for each frame from the known audio files; c. archiving the audio fingerprints into the database, wherein the archiving comprises i. assigning the fingerprints into clusters, ii. assigning the clusters into branches of a fingerprint tree, and iii. repeating steps i. and ii. to recursively break down each cluster until a desired depth is obtained of the fingerprint tree; and i. assigning the fingerprints into clusters, ii. assigning the clusters into branches of a fingerprint tree, and iii. repeating steps i. and ii. to recursively break down each cluster until a desired depth is obtained of the fingerprint tree; and d. comparing and classifying an incoming unknown audio stream wherein said comparing and classifying is based on the extent of the match of the fingerprints of the unknown audio stream with the fingerprints archived in the database, wherein the matching of fingerprints starts from the root of the fingerprint tree to perform a depth-first search in the tree and comprises the following: i. comparing the fingerprints of the unknown audio stream with a cluster centroid of a node of the fingerprint tree, ii. if a distance between the cluster centroid of the node and the fingerprint of the unknown audio stream exceeds a threshold, skipping all the child nodes of the node, iii. repeating steps i. and ii. until a leaf node of the fingerprint tree is reached, iv. matching the fingerprint of the unknown audio stream with all the fingerprints archived within the leaf node reached in step iii., and v. returning matches to the system. i. comparing the fingerprints of the unknown audio stream with a cluster centroid of a node of the fingerprint tree, ii. if a distance between the cluster centroid of the node and the fingerprint of the unknown audio stream exceeds a threshold, skipping all the child nodes of the node, iii. repeating steps i. and ii. until a leaf node of the fingerprint tree is reached, iv. matching the fingerprint of the unknown audio stream with all the fingerprints archived within the leaf node reached in step iii., and v. returning matches to the system.