diff --git a/src/main/java/club/joylink/rtss/services/voice/baidu/VoiceServiceImpl.java b/src/main/java/club/joylink/rtss/services/voice/baidu/BaiduVoiceServiceImpl.java similarity index 91% rename from src/main/java/club/joylink/rtss/services/voice/baidu/VoiceServiceImpl.java rename to src/main/java/club/joylink/rtss/services/voice/baidu/BaiduVoiceServiceImpl.java index ff6f30577..a4d6514b7 100644 --- a/src/main/java/club/joylink/rtss/services/voice/baidu/VoiceServiceImpl.java +++ b/src/main/java/club/joylink/rtss/services/voice/baidu/BaiduVoiceServiceImpl.java @@ -6,7 +6,6 @@ import club.joylink.rtss.vo.client.VoiceRecognitionResult; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.web.client.RestTemplate; import org.springframework.web.multipart.MultipartFile; import java.io.ByteArrayInputStream; @@ -15,7 +14,7 @@ import java.io.InputStream; @Slf4j @Service("baiDuVoiceService") -public class VoiceServiceImpl implements IVoiceService { +public class BaiduVoiceServiceImpl implements IVoiceService { @Autowired private AsrService asrService; @@ -23,9 +22,6 @@ public class VoiceServiceImpl implements IVoiceService { @Autowired private TtsService ttsService; - @Autowired - private RestTemplate restTemplate; - @Override public VoiceRecognitionResult voiceRecognition(MultipartFile multipartFile, String lang) { try { diff --git a/src/main/java/club/joylink/rtss/services/voice/huawei/HuaweiVoiceServiceImpl.java b/src/main/java/club/joylink/rtss/services/voice/huawei/HuaweiVoiceServiceImpl.java new file mode 100644 index 000000000..474040009 --- /dev/null +++ b/src/main/java/club/joylink/rtss/services/voice/huawei/HuaweiVoiceServiceImpl.java @@ -0,0 +1,73 @@ +package club.joylink.rtss.services.voice.huawei; + +import club.joylink.rtss.exception.BusinessExceptionAssertEnum; +import club.joylink.rtss.services.IVoiceService; +import club.joylink.rtss.services.voice.baidu.AsrService; +import club.joylink.rtss.services.voice.baidu.TokenHolder; +import club.joylink.rtss.services.voice.baidu.TtsService; +import club.joylink.rtss.services.voice.baidu.VoiceAsrResult; +import club.joylink.rtss.vo.client.VoiceRecognitionResult; +import com.huawei.sis.bean.AuthInfo; +import com.huawei.sis.bean.SisConfig; +import com.huawei.sis.bean.request.AsrCustomShortRequest; +import com.huawei.sis.bean.response.AsrCustomShortResponse; +import com.huawei.sis.client.AsrCustomizationClient; +import com.huawei.sis.exception.SisException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.multipart.MultipartFile; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Base64; + +@Slf4j +@Service("HuaweiVoiceService") +public class HuaweiVoiceServiceImpl implements IVoiceService { + + /** + * 华为语音识别配置 + */ + private final String ak = "YDUXTXRYGAHGPHAIXZCU"; + private final String sk = "Kcbm3sTDCYEou8kGeAhKxfBkgWybIn6IjJyGBX3p"; + private final String region = "cn-north-4"; + private final String projectId = "0aada8176180f28c2f34c0196f5394e8"; + + @Autowired + private RestTemplate restTemplate; + + @Override + public String synthesis(String message, String per) { + throw BusinessExceptionAssertEnum.THIRD_SERVICE_CALL_EXCEPTION.exception("功能暂未实现"); + } + + @Override + public VoiceRecognitionResult voiceRecognition(MultipartFile file, String lang) { + String filePath; + try { + filePath = IVoiceService.handleAndSaveFile(file); + } catch (IOException e) { + throw BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.exception("语音文件上传失败", e); + } + AuthInfo authInfo = new AuthInfo(ak, sk, region, projectId); + SisConfig sisConfig = new SisConfig(); + AsrCustomizationClient client = new AsrCustomizationClient(authInfo, sisConfig); + String data; + try { + data = Base64.getEncoder().encodeToString(file.getBytes()); + } catch (IOException e) { + throw BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.exception("语音文件编码失败", e); + } + try { + AsrCustomShortRequest request = new AsrCustomShortRequest(data, "pcm16k16bit", "chinese_16k_common"); + AsrCustomShortResponse response = client.getAsrShortResponse(request); + return new VoiceRecognitionResult(filePath, response.getResult().getText()); + } catch (SisException e) { + throw BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.exception("语音识别失败", e); + } + } + +}