Java语言实现Liunx系统文本转语音

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();
    }



程序员之家

程序员之家
请先登录后发表评论
  • 最新评论
  • 总共0条评论