yonge 3 年之前
父节点
当前提交
b8bf5c3fdc

+ 5 - 0
audio-analysis/pom.xml

@@ -23,6 +23,11 @@
 		</dependency>
 
 		<dependency>
+			<groupId>org.springframework.cloud</groupId>
+			<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
+		</dependency>
+
+		<dependency>
 			<groupId>de.codecentric</groupId>
 			<artifactId>spring-boot-admin-starter-client</artifactId>
 		</dependency>

+ 1 - 1
audio-analysis/src/main/java/com/yonge/nettty/dto/HardLevelEnum.java

@@ -3,7 +3,7 @@ package com.yonge.nettty.dto;
 import com.ym.mec.common.enums.BaseEnum;
 
 public enum HardLevelEnum implements BaseEnum<String, HardLevelEnum> {
-	BEGINNER("入门级", 2, 10, 40, 60, 10), ADVANCED("进阶级", 5, 5, 50, 60, 10), PERFORMER("大师级", 2, 10, 40, 60, 10);
+	BEGINNER("入门级", 5, 5, 50, 60, 10), ADVANCED("进阶级", 5, 5, 50, 60, 10), PERFORMER("大师级", 5, 5, 50, 60, 10);
 
 	private String msg;
 

+ 25 - 13
audio-analysis/src/main/java/com/yonge/nettty/dto/UserChannelContext.java

@@ -71,7 +71,7 @@ public class UserChannelContext {
 		this.subjectId = subjectId;
 		this.beatDuration = beatDuration;
 		this.beatByteLength = WaveformWriter.SAMPLE_RATE * WaveformWriter.BITS_PER_SAMPLE / 8 * beatDuration / 1000;
-		//hardLevel = HardLevelEnum.valueOf(heardLevel);
+		hardLevel = HardLevelEnum.valueOf(heardLevel);
 	}
 	
 	public byte[] skipHeader(byte[] datas) {
@@ -314,16 +314,16 @@ public class UserChannelContext {
 				
 				//判断节奏(音符持续时间内有不间断的音高,就节奏正确)
 				boolean tempo = true;
-				if (musicXmlNote.getFrequency() == -1) {// 休止符
-					if (subjectId == 23) {
+				if (subjectId == 23) {
+					if (musicXmlNote.getFrequency() == -1) {// 休止符
 						tempo = chunkAnalysisList.stream().filter(t -> t.getAmplitude() > hardLevel.getAmplitudeThreshold()).count() <= 0;
 					}else{
-						tempo = chunkAnalysisList.stream().filter(t -> t.getFrequency() > 100).count() <= 1;
-					}
-				} else {
-					if (subjectId == 23) {
 						tempo = computeTempoWithAmplitude2(chunkAnalysisList, lastChunkAnalysis);
-					} else {
+					}
+				}else{
+					if (musicXmlNote.getFrequency() == -1) {// 休止符
+						tempo = chunkAnalysisList.stream().filter(t -> t.getFrequency() > 100).count() <= 1;
+					}else{
 						tempo = computeTempoWithFrequency(chunkAnalysisList, lastChunkAnalysis);
 					}
 				}
@@ -461,10 +461,22 @@ public class UserChannelContext {
 		double playDurationTime = 0;
 		
 		if (subjectId == 23) {
-			if (!noteAnalysis.isTempo()) {
-				noteAnalysis.setMusicalErrorType(NoteErrorType.CADENCE_WRONG);
-			} else {
-				noteAnalysis.setMusicalErrorType(NoteErrorType.RIGHT);
+			if (noteAnalysis.getFrequency() == -1) {// 休止符
+				if (!noteAnalysis.isTempo()) {
+					noteAnalysis.setMusicalErrorType(NoteErrorType.CADENCE_WRONG);
+				} else {
+					noteAnalysis.setMusicalErrorType(NoteErrorType.RIGHT);
+				}
+			}else{
+				int beatTimes = (int) chunkAnalysisList.stream().filter(t -> t.getAmplitude() > hardLevel.getAmplitudeThreshold()).count();
+				
+				if(beatTimes == 0){
+					noteAnalysis.setMusicalErrorType(NoteErrorType.NOT_PLAY);
+				}else if (!noteAnalysis.isTempo()) {
+					noteAnalysis.setMusicalErrorType(NoteErrorType.CADENCE_WRONG);
+				} else {
+					noteAnalysis.setMusicalErrorType(NoteErrorType.RIGHT);
+				}
 			}
 		} else {
 			if (noteAnalysis.getFrequency() == -1) {// 休止符
@@ -502,7 +514,7 @@ public class UserChannelContext {
 		int tempoScore = 0;
 		int integrityScore = 0;
 		int intonationScore = 100 - new BigDecimal(Math.abs(YINPitchDetector.hertzToAbsoluteCent(noteAnalysis.getPlayFrequency())
-				- YINPitchDetector.hertzToAbsoluteCent(noteAnalysis.getFrequency()))).multiply(new BigDecimal(10)).divide(new BigDecimal(17), 2)
+				- YINPitchDetector.hertzToAbsoluteCent(noteAnalysis.getFrequency()))).multiply(new BigDecimal(10)).divide(new BigDecimal(17), BigDecimal.ROUND_UP)
 				.setScale(0, BigDecimal.ROUND_UP).intValue();
 		if (intonationScore < 0) {
 			intonationScore = 0;

+ 3 - 1
audio-analysis/src/main/java/com/yonge/netty/server/NettyServer.java

@@ -23,6 +23,7 @@ import javax.annotation.PreDestroy;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Configuration;
 
 import com.yonge.netty.server.handler.NettyServerHandler;
@@ -42,7 +43,8 @@ public class NettyServer {
 	/**
 	 * 端口号
 	 */
-	private int port = 8080;
+	@Value("${netty.server.port}")
+	private int port;
 
 	/**
 	 * webSocket路径

+ 1 - 3
audio-analysis/src/main/java/com/yonge/netty/server/handler/message/BinaryWebSocketFrameHandler.java

@@ -80,7 +80,7 @@ public class BinaryWebSocketFrameHandler extends SimpleChannelInboundHandler<Bin
 
 	private AudioFloatConverter converter = AudioFloatConverter.getConverter(audioFormat);
 
-	private String tmpFileDir = "e:/soundRecords/";
+	private String tmpFileDir = "/mdata/soundCompare/";
 	
 	private SimpleDateFormat sdf =new SimpleDateFormat("yyMMddHHmmSS");
 	
@@ -98,8 +98,6 @@ public class BinaryWebSocketFrameHandler extends SimpleChannelInboundHandler<Bin
 			
 			String action = channel.attr(ChannelContextConstants.CHANNEL_ATTR_KEY_ACTION).get();
 			
-			LOGGER.info("---------ACTION:{}---------",action);
-			
 			if(handlerMap == null){
 				LOGGER.error("消息处理器没有初始化");
 			}

+ 1 - 1
audio-analysis/src/main/java/com/yonge/netty/server/handler/message/TextWebSocketHandler.java

@@ -167,7 +167,7 @@ public class TextWebSocketHandler extends SimpleChannelInboundHandler<TextWebSoc
 			            String url = null;
 			            try {
 			                String folder = UploadUtil.getFileFloder();
-			                url = storagePluginContext.asyncUploadFile(KS3StoragePlugin.PLUGIN_NAME,"soundCompare/" + folder, waveFileProcessor.getFile());
+			                url = storagePluginContext.asyncUploadFile(KS3StoragePlugin.PLUGIN_NAME,"soundCompare/" + folder, waveFileProcessor.getFile(), true);
 			            } catch (Exception e) {
 			                LOGGER.error("录音文件上传失败:{}", e);
 			            }

+ 4 - 0
audio-analysis/src/main/resources/application.yml → audio-analysis/src/main/resources/application-template.yml

@@ -12,6 +12,10 @@ server:
       request-attributes-enabled: false
       rotate: true
       suffix: .log
+      
+netty:
+  server:
+    port: 8090
 
 eureka:
   client:

+ 16 - 0
audio-analysis/src/main/resources/bootstrap-dev.properties

@@ -0,0 +1,16 @@
+#\u6307\u5b9a\u5f00\u53d1\u73af\u5883
+#spring.profiles.active=dev
+#\u670d\u52a1\u5668\u5730\u5740
+spring.cloud.nacos.config.server-addr=47.114.1.200:8848
+#\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
+spring.cloud.nacos.config.namespace=a5c10b43-0c4d-4e3b-a0ad-9af651cfe89c
+#\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
+spring.cloud.nacos.config.group=DEFAULT_GROUP
+#\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}
+spring.cloud.nacos.config.prefix=audio-analysis
+#\u6307\u5b9a\u6587\u4ef6\u540e\u7f00
+spring.cloud.nacos.config.file-extension=yaml
+#\u662f\u5426\u52a8\u6001\u5237\u65b0
+spring.cloud.nacos.config.refresh.enabled=true
+#\u662f\u5426\u542f\u7528nacos\u914d\u7f6e\u4e2d\u5fc3
+spring.cloud.nacos.config.enabled=true

+ 16 - 0
audio-analysis/src/main/resources/bootstrap-prod.properties

@@ -0,0 +1,16 @@
+#\u6307\u5b9a\u5f00\u53d1\u73af\u5883
+#spring.profiles.active=dev
+#\u670d\u52a1\u5668\u5730\u5740
+spring.cloud.nacos.config.server-addr=47.96.80.97:8848
+#\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
+spring.cloud.nacos.config.namespace=f40a7594-4bd0-4bc6-8397-9353c6d2e63a
+#\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
+spring.cloud.nacos.config.group=DEFAULT_GROUP
+#\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}
+spring.cloud.nacos.config.prefix=audio-analysis
+#\u6307\u5b9a\u6587\u4ef6\u540e\u7f00
+spring.cloud.nacos.config.file-extension=yaml
+#\u662f\u5426\u52a8\u6001\u5237\u65b0
+spring.cloud.nacos.config.refresh.enabled=true
+#\u662f\u5426\u542f\u7528nacos\u914d\u7f6e\u4e2d\u5fc3
+spring.cloud.nacos.config.enabled=true

+ 16 - 0
audio-analysis/src/main/resources/bootstrap-test.properties

@@ -0,0 +1,16 @@
+#\u6307\u5b9a\u5f00\u53d1\u73af\u5883
+#spring.profiles.active=dev
+#\u670d\u52a1\u5668\u5730\u5740
+spring.cloud.nacos.config.server-addr=47.114.1.200:8848
+#\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
+spring.cloud.nacos.config.namespace=46f06363-b9d6-46f0-9cd7-7b33dcf26bb0
+#\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
+spring.cloud.nacos.config.group=DEFAULT_GROUP
+#\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}
+spring.cloud.nacos.config.prefix=audio-analysis
+#\u6307\u5b9a\u6587\u4ef6\u540e\u7f00
+spring.cloud.nacos.config.file-extension=yaml
+#\u662f\u5426\u52a8\u6001\u5237\u65b0
+spring.cloud.nacos.config.refresh.enabled=true
+#\u662f\u5426\u542f\u7528nacos\u914d\u7f6e\u4e2d\u5fc3
+spring.cloud.nacos.config.enabled=true

+ 2 - 1
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/StoragePlugin.java

@@ -19,9 +19,10 @@ public interface StoragePlugin {
 	 * 上传文件
 	 * @param folderName 文件夹
 	 * @param file 需要上传的文件
+	 * @param delLocalFile 删除本地文件
 	 * @return 返回文件路径
 	 */
-	String asyncUploadFile(String folderName, File file);
+	String asyncUploadFile(String folderName, File file, boolean delLocalFile);
 
 	/**
 	 * 下载文件

+ 2 - 2
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/StoragePluginContext.java

@@ -25,9 +25,9 @@ public class StoragePluginContext {
 		return StoragePlugin.uploadFile(folderName, file);
 	}
 	
-	public String asyncUploadFile(String storagePluginName, String folderName, File file){
+	public String asyncUploadFile(String storagePluginName, String folderName, File file, boolean delLocalFile){
 		StoragePlugin StoragePlugin = getStoragePlugin(storagePluginName);
-		return StoragePlugin.asyncUploadFile(folderName, file);
+		return StoragePlugin.asyncUploadFile(folderName, file, delLocalFile);
 	}
 
 	private StoragePlugin getStoragePlugin(String storagePluginName) {

+ 5 - 1
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/provider/AliyunOssStoragePlugin.java

@@ -3,6 +3,7 @@ package com.ym.mec.thirdparty.storage.provider;
 import java.io.File;
 import java.io.IOException;
 
+import org.apache.commons.io.FileUtils;
 import org.apache.poi.util.IOUtils;
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.InitializingBean;
@@ -80,7 +81,7 @@ public class AliyunOssStoragePlugin implements StoragePlugin, InitializingBean,
 	}
 
 	@Override
-	public String asyncUploadFile(String folderName, File file) {
+	public String asyncUploadFile(String folderName, File file, boolean delLocalFile) {
 		if (!file.exists()) {
 			throw new ThirdpartyException("需要上传的文件[{}]不存在", file.getAbsolutePath());
 		}
@@ -96,6 +97,9 @@ public class AliyunOssStoragePlugin implements StoragePlugin, InitializingBean,
 			@Override
 			public void run() {
 				ossClient.putObject(bucketName, dir + "/" + file.getName(), file);
+				if(delLocalFile){
+					FileUtils.deleteQuietly(file);
+				}
 			}
 		});
 		thread.start();

+ 5 - 1
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/provider/KS3StoragePlugin.java

@@ -3,6 +3,7 @@ package com.ym.mec.thirdparty.storage.provider;
 import java.io.File;
 import java.io.IOException;
 
+import org.apache.commons.io.FileUtils;
 import org.apache.poi.util.IOUtils;
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.InitializingBean;
@@ -93,7 +94,7 @@ public class KS3StoragePlugin implements StoragePlugin, InitializingBean, Dispos
 	}
 
 	@Override
-	public String asyncUploadFile(String folderName, File file) {
+	public String asyncUploadFile(String folderName, File file, boolean delLocalFile) {
 		if (!file.exists()) {
 			throw new ThirdpartyException("需要上传的文件[{}]不存在", file.getAbsolutePath());
 		}
@@ -112,6 +113,9 @@ public class KS3StoragePlugin implements StoragePlugin, InitializingBean, Dispos
 			@Override
 			public void run() {
 				client.putObject(request);
+				if(delLocalFile){
+					FileUtils.deleteQuietly(file);
+				}
 			}
 		});
 		thread.start();