简而言之,Shazam 会记录您正在听的歌曲的指纹,并将其发送到其后端服务器以将其与指纹数据库进行匹配。然后,查找过程会为索引中的每首歌曲生成一个偏移量直方图,并声明在单个偏移量处匹配最多的歌曲为获胜者。有关该算法的详细信息,请参见此处的原始论文。
根据这篇博文,Shazam 将其索引分成几层,以加快查找过程。最流行歌曲的指纹存储在第一层,首先被查询。如果在第一层中没有找到匹配的歌曲,则搜索继续到第二层,依此类推。
我不明白 Shazam 如何通过这样的架构避免误报?例如,当较低级别中存在匹配分数较高的不太受欢迎的曲目时,如何避免匹配具有较高匹配分数的热门曲目?它是否使用评分函数和阈值?如果是,评分函数会是什么样子?