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