ws 3 gadi atpakaļ
vecāks
revīzija
9b1c716272

+ 1 - 1
baidu-aip/src/main/java/com/jd/controller/AwakenController.java

@@ -19,7 +19,7 @@ import cn.hutool.json.JSONObject;
 @RestController
 @RequestMapping("/awaken")
 public class AwakenController {
-
+	
 	@RequestMapping("/awaken")
 	public void awaken(String data) throws JSONException, IOException {
 		if ("success".equals(data)) {

+ 10 - 0
spring-cloud/server-imcp-api/target/classes/META-INF/MANIFEST.MF

@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Built-By: 王帅
+Build-Jdk: 17.0.1
+Implementation-Title: server-imcp-api
+Implementation-Version: 1.0.0
+Implementation-Vendor-Id: com.jd
+Implementation-URL: https://projects.spring.io/spring-boot/#/spring-boot
+ -starter-parent/cgj-dt2-parent/server-imcp-api
+Created-By: Maven Integration for Eclipse
+

+ 7 - 0
spring-cloud/server-imcp-api/target/classes/META-INF/maven/com.jd/server-imcp-api/pom.properties

@@ -0,0 +1,7 @@
+#Generated by Maven Integration for Eclipse
+#Mon Apr 25 09:06:53 CST 2022
+m2e.projectLocation=D\:\\workspace-wangshuai\\workspace-html\\dt2\\spring-cloud\\server-imcp-api
+m2e.projectName=server-imcp-api
+groupId=com.jd
+artifactId=server-imcp-api
+version=1.0.0

+ 106 - 0
spring-cloud/server-imcp-api/target/classes/META-INF/maven/com.jd/server-imcp-api/pom.xml

@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>com.jd.dt2</groupId>
+		<artifactId>cgj-dt2-parent</artifactId>
+		<version>0.0.1</version>
+	</parent>
+	<groupId>com.jd</groupId>
+	<artifactId>server-imcp-api</artifactId>
+	<version>1.0.0</version>
+	<name>server-imcp-api</name>
+	<description>档案室动环接口</description>
+	<properties>
+		<java.version>1.8</java.version>
+	</properties>
+	<dependencies>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-web</artifactId>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.springframework.cloud</groupId>
+			<artifactId>spring-cloud-starter-openfeign</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>mysql</groupId>
+			<artifactId>mysql-connector-java</artifactId>
+		</dependency>
+
+		<!--<dependency>
+			<groupId>org.mybatis.spring.boot</groupId>
+			<artifactId>mybatis-spring-boot-starter</artifactId>
+			<version>${mybatis-spring-boot-starter}</version>
+		</dependency>-->
+
+		<!-- Mybatis-Plus依赖 -->
+		<dependency>
+			<groupId>com.baomidou</groupId>
+			<artifactId>mybatis-plus-boot-starter</artifactId>
+			<version>3.4.2</version>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.springframework.cloud</groupId>
+			<artifactId>spring-cloud-starter-oauth2</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-redis</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-pool2</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.cloud</groupId>
+			<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.springframework.boot</groupId>
+				<artifactId>spring-boot-maven-plugin</artifactId>
+			</plugin>
+			<!-- <plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-jar-plugin</artifactId>
+				<configuration>
+					<archive>
+						<manifest>
+							<addClasspath>true</addClasspath>
+							<classpathPrefix>lib/</classpathPrefix>
+							<mainClass>com.jd.ServerBasicApplication</mainClass>
+						</manifest>
+					</archive>
+				</configuration>
+			</plugin> -->
+			<!-- 添加配置跳过测试 -->
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<configuration>
+					<skipTests>true</skipTests>
+				</configuration>
+			</plugin>
+		</plugins>
+		<resources>
+			<resource>
+				<directory>src/main/resources</directory>
+				<!-- <excludes>
+					<exclude>**/**</exclude>
+				</excludes> -->
+			</resource>
+		</resources>
+	</build>
+
+</project>

BIN
xfyun-api/lib/libmsc32.so


BIN
xfyun-api/lib/libmsc64.so


BIN
xfyun-api/lib/msc32.dll


BIN
xfyun-api/lib/msc64.dll


BIN
xfyun-api/libmsc32.so


BIN
xfyun-api/libmsc64.so


+ 1 - 0
xfyun-api/msc/08074aa6887ab9652c80933dc2b843ff/u.data

@@ -0,0 +1 @@
+d17438455018

BIN
xfyun-api/msc/08074aa6887ab9652c80933dc2b843ff/urec.data


BIN
xfyun-api/msc32.dll


BIN
xfyun-api/msc64.dll


+ 12 - 0
xfyun-api/pom.xml

@@ -95,6 +95,18 @@
 		    <artifactId>Java-WebSocket</artifactId>
 		    <version>1.3.4</version>
 		</dependency> 
+		<dependency>
+		    <groupId>jd.com.xfyun</groupId>
+		    <artifactId>msc-java-sdk</artifactId>
+		    <version>1.0</version>
+		</dependency> 
+		<!-- https://mvnrepository.com/artifact/com.hp.hpl.jena/json-jena -->
+		<dependency>
+		    <groupId>com.hp.hpl.jena</groupId>
+		    <artifactId>json-jena</artifactId>
+		    <version>1.0</version>
+		</dependency>
+		
 	</dependencies>
 
 	<build>

+ 38 - 0
xfyun-api/src/main/java/com/jd/controller/AwakenController.java

@@ -1,12 +1,18 @@
 package com.jd.controller;
 
 import java.io.IOException;
+import java.util.HashMap;
 import java.util.Map;
 
 import javax.websocket.Session;
 
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.jd.util.IatTool;
+import com.jd.util.TtsTool;
 
 import cn.hutool.json.JSONException;
 import cn.hutool.json.JSONObject;
@@ -19,6 +25,12 @@ import cn.hutool.json.JSONObject;
 @RestController
 @RequestMapping("/awaken")
 public class AwakenController {
+	
+	@Value("${xfyun.tts.appid}")
+	private String appid;
+	
+	@Value("${web.uploadfile}")
+	private String filePath;
 
 	@RequestMapping("/awaken")
 	public void awaken(String data) throws JSONException, IOException {
@@ -34,4 +46,30 @@ public class AwakenController {
 			}
 		}
 	}
+	
+	/**
+	 * 语音识别
+	 * @param file
+	 * @return
+	 */
+	@RequestMapping("/asr")
+	public Map<String, Object> speech(MultipartFile file) {
+		IatTool iatTool = new IatTool(appid);
+		Map<String, Object> map = new HashMap<>();
+		map.put("data", iatTool.RecognizePcmfileByte(file));
+		return map;
+	}
+	
+	/**
+	 * 语音合成
+	 * @param txt
+	 * @return
+	 */
+	@RequestMapping("/tts")
+	public Map<String, Object> tts(String txt) {
+		TtsTool ttsTool = new TtsTool(appid, filePath);
+		Map<String, Object> map = new HashMap<>();
+		map.put("data", ttsTool.textToVoice(txt, null));
+		return map;
+	}
 }

+ 106 - 0
xfyun-api/src/main/java/com/jd/util/IatTool.java

@@ -0,0 +1,106 @@
+package com.jd.util;
+
+import com.iflytek.cloud.speech.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.multipart.MultipartFile;
+ 
+public class IatTool {
+ 
+    private static Logger LOGGER = LoggerFactory.getLogger(IatTool.class);
+ 
+    private StringBuilder curRet;
+ 
+    private SpeechRecognizer recognizer;
+ 
+    private Object lock = new Object();
+ 
+    public IatTool(String appId){
+        LOGGER.info("------Speech Utility init iat------");
+        SpeechUtility.createUtility(SpeechConstant.APPID + "=" + appId);
+    }
+ 
+    public String RecognizePcmfileByte(MultipartFile audioFile) {
+ 
+        curRet = new StringBuilder();
+ 
+        try {
+            if (recognizer == null) {
+                recognizer = SpeechRecognizer.createRecognizer();
+                recognizer.setParameter(SpeechConstant.AUDIO_SOURCE, "-1");
+                recognizer.setParameter( SpeechConstant.RESULT_TYPE, "plain" );
+            }
+ 
+            recognizer.startListening(recListener);
+ 
+            byte[] buffer = audioFile.getBytes();
+            if (buffer == null || buffer.length == 0) {
+                LOGGER.error("no audio avaible!");
+                recognizer.cancel();
+            } else {
+ 
+                int lenRead = buffer.length;
+                recognizer.writeAudio( buffer, 0, lenRead );
+                recognizer.stopListening();
+                synchronized (lock) {
+                    lock.wait();//主线程等待
+                }
+ 
+                return curRet.toString();
+            }
+ 
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+ 
+    private RecognizerListener recListener = new RecognizerListener() {
+        @Override
+        public void onBeginOfSpeech() {
+            LOGGER.info( "onBeginOfSpeech enter" );
+        }
+        @Override
+        public void onEndOfSpeech() {
+            LOGGER.info( "onEndOfSpeech enter" );
+        }
+        /**
+         * 获取听写结果
+         */
+        @Override
+        public void onResult(RecognizerResult results, boolean islast) {
+            LOGGER.info( "onResult enter" );
+ 
+            String text = results.getResultString();
+            curRet.append(text);
+ 
+            if( islast ) {
+                synchronized (lock) {
+                    lock.notify();//子线程唤醒
+                }
+            }
+        }
+        @Override
+        public void onVolumeChanged(int volume) {
+            LOGGER.info( "onVolumeChanged volume=" + volume);
+        }
+ 
+        @Override
+        public void onError(SpeechError error) {
+            LOGGER.error( "onError enter" );
+            if (null != error) {
+                LOGGER.error("onError Code:" + error.getErrorCode() + "," + error.getErrorDescription(true));
+            }
+        }
+        @Override
+        public void onEvent(int eventType, int arg1, int agr2, String msg) {
+            LOGGER.info( "onEvent enter" );
+            //以下代码用于调试,如果出现问题可以将sid提供给讯飞开发者,用于问题定位排查
+			/*if(eventType == SpeechEvent.EVENT_SESSION_ID) {
+				DebugLog.Log("sid=="+msg);
+			}*/
+        }
+    };
+ 
+    
+}

+ 97 - 0
xfyun-api/src/main/java/com/jd/util/TtsTool.java

@@ -0,0 +1,97 @@
+package com.jd.util;
+
+import com.iflytek.cloud.speech.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.util.UUID;
+
+//tts文本转音频Pcm格式
+public class TtsTool {
+
+    private static Logger LOGGER = LoggerFactory.getLogger(TtsTool.class);
+
+    private Object lock = new Object();
+
+    // 语音合成对象
+    private SpeechSynthesizer mTts;
+
+    private String ttsPcmDir;
+
+
+    public TtsTool(String appId, String ttsPcmDir) {
+        LOGGER.info("------Speech Utility init tts------");
+         this.ttsPcmDir = ttsPcmDir;
+        SpeechUtility.createUtility(SpeechConstant.APPID + "=" + appId);
+        // 初始化合成对象
+        mTts = SpeechSynthesizer.createSynthesizer();
+        if (mTts != null) {
+            // 设置发音人
+            mTts.setParameter(SpeechConstant.VOICE_NAME, "aisjinger");
+            mTts.setParameter(SpeechConstant.SPEED, "150");//设置语速
+            mTts.setParameter(SpeechConstant.VOLUME, "80");//设置音量,范围0~100
+        } else {
+            LOGGER.error("tts handler init fail");
+        }
+    }
+
+    public String textToVoice(String text,String fileName) {
+        try {
+            String pcmPath;
+            String path;
+            if (null != fileName){
+            	path = fileName + ".pcm";
+                pcmPath = ttsPcmDir + File.separator + path;
+            }else{
+            	path = UUID.randomUUID() + ".pcm";
+            	pcmPath = ttsPcmDir + File.separator + path;
+            }
+
+            // 设置合成音频保存位置(可自定义保存位置),默认不保存
+            mTts.synthesizeToUri(text, pcmPath, mSynListener);
+            synchronized (lock) {
+                lock.wait();
+            }
+
+            return path;
+        } catch (Exception e) {
+            LOGGER.error("textToVoice get exception:" + e.getMessage());
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 合成监听器
+     */
+    SynthesizeToUriListener mSynListener = new SynthesizeToUriListener() {
+
+        public void onBufferProgress(int progress) {
+            LOGGER.info("*************合成进度*************" + progress);
+
+        }
+
+        public void onSynthesizeCompleted(String uri, SpeechError error) {
+            if (error == null) {
+                LOGGER.info("*************合成成功*************");
+                LOGGER.info("合成音频生成路径:" + uri);
+            } else {
+                LOGGER.info("******合成失败*******" + error.getErrorCode()
+                        + "*************");
+            }
+            synchronized (lock) {
+                LOGGER.info("通知合成成功");
+                lock.notify();
+            }
+
+        }
+
+
+        @Override
+        public void onEvent(int eventType, int arg1, int arg2, int arg3, Object obj1, Object obj2) {}
+
+    };
+}
+
+

+ 1 - 1
xfyun-api/src/main/resources/application.yml

@@ -20,7 +20,7 @@ logging:
 xfyun:
   # 语音合成
   tts:
-    appid: ea5de20d
+    appid: 5c20ae83
     apisecret: NjYzMWFlYmYyNTk2YTJjMmIyMTFjMzk1
     apikey: 13b432cb7ad27c648ddf911d60df8ffb
     apiurl: https://tts-api.xfyun.cn/v2/tts