yonge 2 年之前
父节点
当前提交
89566e9d05

+ 12 - 21
audio-analysis/src/main/java/com/yonge/netty/dto/UserChannelContext.java

@@ -15,7 +15,6 @@ import java.util.stream.Collectors;
 
 import javax.sound.sampled.AudioFormat;
 
-import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -59,8 +58,6 @@ public class UserChannelContext {
 	
 	private Integer subjectId;
 	
-	private String evaluationCriteria;
-	
 	private float beatDuration;
 	
 	private boolean delayProcessed;
@@ -123,12 +120,11 @@ public class UserChannelContext {
 		return result;
 	}
 	
-	public void init(MusicXmlBasicInfo musicXmlBasicInfo, float sampleRate, int bufferSize) {
-		this.platform = musicXmlBasicInfo.getPlatform();
-		this.subjectId = musicXmlBasicInfo.getSubjectId();
-		this.beatDuration = musicXmlBasicInfo.getBeatLength();
-		this.hardLevel = HardLevelEnum.valueOf(musicXmlBasicInfo.getHeardLevel());
-		this.evaluationCriteria = musicXmlBasicInfo.getEvaluationCriteria();
+	public void init(String platform, String heardLevel, int subjectId, float beatDuration,float sampleRate, int bufferSize) {
+		this.platform = platform;
+		this.subjectId = subjectId;
+		this.beatDuration = beatDuration;
+		hardLevel = HardLevelEnum.valueOf(heardLevel);
 		if(detector == null){
 			detector = new FastYin(sampleRate, bufferSize);
 		}
@@ -331,18 +327,13 @@ public class UserChannelContext {
 		//int playFrequency = (int) frequencyDetector.getFrequency(samples);
 		
 		int playFrequency = -1;
-		if(!percussionList.contains(subjectId) || StringUtils.equalsIgnoreCase(evaluationCriteria, EvaluationCriteriaEnum.FREQUENCY.getCode())){
+		if(!percussionList.contains(subjectId)){
 			playFrequency = (int)detector.getPitch(samples).getPitch();
 		}
 		
 		int splDb = (int) Signals.soundPressureLevel(samples);
 		int power = (int) Signals.power(samples);
-		int amplitude = 0;
-		if(percussionList.contains(subjectId) || StringUtils.equalsIgnoreCase(evaluationCriteria, EvaluationCriteriaEnum.AMPLITUDE.getCode())) {
-			amplitude = (int) Signals.norm(samples);
-		}else if(StringUtils.equalsIgnoreCase(evaluationCriteria, EvaluationCriteriaEnum.DECIBELS.getCode())){
-			amplitude = (int) Signals.decibels(samples) >= 38 ? 10 : 1;
-		}
+		int amplitude = (int) Signals.norm(samples);
 		//float rms = Signals.rms(samples);
 		
 		double durationTime = 1000 * (samples.length * 2) / audioFormat.getSampleRate() / (audioFormat.getSampleSizeInBits() / 8);
@@ -378,7 +369,7 @@ public class UserChannelContext {
 			totalChunkAnalysisList.add(chunkAnalysis);
 			
 			boolean flag = false; //是否收到有效信号
-			if(percussionList.contains(subjectId) || !StringUtils.equalsIgnoreCase(evaluationCriteria, EvaluationCriteriaEnum.FREQUENCY.getCode())){
+			if(percussionList.contains(subjectId)){
 				flag = chunkAnalysis.getAmplitude() > hardLevel.getAmplitudeThreshold();
 			}else{
 				flag = chunkAnalysis.getFrequency() > MIN_FREQUECY && chunkAnalysis.getFrequency() < MAX_FREQUECY;
@@ -404,7 +395,7 @@ public class UserChannelContext {
 				
 				//判断节奏(音符持续时间内有不间断的音高,就节奏正确)
 				boolean tempo = true;
-				if (percussionList.contains(subjectId) || !StringUtils.equalsIgnoreCase(evaluationCriteria, EvaluationCriteriaEnum.FREQUENCY.getCode())) {
+				if (percussionList.contains(subjectId)) {
 					noteAnalysis.setPlayFrequency(-1);
 					tempo = computeTempoWithAmplitude2(musicXmlNote);
 				}else{
@@ -548,7 +539,7 @@ public class UserChannelContext {
 		
 		double playDurationTime = 0;
 		
-		if (percussionList.contains(subjectId) || !StringUtils.equalsIgnoreCase(evaluationCriteria, EvaluationCriteriaEnum.FREQUENCY.getCode())) {
+		if (percussionList.contains(subjectId)) {
 			if (noteAnalysis.getFrequency() == -1) {// 休止符
 				if (!noteAnalysis.isTempo()) {
 					noteAnalysis.setMusicalErrorType(NoteErrorType.CADENCE_WRONG);
@@ -631,7 +622,7 @@ public class UserChannelContext {
 			noteAnalysis.setIntegrityScore(integrityScore);
 		}
 		noteAnalysis.setIntonationScore(intonationScore);
-		if (percussionList.contains(subjectId) || !StringUtils.equalsIgnoreCase(evaluationCriteria, EvaluationCriteriaEnum.FREQUENCY.getCode())) {
+		if (percussionList.contains(subjectId)) {
 			noteAnalysis.setScore(tempoScore);
 		} else {
 			noteAnalysis.setScore(new BigDecimal(intonationScore + tempoScore + integrityScore).divide(new BigDecimal(3), 2).setScale(0, BigDecimal.ROUND_UP)
@@ -959,7 +950,7 @@ public class UserChannelContext {
 			return musicXmlNote.getTimeStamp() + dynamicOffset;
 		}
 		
-		if (percussionList.contains(subjectId) || !StringUtils.equalsIgnoreCase(evaluationCriteria, EvaluationCriteriaEnum.FREQUENCY.getCode())) {
+		if (percussionList.contains(subjectId)) {
 			Optional<ChunkAnalysis> optional = chunkAnalysisList.stream().filter(t -> t.getAmplitude() > hardLevel.getAmplitudeThreshold()).findFirst();
 			if(optional.isPresent()){
 				LOGGER.debug("范围内查询到信号,correctedStartTime:{}", optional.get().getStartTime());

+ 5 - 3
audio-analysis/src/main/java/com/yonge/netty/server/service/AudioCompareHandler.java

@@ -26,6 +26,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONPath;
 import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
 import com.ym.mec.biz.dal.enums.DeviceTypeEnum;
 import com.ym.mec.biz.dal.enums.FeatureType;
@@ -125,7 +126,8 @@ public class AudioCompareHandler implements MessageHandler {
 			channelContext.setHandlerSwitch(false);
 
 			channelContext.getSongMusicXmlMap().put(musicXmlBasicInfo.getExamSongId(), musicXmlBasicInfo);
-			channelContext.init(musicXmlBasicInfo, audioFormat.getSampleRate(), bufferSize / 2);
+			channelContext.init(musicXmlBasicInfo.getPlatform(), musicXmlBasicInfo.getHeardLevel(), musicXmlBasicInfo.getSubjectId(),
+					musicXmlBasicInfo.getBeatLength(), audioFormat.getSampleRate(), bufferSize / 2);
 			channelContext.setUser(user);
 			
 			userChannelContextService.register(channel, channelContext);
@@ -157,7 +159,7 @@ public class AudioCompareHandler implements MessageHandler {
 				
 				MusicXmlNote musicXmlNote = musicXmlBasicInfo.getMusicXmlInfos().stream().max(Comparator.comparing(MusicXmlNote::getTimeStamp)).get();
 				sysMusicCompareRecord.setSourceTime((float) ((musicXmlNote.getTimeStamp()+musicXmlNote.getDuration())/1000));
-				sysMusicCompareRecordService.insert(sysMusicCompareRecord,null);
+				sysMusicCompareRecordService.insert(sysMusicCompareRecord, null);
 				channelContext.setRecordId(sysMusicCompareRecord.getId());
 			}
 			break;
@@ -227,7 +229,7 @@ public class AudioCompareHandler implements MessageHandler {
 					
 					sysMusicCompareRecord.setHeardLevel(HeardLevelEnum.valueOf(channelContext.getHardLevel().name()));
 					
-					sysMusicCompareRecordService.saveMusicCompareData(sysMusicCompareRecord,musicXmlBasicInfo.getCampId());
+					sysMusicCompareRecordService.saveMusicCompareData(sysMusicCompareRecord, musicXmlBasicInfo.getCampId());
 				}
 				
 				int totalPlayTimeOfCurrentDate = sysMusicCompareRecordService.queryCurrentDatePlayTimeByUserId(sysMusicCompareRecord.getUserId());