Explorar el Código

feat:小节评分

Joburgess hace 4 años
padre
commit
44bb00db5f
Se han modificado 1 ficheros con 22 adiciones y 18 borrados
  1. 22 18
      mec-biz/src/main/java/com/ym/mec/biz/handler/WebSocketHandler.java

+ 22 - 18
mec-biz/src/main/java/com/ym/mec/biz/handler/WebSocketHandler.java

@@ -155,26 +155,27 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
             userSoundInfoMap.get(phone).getAccessFile().write(message.getPayload().array());
         }
 
-        List<MusicPitchDetailDto> recordInfo = new ArrayList<>();
-        AudioDispatcher dispatcher = AudioDispatcherFactory.fromByteArray(message.getPayload().array(), audioFormat, simpleSize, 128);
-        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);
-            recordInfo.add(new MusicPitchDetailDto(timeStamp, pitch));
-        }));
-        dispatcher.run();
-        if(Objects.isNull(userSoundInfoMap.get(phone).getAccessFile())){
-            return;
-        }
+//        List<MusicPitchDetailDto> recordInfo = new ArrayList<>();
+//        AudioDispatcher dispatcher = AudioDispatcherFactory.fromByteArray(message.getPayload().array(), audioFormat, simpleSize, 128);
+//        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);
+//            recordInfo.add(new MusicPitchDetailDto(timeStamp, pitch));
+//        }));
+//        dispatcher.run();
+//        if(Objects.isNull(userSoundInfoMap.get(phone).getAccessFile())){
+//            return;
+//        }
 
         double recordTime = userSoundInfoMap.get(phone).getAccessFile().length()/(audioFormat.getFrameSize()*audioFormat.getFrameRate())*1000;
 
         userSoundInfoMap.get(phone).setMeasureStartTime(recordTime);
-        userSoundInfoMap.get(phone).getRecordMeasurePithInfo().addAll(recordInfo);
+//        userSoundInfoMap.get(phone).getRecordMeasurePithInfo().addAll(recordInfo);
         for (Map.Entry<Integer, MusicPitchDetailDto> userMeasureEndTimeMapEntry : userSoundInfoMap.get(phone).getMeasureEndTime().entrySet()) {
             int ot = (int) (userMeasureEndTimeMapEntry.getValue().getEndTimeStamp()*0.1);
             if(recordTime>(userMeasureEndTimeMapEntry.getValue().getEndTimeStamp()+ot)){
+                LOGGER.info("频分开始{}:{}", recordTime, userSoundInfoMap.get(phone).getAccessFile().length());
 //                measureCompare(phone, userMeasureEndTimeMapEntry.getKey());
                 measureCompare2(phone, userMeasureEndTimeMapEntry.getValue());
                 userSoundInfoMap.get(phone).getMeasureEndTime().remove(userMeasureEndTimeMapEntry.getKey());
@@ -405,19 +406,22 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 
     private void measureCompare2(String phone, MusicPitchDetailDto measureTimeInfo) throws IOException, UnsupportedAudioFileException {
         //小节总时长
-        int measureTime = measureTimeInfo.getEndTimeStamp()-measureTimeInfo.getTimeStamp();
-        int ot = (int) (measureTime * 0.1);
+        double measureTime = measureTimeInfo.getEndTimeStamp()-measureTimeInfo.getTimeStamp();
+        double ot = measureTime * 0.1;
+        if(ot<=measureTimeInfo.getTimeStamp()){
+            measureTime += ot;
+        }
         //小节时长占用字节数
-        int measureByteNum = (int) (measureTime*(audioFormat.getFrameSize()*audioFormat.getFrameRate()));
+        int measureByteNum = (int) (measureTime/1000*(audioFormat.getFrameSize()*audioFormat.getFrameRate()));
 
         List<MusicPitchDetailDto> recordInfo = new ArrayList<>();
         byte[] bytes = new byte[measureByteNum];
-        userSoundInfoMap.get(phone).getAccessFile().seek(userSoundInfoMap.get(phone).getAccessFile().length()-measureByteNum);
+        userSoundInfoMap.get(phone).getAccessFile().seek((userSoundInfoMap.get(phone).getAccessFile().length()-measureByteNum));
         userSoundInfoMap.get(phone).getAccessFile().readFully(bytes);
 
         AudioDispatcher dispatcher = AudioDispatcherFactory.fromByteArray(bytes, audioFormat, simpleSize, 128);
         dispatcher.addAudioProcessor(new PitchProcessor(algo, simpleRate, simpleSize, (pitchDetectionResult, audioEvent) -> {
-            int timeStamp = (int) (measureTimeInfo.getTimeStamp() - ot + audioEvent.getTimeStamp()*1000);
+            int timeStamp = (int) (measureTimeInfo.getTimeStamp() - (ot>measureTimeInfo.getTimeStamp()?0:ot) + audioEvent.getTimeStamp()*1000);
             float pitch = pitchDetectionResult.getPitch();
             recordInfo.add(new MusicPitchDetailDto(timeStamp, pitch));
         }));