Compare commits
3 Commits
Author | SHA1 | Date |
---|---|---|
zhc077 | ca5794eac0 | 1 year ago |
吱屋 | bd719044b3 | 1 year ago |
zhc077 | b66b84e45c | 2 years ago |
8 changed files with 281 additions and 29 deletions
@ -0,0 +1,145 @@ |
||||
package org.jeecg.modules.cms.spack; |
||||
|
||||
import com.jacob.activeX.ActiveXComponent; |
||||
import com.jacob.com.Dispatch; |
||||
import com.jacob.com.Variant; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.jeecg.common.api.vo.Result; |
||||
import org.springframework.web.bind.annotation.GetMapping; |
||||
import org.springframework.web.bind.annotation.RequestMapping; |
||||
import org.springframework.web.bind.annotation.RequestParam; |
||||
import org.springframework.web.bind.annotation.RestController; |
||||
|
||||
/** |
||||
* @ClassName -> JacobTest |
||||
* @Description |
||||
* @Author 龙岭 |
||||
* @Date 2021-01-08 11:44 |
||||
* @Version 1.0 |
||||
* @MONTH 01 |
||||
*/ |
||||
@Api(tags = "文本转语言-语音合成") |
||||
@RestController |
||||
@RequestMapping("/tts") |
||||
@Slf4j |
||||
public class JacobSpeakController { |
||||
|
||||
|
||||
@ApiOperation(value = "语音合成", notes = "语音合成") |
||||
@GetMapping(value = "/speak") |
||||
public Result speak(@RequestParam(name = "text") String text) { |
||||
ActiveXComponent ax = null; |
||||
try { |
||||
ax = new ActiveXComponent("Sapi.SpVoice"); |
||||
|
||||
// 运行时输出语音内容
|
||||
Dispatch spVoice = ax.getObject(); |
||||
// 音量 0-100
|
||||
ax.setProperty("Volume", new Variant(100)); |
||||
// 语音朗读速度 -10 到 +10
|
||||
ax.setProperty("Rate", new Variant(-2)); |
||||
// 执行朗读
|
||||
Dispatch.call(spVoice, "Speak", new Variant(text)); |
||||
|
||||
// 下面是构建文件流把生成语音文件
|
||||
|
||||
ax = new ActiveXComponent("Sapi.SpFileStream"); |
||||
Dispatch spFileStream = ax.getObject(); |
||||
|
||||
ax = new ActiveXComponent("Sapi.SpAudioFormat"); |
||||
Dispatch spAudioFormat = ax.getObject(); |
||||
|
||||
// 设置音频流格式
|
||||
Dispatch.put(spAudioFormat, "Type", new Variant(22)); |
||||
// 设置文件输出流格式
|
||||
Dispatch.putRef(spFileStream, "Format", spAudioFormat); |
||||
// 调用输出 文件流打开方法,创建一个.wav文件
|
||||
Dispatch.call(spFileStream, "Open", new Variant("./text.wav"), new Variant(3), new Variant(true)); |
||||
// 设置声音对象的音频输出流为输出文件对象
|
||||
Dispatch.putRef(spVoice, "AudioOutputStream", spFileStream); |
||||
// 设置音量 0到100
|
||||
Dispatch.put(spVoice, "Volume", new Variant(100)); |
||||
// 设置朗读速度
|
||||
Dispatch.put(spVoice, "Rate", new Variant(-2)); |
||||
// 开始朗读
|
||||
Dispatch.call(spVoice, "Speak", new Variant(text)); |
||||
|
||||
// 关闭输出文件
|
||||
Dispatch.call(spFileStream, "Close"); |
||||
Dispatch.putRef(spVoice, "AudioOutputStream", null); |
||||
|
||||
spAudioFormat.safeRelease(); |
||||
spFileStream.safeRelease(); |
||||
spVoice.safeRelease(); |
||||
ax.safeRelease(); |
||||
|
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
return Result.OK(); |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 语音转文字并播放 |
||||
* |
||||
* @param text |
||||
*/ |
||||
public static void textToSpeech(String text) { |
||||
ActiveXComponent ax = null; |
||||
try { |
||||
ax = new ActiveXComponent("Sapi.SpVoice"); |
||||
|
||||
// 运行时输出语音内容
|
||||
Dispatch spVoice = ax.getObject(); |
||||
// 音量 0-100
|
||||
ax.setProperty("Volume", new Variant(100)); |
||||
// 语音朗读速度 -10 到 +10
|
||||
ax.setProperty("Rate", new Variant(-2)); |
||||
// 执行朗读
|
||||
Dispatch.call(spVoice, "Speak", new Variant(text)); |
||||
|
||||
// 下面是构建文件流把生成语音文件
|
||||
|
||||
ax = new ActiveXComponent("Sapi.SpFileStream"); |
||||
Dispatch spFileStream = ax.getObject(); |
||||
|
||||
ax = new ActiveXComponent("Sapi.SpAudioFormat"); |
||||
Dispatch spAudioFormat = ax.getObject(); |
||||
|
||||
// 设置音频流格式
|
||||
Dispatch.put(spAudioFormat, "Type", new Variant(22)); |
||||
// 设置文件输出流格式
|
||||
Dispatch.putRef(spFileStream, "Format", spAudioFormat); |
||||
// 调用输出 文件流打开方法,创建一个.wav文件
|
||||
Dispatch.call(spFileStream, "Open", new Variant("./text.wav"), new Variant(3), new Variant(true)); |
||||
// 设置声音对象的音频输出流为输出文件对象
|
||||
Dispatch.putRef(spVoice, "AudioOutputStream", spFileStream); |
||||
// 设置音量 0到100
|
||||
Dispatch.put(spVoice, "Volume", new Variant(100)); |
||||
// 设置朗读速度
|
||||
Dispatch.put(spVoice, "Rate", new Variant(-2)); |
||||
// 开始朗读
|
||||
Dispatch.call(spVoice, "Speak", new Variant(text)); |
||||
|
||||
// 关闭输出文件
|
||||
Dispatch.call(spFileStream, "Close"); |
||||
Dispatch.putRef(spVoice, "AudioOutputStream", null); |
||||
|
||||
spAudioFormat.safeRelease(); |
||||
spFileStream.safeRelease(); |
||||
spVoice.safeRelease(); |
||||
ax.safeRelease(); |
||||
|
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
|
||||
public static void main(String[] args) { |
||||
textToSpeech("测试语音测试语音测试语音"); |
||||
} |
||||
|
||||
} |
Binary file not shown.
@ -0,0 +1,24 @@ |
||||
{ |
||||
"name": "jeecg-boot", |
||||
"lockfileVersion": 2, |
||||
"requires": true, |
||||
"packages": { |
||||
"": { |
||||
"dependencies": { |
||||
"speak-tts": "^2.0.8" |
||||
} |
||||
}, |
||||
"node_modules/speak-tts": { |
||||
"version": "2.0.8", |
||||
"resolved": "https://registry.npmmirror.com/speak-tts/-/speak-tts-2.0.8.tgz", |
||||
"integrity": "sha512-VY6Q6mRjdou6bF+x0LspvM7GJhBxHx8CLyGPTNQQ7jrztiGutyI4QNZn0cA17c4uk0FnFbA4PaMI3skeZ6PiFg==" |
||||
} |
||||
}, |
||||
"dependencies": { |
||||
"speak-tts": { |
||||
"version": "2.0.8", |
||||
"resolved": "https://registry.npmmirror.com/speak-tts/-/speak-tts-2.0.8.tgz", |
||||
"integrity": "sha512-VY6Q6mRjdou6bF+x0LspvM7GJhBxHx8CLyGPTNQQ7jrztiGutyI4QNZn0cA17c4uk0FnFbA4PaMI3skeZ6PiFg==" |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,5 @@ |
||||
{ |
||||
"dependencies": { |
||||
"speak-tts": "^2.0.8" |
||||
} |
||||
} |
Binary file not shown.
Loading…
Reference in new issue