瀏覽代碼

feat:小节评分

Joburgess 4 年之前
父節點
當前提交
95de47c6c5
共有 1 個文件被更改,包括 10 次插入9 次删除
  1. 10 9
      mec-teacher/src/main/java/com/ym/mec/teacher/handler/WebSocketHandler.java

+ 10 - 9
mec-teacher/src/main/java/com/ym/mec/teacher/handler/WebSocketHandler.java

@@ -8,9 +8,7 @@ import com.ym.mec.biz.dal.dto.AudioRecordConfig;
 import com.ym.mec.biz.dal.dto.MusicPitchDetailDto;
 import com.ym.mec.biz.dal.dto.WavHeader;
 import com.ym.mec.biz.dal.dto.WebSocketInfo;
-import com.ym.mec.biz.service.SoundService;
 import com.ym.mec.biz.service.SoundSocketService;
-import com.ym.mec.util.date.DateUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -18,15 +16,12 @@ import org.springframework.web.socket.*;
 import org.springframework.web.socket.handler.AbstractWebSocketHandler;
 
 import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.Clip;
 import java.io.*;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.Arrays;
-import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * @Author Joburgess
@@ -44,6 +39,7 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 
     private Map<String, RandomAccessFile> userRandomAccessFileMap = new ConcurrentHashMap<>();
     private Map<String, MusicPitchDetailDto> userXmlInfoMap = new ConcurrentHashMap<>();
+    private Map<String, Long> userRecordTimeMap = new ConcurrentHashMap<>();
 
     public WebSocketHandler() {
         super();
@@ -77,6 +73,7 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
             case SoundSocketService.RECORD_START:
                 File file = new File("E:\\Temp\\record"+phone +"-"+ LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) +".wav");
                 userRandomAccessFileMap.put(phone, new RandomAccessFile(file, "rw"));
+                userRecordTimeMap.put(phone, Long.valueOf(0));
                 break;
             case SoundSocketService.RECORD_END:
                 createHeader(phone);
@@ -92,14 +89,18 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
         String phone = session.getPrincipal().getName().split(":")[1];
         if(userRandomAccessFileMap.containsKey(phone)){
             userRandomAccessFileMap.get(phone).write(message.getPayload().array());
-            List<byte[]> bytes = Arrays.asList(message.getPayload().array());
         }
+        AtomicReference<Double> endTimeStamp = new AtomicReference<>((double) 0);
         AudioDispatcher dispatcher = AudioDispatcherFactory.fromByteArray(message.getPayload().array(), audioFormat, 256, 128);
         dispatcher.addAudioProcessor(new PitchProcessor(algo, 44100, 256, (pitchDetectionResult, audioEvent) -> {
             int timeStamp = (int) (audioEvent.getTimeStamp()*1000);
             float pitch = pitchDetectionResult.getPitch();
-//            LOGGER.info("时间:{},频率:{}", timeStamp, pitch);
+            endTimeStamp.set(audioEvent.getEndTimeStamp());
+            LOGGER.info("时间:{},频率:{}, endTime:{}", timeStamp, pitch, endTimeStamp.get());
         }));
+        dispatcher.run();
+        userRecordTimeMap.put(phone, (long) (endTimeStamp.get() +userRecordTimeMap.get(phone)));
+        LOGGER.info("结束时间:{}", userRecordTimeMap.get(phone));
     }
 
     @Override
@@ -139,7 +140,7 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
         }
         RandomAccessFile randomAccessFile = userRandomAccessFileMap.get(phone);
         randomAccessFile.seek(0);
-        LOGGER.info("音频时长:{}", randomAccessFile.length());
+        LOGGER.info("音频时长:{}", userRecordTimeMap.get(phone));
         randomAccessFile.write(new WavHeader(new AudioRecordConfig(), randomAccessFile.length()).toBytes());
         randomAccessFile.close();
         userRandomAccessFileMap.remove(phone);