# homework_3 **Repository Path**: quickthinking/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**: 2018-06-11 - **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.增加结果截图; 3.格式化整体代码,删繁就简,添加必要注释;