# SongRec
SongRec 是一个开源的 Linux Shazam 客户端,使用 Rust 编写。
特点:
* 识别任意音频文件中的音轨。
* 识别来自麦克风的音频。
* 可从图形用户界面和命令行使用。
* 在 GUI 中提供已识别的歌曲的历史信息,可导出为 CSV 文件。
* 从麦克风连续检测歌曲,并可选择输入设备。
* 能够从扬声器而不是麦克风识别歌曲。
(仅命令行) [Python 版本](Python 版本) 也是可供演示使用的,我之前在 Rust 中重写了它,以提高性能。它仅支持文件识别。
## 它是如何工作的
Shazam 还在处理之前对声音进行 16 KHz 的下采样,并将声音分为 250-520 Hz、520-1450 Hz、1450-3500 Hz、3500-5500 Hz 四个频段(这样如果某个频段被噪声过度扰乱,则可以从其他频段进行识别)。然后将频率峰值发送到服务器,服务器随后在数据库中查找最强的峰值,以便查找相邻峰值在相关参考指纹和我们发送的指纹中是否同时存在。
因此,由客户端实现的 Shazam 指纹识别算法相当简单,因为大部分处理都是在服务器端完成。Shazam 的一般功能已在公开文献 [研究论文](https://www.ee.columbia.edu/~dpwe/papers/Wang03-shazam.pdf) 和专利中记录。