Java语言实现Liunx系统文字转语音,据网上资料有jacob实现的文字转语音但是只能在Windows系统上面运行,可是我们的应用服务是要部署到Liunx上运行的。所以我们不可能要单独搞一台Windows服务器。所以研究了Liunx系统的文字转语音
原理:liunx汉字TTS插件生成mp3语音文件,java读取mp3文件流返回
一共有俩种方案:
第一种:基于ekho(声音好听一些) wget http://downloads.sourceforge.net/e-guidedog/ekho-5.7.tar.xz tar Jxf ekho-5.7.tar.xz cd ekho-5.7 sudo yum install libsndfile* yum install pulseaudio-libs-devel ./configure && make && make install 使用方法:ekho "我是一句话" -v Mandarin -o dd.mp3 第二种:基于espeak yum install espeak git clone cd espeak/dictsource/ espeak --compile=zh espeak "我是一句话" -w dd1.mp3 -v zh
Java代码:
@GetMapping("mp3")
public ResponseEntity<byte[]> getMp3(@RequestParam("text") String text){
String name = "ekho-tmp/"+System.currentTimeMillis()+".mp3";
// String name = "ekho-tmp/1679022924707.mp3";
try {
Process process=Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", "mkdir -p ekho-tmp && ekho \""+text+"\" -v Mandarin -o "+name});
File file = new File(name);
process.waitFor();//为了确保执行完成在执行下面的代码
if (file.exists()){
byte[] bytes = Files.readAllBytes(file.toPath());
Files.delete(file.toPath());
return ResponseEntity.ok()
.contentType(MediaType.parseMediaType("audio/mpeg;charset=UTF-8"))
.header(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Content-Range, Last-Modified")
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + new String(name.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1))
.body(bytes);
}
} catch (IOException | InterruptedException e) {
throw new RuntimeException(e);
}
return ResponseEntity.ok().build();
}
本文为程序员之家原创文章,转载无需和我联系,但请注明来自程序员之家www.baldhome.cn
