A method comprising: accessing, by one or more processors, a query fingerprint that includes query sub-fingerprints (411, 412, 413, 414, 415, 416) generated from query segments (311, 312, 313, 314, 315, 316) of a portion of query audio to be identified; accessing, by the one or more processors, a database in which an index maps reference sub-fingerprints (451, 452, 453, 454, 455, 456) generated from reference segments of reference audio to points at which the reference segments occur in the reference audio; selecting, by the one or more processors, the reference sub-fingerprints (451, 452, 453, 454, 455, 456) for comparison to the query sub-fingerprints (411, 412, 413, 414, 415, 416) based on a determination that a query sub-fingerprint among the query sub-fingerprints is a match with a reference sub-fingerprint among the reference sub-fingerprints, the reference sub-fingerprint being mapped by the index to a reference point at which a reference segment among the reference segments occurs in the reference audio; generating, by the one or more processors, a count vector that stores total counts of matches between the query sub-fingerprints and different subsets of the reference sub-fingerprints, each of the different subsets being aligned to the query sub-fingerprints at a different offset from the reference point, each of the different offsets being mapped by the count vector to a different total count among the total counts, wherein the different offsets are spaced apart from each other by a predetermined number of sub-fingerprints; calculating, by the one or more processors, a maximum count among the total counts stored in the count vector; extracting an additional feature from the count vector without using the maximum count in the count vector; and classifying, by the one or more processors, the reference sub-fingerprints as a match with the query sub-fingerprints based on the maximum count in the count vector and the additional feature. accessing, by one or more processors, a query fingerprint that includes query sub-fingerprints (411, 412, 413, 414, 415, 416) generated from query segments (311, 312, 313, 314, 315, 316) of a portion of query audio to be identified; accessing, by the one or more processors, a database in which an index maps reference sub-fingerprints (451, 452, 453, 454, 455, 456) generated from reference segments of reference audio to points at which the reference segments occur in the reference audio; selecting, by the one or more processors, the reference sub-fingerprints (451, 452, 453, 454, 455, 456) for comparison to the query sub-fingerprints (411, 412, 413, 414, 415, 416) based on a determination that a query sub-fingerprint among the query sub-fingerprints is a match with a reference sub-fingerprint among the reference sub-fingerprints, the reference sub-fingerprint being mapped by the index to a reference point at which a reference segment among the reference segments occurs in the reference audio; generating, by the one or more processors, a count vector that stores total counts of matches between the query sub-fingerprints and different subsets of the reference sub-fingerprints, each of the different subsets being aligned to the query sub-fingerprints at a different offset from the reference point, each of the different offsets being mapped by the count vector to a different total count among the total counts, wherein the different offsets are spaced apart from each other by a predetermined number of sub-fingerprints; calculating, by the one or more processors, a maximum count among the total counts stored in the count vector; extracting an additional feature from the count vector without using the maximum count in the count vector; and classifying, by the one or more processors, the reference sub-fingerprints as a match with the query sub-fingerprints based on the maximum count in the count vector and the additional feature.