|
@@ -44,7 +44,10 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
|
|
|
//存储客户端链接
|
|
|
public static final Map<String, WebSocketSession> WS_CLIENTS = new ConcurrentHashMap<>();
|
|
|
|
|
|
- private BigDecimal oneHundred = new BigDecimal(100);
|
|
|
+ private final BigDecimal oneHundred = new BigDecimal(100);
|
|
|
+
|
|
|
+ private final BigDecimal tenPercent = new BigDecimal(0.1);
|
|
|
+
|
|
|
private final float simpleRate = 44100;
|
|
|
private int simpleSize = 1024;
|
|
|
|
|
@@ -53,6 +56,7 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
|
|
|
|
|
|
private static final String tmpDir = FileUtils.getTempDirectoryPath() + "/soundCompare/";
|
|
|
|
|
|
+ //用户对应评分信息
|
|
|
private Map<String, SoundCompareHelper> userSoundInfoMap = new ConcurrentHashMap<>();
|
|
|
|
|
|
@Autowired
|
|
@@ -146,7 +150,7 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
|
|
|
dispatcher.addAudioProcessor(new PitchProcessor(algo, simpleRate, simpleSize, (pitchDetectionResult, audioEvent) -> {
|
|
|
int timeStamp = (int) (userSoundInfoMap.get(phone).getMeasureStartTime() + audioEvent.getTimeStamp()*1000);
|
|
|
float pitch = pitchDetectionResult.getPitch();
|
|
|
- LOGGER.info("频率:{}, {}", timeStamp, pitch);
|
|
|
+// LOGGER.info("频率:{}, {}", timeStamp, pitch);
|
|
|
recordInfo.add(new MusicPitchDetailDto(timeStamp, pitch));
|
|
|
}));
|
|
|
dispatcher.run();
|
|
@@ -266,8 +270,10 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
|
|
|
int totalCompareNum = userSoundInfoMap.get(phone).getMeasureXmlInfoMap().get(measureIndex).size();
|
|
|
|
|
|
for (MusicPitchDetailDto musicXmlInfo : userSoundInfoMap.get(phone).getMeasureXmlInfoMap().get(measureIndex)) {
|
|
|
- int startTimeStamp = musicXmlInfo.getTimeStamp();
|
|
|
- int endTimeStamp = musicXmlInfo.getTimeStamp()+musicXmlInfo.getDuration();
|
|
|
+ int ignoreTime = (int) (musicXmlInfo.getDuration() * 0.1);
|
|
|
+
|
|
|
+ int startTimeStamp = musicXmlInfo.getTimeStamp() + ignoreTime;
|
|
|
+ int endTimeStamp = musicXmlInfo.getTimeStamp()+musicXmlInfo.getDuration() - ignoreTime;
|
|
|
|
|
|
//时间范围内有效音准数量
|
|
|
float recordValidIntonationNum = 0;
|
|
@@ -278,14 +284,14 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
|
|
|
//时间范围内匹配次数
|
|
|
float compareNum = 0;
|
|
|
for (MusicPitchDetailDto recordInfo : userSoundInfoMap.get(phone).getRecordMeasurePithInfo()) {
|
|
|
-// LOGGER.info("频率:{}, {}", musicXmlInfo.getFrequency(), recordInfo.getFrequency());
|
|
|
//如果在时间范围之外直接跳过
|
|
|
if(recordInfo.getTimeStamp()<startTimeStamp||recordInfo.getTimeStamp()>endTimeStamp){
|
|
|
continue;
|
|
|
}
|
|
|
+ LOGGER.info("{}频率({}-{}):{}, {}", recordInfo.getTimeStamp(), startTimeStamp, endTimeStamp, musicXmlInfo.getFrequency(), recordInfo.getFrequency());
|
|
|
compareNum++;
|
|
|
//如果在最低有效频率以下则跳过
|
|
|
- if(recordInfo.getFrequency()<minValidFrequency){
|
|
|
+ if(recordInfo.getFrequency()<minValidFrequency&&musicXmlInfo.getFrequency()!=-1){
|
|
|
continue;
|
|
|
}
|
|
|
recordValidNum++;
|