|
@@ -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);
|