Browse Source

feat:小节评分

Joburgess 4 years ago
parent
commit
71e0f9c362

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SoundCompareHelper.java

@@ -38,6 +38,16 @@ public class SoundCompareHelper {
     @ApiModelProperty(value = "偏移时间量,解决客户端录音播放不同步导致的声音留白")
     private int offsetTime;
 
+    private byte[] preDataArray = new byte[0];
+
+    public byte[] getPreDataArray() {
+        return preDataArray;
+    }
+
+    public void setPreDataArray(byte[] preDataArray) {
+        this.preDataArray = preDataArray;
+    }
+
     public int getOffsetTime() {
         return offsetTime;
     }

+ 7 - 1
mec-biz/src/main/java/com/ym/mec/biz/handler/WebSocketHandler.java

@@ -151,8 +151,14 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
         if(Objects.nonNull(userSoundInfoMap.get(phone).getAccessFile())){
             userSoundInfoMap.get(phone).getAccessFile().write(message.getPayload().array());
         }
+
+        byte[] newByte = new byte[userSoundInfoMap.get(phone).getPreDataArray().length+message.getPayloadLength()];
+        System.arraycopy(userSoundInfoMap.get(phone).getPreDataArray(), 0, newByte, 0, userSoundInfoMap.get(phone).getPreDataArray().length);
+        System.arraycopy(message.getPayload().array(), 0, newByte, userSoundInfoMap.get(phone).getPreDataArray().length, message.getPayloadLength());
+        userSoundInfoMap.get(phone).setPreDataArray(message.getPayload().array());
+
         List<MusicPitchDetailDto> recordInfo = new ArrayList<>();
-        AudioDispatcher dispatcher = AudioDispatcherFactory.fromByteArray(message.getPayload().array(), audioFormat, simpleSize, 128);
+        AudioDispatcher dispatcher = AudioDispatcherFactory.fromByteArray(newByte, 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();