|
@@ -10,6 +10,7 @@ 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,7 +19,12 @@ 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;
|
|
|
|
|
@@ -67,12 +73,16 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
|
|
|
if(webSocketInfo.getHeader().containsKey(SoundSocketService.COMMOND)){
|
|
|
commond = webSocketInfo.getHeader().get(SoundSocketService.COMMOND);
|
|
|
}
|
|
|
-
|
|
|
- if(message.getPayload().contains("Start")){
|
|
|
- File file = new File("E:\\Temp\\record"+phone+".wav");
|
|
|
- userRandomAccessFileMap.put(phone, new RandomAccessFile(file, "rw"));
|
|
|
- }else if(message.getPayload().contains("End")){
|
|
|
- createHeader(phone);
|
|
|
+ switch (commond){
|
|
|
+ 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"));
|
|
|
+ break;
|
|
|
+ case SoundSocketService.RECORD_END:
|
|
|
+ createHeader(phone);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -82,6 +92,7 @@ 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());
|
|
|
}
|
|
|
AudioDispatcher dispatcher = AudioDispatcherFactory.fromByteArray(message.getPayload().array(), audioFormat, 256, 128);
|
|
|
dispatcher.addAudioProcessor(new PitchProcessor(algo, 44100, 256, (pitchDetectionResult, audioEvent) -> {
|
|
@@ -89,7 +100,6 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
|
|
|
float pitch = pitchDetectionResult.getPitch();
|
|
|
// LOGGER.info("时间:{},频率:{}", timeStamp, pitch);
|
|
|
}));
|
|
|
- dispatcher.run();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -129,6 +139,7 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
|
|
|
}
|
|
|
RandomAccessFile randomAccessFile = userRandomAccessFileMap.get(phone);
|
|
|
randomAccessFile.seek(0);
|
|
|
+ LOGGER.info("音频时长:{}", randomAccessFile.length());
|
|
|
randomAccessFile.write(new WavHeader(new AudioRecordConfig(), randomAccessFile.length()).toBytes());
|
|
|
randomAccessFile.close();
|
|
|
userRandomAccessFileMap.remove(phone);
|