# homework_3 **Repository Path**: wangchao7227/homework_3 ## Basic Information - **Project Name**: homework_3 - **Description**: 基于shazam算法实现的简易音频检索(听歌识曲)-java 要求链接:https://iss-java.github.io/2016/10/23/Homework-3/ - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 7 - **Created**: 2020-04-25 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # homework_3 # 项目简介 基于傅里叶变换的java听歌识曲项目 # 代码结构说明 分为四个模块(package) - 1.scanner - 2.fingerprint - 3.database - 4.grade # 使用 ## 1.database.StoreFingerprint 读取制定文件夹内所有wav格式的文件,经过fft变换之后存储到数据库的song & songfinger表,同时建立索引加快匹配查询速度; 插入一首4min歌曲花费时间约为11s ## 2.grade.EnquirySong 依次比对finger_id,新建data[song.length][]存储找到的匹配hash值和offset差值,hashmap求解每组数中重复最多的值和次数,按照重复次数依次降次排序,输出最后的5条查询结果。查询准确率保持在100% ,5s歌曲片段查询时间2s左右。 # 更新日志 ## 2016.11.1 更新v0.1: - 1.实现音频文件读取获取double[]时域数据; - 2.ScannerTest里提供了一个测试demo; - 3.WaveConstants.java & WaveFileReader.java 封装时域获取方法; ## 2016.11.4 更新v0.2: - 1.text数组改为csv格式输出; ## 2016.11.6 更新v0.3: - 1.完成指纹提取,未验证正确性; ## 2016.11.7 更新v0.4: - 1.导入lib,初步连接数据库; - 2.熟悉基本语法; - 3.验证指纹提取正确性; - 4.git库冲突,进行 merge push。 ## 2016.11.7 更新v0.4-: - 1.算法卡住了,进程倒退,更新readme纪念下,毕竟和妹子一起刚到现在,心疼,所以以后要好好学。 ## 2016.11.8 更新v0.5: - 1.沟通不当,问题现已解决; - 2.指纹提取算法中f1 f2记录值应为频率的下标,助教建议在前1/8范围内寻找; - 3.排序之后需要去重选取最大值(此部分出现理解错误,已更改); - 4.排序算法时间复杂度过大,后期需要改进; ## 2016.11.14 更新v0.6: - 1.利用选择排序替换之前的冒泡,算法时间复杂度为O(n); - 2.排序之后需要去重选取最大值(此部分出现理解错误,已更改); ## 2016.11.16 更新v0.7: - 1.完成匹配打分部分; - 2.优化fft以及查询算法; - 3.增加结果截图; - 4.格式化整体代码,删繁就简,添加必要注释;