Skip to content

Commit

Permalink
最后版
Browse files Browse the repository at this point in the history
测试模块去掉 是否选择辅助识别
  • Loading branch information
999Yy999 committed Jun 6, 2020
1 parent 9f10667 commit b12c965
Show file tree
Hide file tree
Showing 17 changed files with 183 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ public String test(String[] zqls, Model model){

//测试
@RequestMapping(value="/test", method=RequestMethod.POST)
public String test(String time, int fre, int sample, Model model){
public String test(String isFZSearch, String time, int fre, int sample, Model model){
//完成搜索功能
//List<HashMap<String, Object>> audios=audioService.search(filename);
//double[] zql=audioService.test(time, fre, sample);
Expand Down
8 changes: 4 additions & 4 deletions NewAudioR/src/main/java/com/audio/entity/HashTable.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@
public class HashTable {
private int hashtableid;
private int hash;
private int id;
private long id;
private int time;

public HashTable(){
super();
}

public HashTable(int id,Fingerprint.Link link){
public HashTable(long id2,Fingerprint.Link link){
super();
this.id = id;
this.id = id2;
this.time = link.start.intTime; //t1
this.hash = Hash.hash(link); //
}
Expand All @@ -32,7 +32,7 @@ public int getHash() {
public void setHash(int hash) {
this.hash = hash;
}
public int getId() {
public long getId() {
return id;
}
public void setId(int id) {
Expand Down
21 changes: 18 additions & 3 deletions NewAudioR/src/main/java/com/audio/entity/Music.java
Original file line number Diff line number Diff line change
@@ -1,23 +1,38 @@
package com.audio.entity;

public class Music {
private int idmusicinfo;
private long idmusicinfo;
private String title;
private String artist;
private String album;
private String filedir;
private String infodir;

public Music(){}

public Music(long id, String title, String artist, String album, String filedir, String infodir){
this.idmusicinfo=id;
this.title=title;
this.artist=artist;
this.album=album;
this.filedir=filedir;
this.infodir=infodir;
}

public void showMusicInfo(){
System.out.println("id:"+this.getIdmusicinfo()+",title:"+this.getTitle()+",artist:"+this.getArtist()+",album:"+this.getAlbum()+",filedir:"+this.getFiledir()+",infodir:"+this.getInfodir());
}

public String getInfodir() {
return infodir;
}
public void setInfodir(String infodir) {
this.infodir = infodir;
}
public int getIdmusicinfo() {
public long getIdmusicinfo() {
return idmusicinfo;
}
public void setIdmuiscinfo(int idmusicinfo) {
public void setIdmuiscinfo(long idmusicinfo) {
this.idmusicinfo = idmusicinfo;
}
public String getTitle() {
Expand Down
1 change: 1 addition & 0 deletions NewAudioR/src/main/java/com/audio/mapper/AudioMapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public interface AudioMapper {
public List<HashMap<String, Object>> getMusicByPage(@Param("pc") int pc, @Param("ps") int ps);
public void deleteAudio1(Integer id);
public void deleteAudio2(Integer id);
//public List<HashMap<String, Object>> searchAudiosByConditions(@Param("id") int[] id, @Param("artist") String artist, @Param("album") String album);

//public List<HashTable> searchAllAudios(Map linkHash);
}
147 changes: 137 additions & 10 deletions NewAudioR/src/main/java/com/audio/service/impl/AudioServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public class AudioServiceImpl implements AudioService{

@Override
public List<HashMap<String, Object>> helpsearch(String filename, String artist, String album) {
// 先识别出所有相似歌曲(代码冗余了,改)
// 先识别出所有相似歌曲(代码冗余了,改),并添加相似度值,并初次筛掉hit<5的音乐
float data[];
File file=new File(filename);
ReadAudioFile readFile = new ReadAudioFile();
Expand All @@ -77,15 +77,141 @@ public List<HashMap<String, Object>> helpsearch(String filename, String artist,
} catch (Exception e) {
e.printStackTrace();
}
int[] id = search(linkTime, linkHash, minHit);

int[] id = searchall(linkTime, linkHash, minHit);
if (id==null){
System.out.println("--------------------------时间太短 或 噪声太大,未在数据库中找到相同指纹!--");
return null;
}
System.out.println("----------------------------idsize="+id.length+",");
/*for (int i=0; i<id.length; i++){
System.out.println("----------------------------id="+id[i]+",");
}*/
List<HashMap<String,Object>> audios = audioMapper.getAudiosByIDs(id);
//audios里面按照id排序了,不是原来的顺序
System.out.println("audios.size:"+audios.size());
for (int i=0; i < audios.size(); i++){
long idmusicinfo = (long) audios.get(i).get("idmusicinfo");
//System.out.println("id:"+idmusicinfo);
String similar=(String) audios.get(i).get("infodir");
//System.out.println("----------before-infodir:"+audios.get(i).get("infodir"));
for (int k=0; k<id.length; k++){
if (Hash2id(infoIds.get(k).getKey()) == idmusicinfo && audios.get(i).get("infodir").toString().isEmpty()){
String info = infoIds.get(k).getValue().toString();
audios.get(i).put("infodir", info);
//System.out.println("id:"+idmusicinfo+",相似度:"+info);
}
}
}
// 再根据歌手、专辑来二次筛选

List<Music> musicList = new ArrayList();
List<HashMap<String,Object>> audiosListTop3 = new ArrayList();
Music music;
//List<HashMap<String,Object>> audios2 = audioMapper.searchAudiosByConditions(id, artist, album);
for (int i=0; i < audios.size(); i++){
long idmusicinfo=(long) audios.get(i).get("idmusicinfo");
String ititle=(String) audios.get(i).get("title");
String iartist=(String) audios.get(i).get("artist");
String ialbum=(String) audios.get(i).get("album");
String ifiledir=(String) audios.get(i).get("filedir");
String iinfodir=(String) audios.get(i).get("infodir");
System.out.println("添加相似度后:id:"+idmusicinfo+",title:"+ititle+",artist:"+iartist+",album:"+ialbum+",filedir:"+ifiledir+",infodir:"+iinfodir);
if (iartist.indexOf(artist)!=-1 || ialbum.indexOf(album)!=-1){
System.out.println("im here~");
music=new Music(idmusicinfo, ititle, iartist, ialbum, ifiledir, iinfodir);
musicList.add(music);
}
}
System.out.println("---------musiclist.size:"+musicList.size());
for (int i=0; i<musicList.size(); i++){
musicList.get(i).showMusicInfo();
}
// 从中选出相似度高的前三首歌曲

return null;
musicList.sort( new Comparator<Music>(){
public int compare(Music arg0, Music arg1) {
//这里是根据ID来排序,所以它为空的要剔除掉
//if(arg0.getId()==null || arg1.getId()==null) return 0;
//return arg0.getInfodir().compareTo(arg1.getInfodir());
//return arg1.getInfodir().compareTo(arg0.getInfodir()); //升序
return Integer.parseInt(arg1.getInfodir())-Integer.parseInt(arg0.getInfodir()); //降序
}
});
System.out.println("");
for (int i=0; i<musicList.size(); i++){
musicList.get(i).showMusicInfo();
}

HashMap<String,Object> hash;

//for (int i=0; i<musicList.size(); i++){
for (int i=0; i<3; i++){
hash = new HashMap<>();
hash.put("idmusicinfo", musicList.get(i).getIdmusicinfo());
hash.put("title", musicList.get(i).getTitle());
hash.put("artist", musicList.get(i).getArtist());
hash.put("album", musicList.get(i).getAlbum());
hash.put("filedir", musicList.get(i).getFiledir());
hash.put("infodir", musicList.get(i).getInfodir());

System.out.println("排序后:id:"+musicList.get(i).getIdmusicinfo()+",title:"+musicList.get(i).getTitle()+",artist:"+musicList.get(i).getArtist()+",album:"+musicList.get(i).getAlbum()+",filedir:"+musicList.get(i).getFiledir()+",infodir:"+musicList.get(i).getInfodir());
audiosListTop3.add(hash);
}
System.out.println("audiosListTop3.size():"+audiosListTop3.size());
//for (int i=0; i<musicList.size(); i++){
for (int i=0; i<3; i++){
System.out.println("hash添加后:id:"+audiosListTop3.get(i).get("idmusicinfo")+",title:"+audiosListTop3.get(i).get("title")+",artist:"+audiosListTop3.get(i).get("artist")+",album:"+audiosListTop3.get(i).get("album")+",filedir:"+audiosListTop3.get(i).get("filedir")+",infodir:"+audiosListTop3.get(i).get("infodir"));
}

return audiosListTop3;
}

public int[] searchall(int[] linkTime, int[] linkHash, int minHit){
HashMap<Integer,Integer> linkHashMap = new HashMap<>(linkHash.length);
System.out.println("---------fingerprint parameter length:"+linkHash.length);
for(int i = 0; i < linkHash.length; i ++){ //client端 hash,time
linkHashMap.put(linkHash[i],linkTime[i]);
}
hashMap = new HashMap<>(400000);
if (linkHash.length==0){
return null;
}
List<HashTable> audios= audioMapper.searchAllAudios(linkHash);
for (int i=0; i<audios.size(); i++){
int hash = audios.get(i).getHash();
long id = audios.get(i).getId();
int time = audios.get(i).getTime(); //t1
Integer count;
Long idHash = idHash(id,linkHashMap.get(hash) - time); // sample time - database time
count = hashMap.get(idHash);
if(count == null) count = 0;
hashMap.put(idHash,count + 1); //idHash已存在时,更新value值,统计时间差,cnt越大,相似度越高
}
//装的id和相似度值,升序排序
infoIds = new ArrayList<HashMap.Entry<Long, Integer>>(hashMap.entrySet());
Collections.sort(infoIds, new Comparator<HashMap.Entry<Long, Integer>>() {
public int compare(HashMap.Entry<Long, Integer> o1, HashMap.Entry<Long, Integer> o2) {
return (o2.getValue() - o1.getValue());
}
});
System.out.println("---------infoids.size:"+infoIds.size());
//System.out.println("----------maxID="+maxId+"----------------maxCount="+maxCount);
/*for (int i = 0; i < infoIds.size(); i++) {
String what = infoIds.get(i).toString();
Long what1=infoIds.get(i).getKey();
Integer what2=infoIds.get(i).getValue();
}*/

//int[] ids=new int[3];
int[] ids = new int[500]; //设定最多返回500个id(可能重复)
for (int i=0; i<500; i++){
if (infoIds.get(i).getValue()<5){break;} //相似度小于5,则停止加入ids
maxId=infoIds.get(i).getKey(); //idhash
//System.out.println("---------(IDhash,相似度,id):"+"("+maxId+","+infoIds.get(i).getValue()+","+Hash2id(maxId)+")");
ids[i]=Hash2id(maxId); //id
}

return ids;
}


@Override
public List<HashMap<String,Object>> search(String filename, float[] data1) {
Expand Down Expand Up @@ -172,7 +298,7 @@ public int[] search(int[] linkTime, int[] linkHash, int minHit){
List<HashTable> audios= audioMapper.searchAllAudios(linkHash);
for (int i=0; i<audios.size(); i++){
int hash = audios.get(i).getHash();
int id = audios.get(i).getId();
long id = audios.get(i).getId();
int time = audios.get(i).getTime();
Integer count;
Long idHash = idHash(id,linkHashMap.get(hash) - time);
Expand All @@ -196,12 +322,13 @@ public int compare(HashMap.Entry<Long, Integer> o1, HashMap.Entry<Long, Integer>
}
});
//System.out.println("----------maxID="+maxId+"----------------maxCount="+maxCount);
/*
for (int i = 0; i < infoIds.size(); i++) {
String what = infoIds.get(i).toString();
Long what1=infoIds.get(i).getKey();
Integer what2=infoIds.get(i).getValue();
//System.out.println(what+","+what1+","+what2);
}
}*/

int[] ids=new int[3];
for (int i=0; i<3; i++){
Expand Down Expand Up @@ -261,7 +388,7 @@ public synchronized void dbinsert(String filename){

audioMapper.addMusic(readFile.music); //插入数据到musicinfo表

int id=readFile.music.getIdmusicinfo(); //记录下id (mybatis把自增主键绑定到了music对象的idmusicinfo里去)
long id=readFile.music.getIdmusicinfo(); //记录下id (mybatis把自增主键绑定到了music对象的idmusicinfo里去)

Fingerprint fp = new Fingerprint(data, fs);

Expand All @@ -275,7 +402,7 @@ public synchronized void dbinsert(String filename){
}
}

public static Long idHash(int id, int time){
public static Long idHash(long id, int time){
return (long) ((id << 16) + time + (1 << 15)); //左移==乘2 右移==除2
}

Expand Down
7 changes: 3 additions & 4 deletions NewAudioR/src/main/java/mapperconfig/AudioMapper.xml
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,9 @@
*
FROM musicinfo
WHERE idmusicinfo in
<foreach item="item" index="index" collection="array" open="(" separator="," close=")">
#{item}
</foreach>
<foreach item="item" index="index" collection="array" open="(" separator="," close=")">
#{item}
</foreach>
</select>

<!-- select id="searchAllAudios" resultType="com.audio.entity.Music">
Expand Down Expand Up @@ -87,6 +87,5 @@
where id = #{id}
</delete>


</mapper>

6 changes: 4 additions & 2 deletions NewAudioR/src/main/webapp/WEB-INF/jsp/test.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,9 @@
<!-- form action="test" method="POST"> -->
<fieldset>
<fieldset id="filter" class="ft">
<legend>Search word</legend>
<input type="text" name="searchword" id="searchword" placeholder="Ex.: Column generation">
<legend>是否加入辅助项检索</legend>
<input id="yes" type="radio" name="fzsearch" value="1"><label for="yes"><span><span id="yes">是</span></span></label>
<input id="no" type="radio" name="fzsearch" value="0"><label for="no"><span><span id="yes">否</span></span></label>
</fieldset>
<fieldset class="ft">
<legend>时长</legend>
Expand Down Expand Up @@ -86,6 +87,7 @@
<thead>
<tr>
<th>编号</th>
<th>是否加入辅助识别</th>
<th>时长</th>
<th>白噪声强度(dBFS)</th>
<th>测试样例数</th>
Expand Down
2 changes: 1 addition & 1 deletion NewAudioR/src/main/webapp/resources/html/home.html
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
-->
<div class="canvas">
<div id="title">Audio Recognizition</div>
<div id="articles">Musics:1002</div> <!-- 之后动态获取数据到这里 -->
<div id="articles">Musics:1316</div> <!-- 之后动态获取数据到这里 -->
<!--
<div id="years"></div>
<div id="sets"></div>
Expand Down
14 changes: 11 additions & 3 deletions NewAudioR/src/main/webapp/resources/js/testresult.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@ var req;
function add(){
var vzql1,vzql2;
var sendDate,receiveDate,responseTimeMs;
var showfzsearch;
var fzsearch=$('input[name=fzsearch]:checked').val();
var time = $('input[name=time]:checked').val();
var fre = $('input[name=fre]:checked').val();
var samplenum = $('input[name=sample]:checked').val();
req="test?time="+time+"&fre="+fre+"&sample="+samplenum;
req="test?fzsearch="+fzsearch+"&time="+time+"&fre="+fre+"&sample="+samplenum;
//发送请求
var xhr=new XMLHttpRequest();
//alert("1:"+xhr.readyState);
Expand Down Expand Up @@ -64,6 +66,7 @@ function add(){
var tr=document.createElement("tr");
// 1.新建一项
var id=document.createElement("td");
var fzsearchtd=document.createElement("td");
var dur=document.createElement("td");
var noise=document.createElement("td");
var sample=document.createElement("td");
Expand All @@ -85,8 +88,12 @@ function add(){
case "mode2": durtime="4s<=时长<10s"; break;
case "mode3": durtime="时长>=10s"; break;
}

switch(fzsearch){
case "1": showfzsearch="是"; break;
case "0": showfzsearch="否"; break;
}
// 2.填内容
fzsearchtd.innerHTML=showfzsearch;
dur.innerHTML=durtime;
noise.innerHTML=fre;
sample.innerHTML=samplenum;
Expand All @@ -97,8 +104,9 @@ function add(){
var tab=document.getElementById("table");
var tbody=document.getElementById("tbody");
tbody.appendChild(tr);
// 3.id加到表里
// 3.td加到表里
tr.appendChild(id);
tr.appendChild(fzsearchtd);
tr.appendChild(dur);
tr.appendChild(noise);
tr.appendChild(sample);
Expand Down
Binary file not shown.
Binary file modified NewAudioR/target/classes/com/audio/entity/HashTable.class
Binary file not shown.
Binary file modified NewAudioR/target/classes/com/audio/entity/Music.class
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading

0 comments on commit b12c965

Please sign in to comment.