V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
jimisun
V2EX  ›  Java

简易的 Java tts 方案推荐

  •  
  •   jimisun · Jul 15, 2024 · 3578 views
    This topic created in 657 days ago, the information mentioned may be changed or developed.

    最近 tts 挺火 我遇到一个应用需求场景 请见多识广的前辈解惑

    ——————————————————————

    需求描述

    一个本地的 java demo 程序 想实现调用接口发送文本后播放语音。 语音生成要快(一般就行不能太慢) 功能不必很轻大(不必类似现在比较火的 chattts )

    我的方案

    引入网上都使用这个 jar

           <dependency>
                <groupId>com.hynnet</groupId>
                <artifactId>jacob</artifactId>
                <version>1.18</version>
            </dependency>
    
     java 代码这样调用
    
            ActiveXComponent activeXComponent = null;
           try {
    //												jacob 封装好的可供选择的 API
               activeXComponent = new ActiveXComponent("Sapi.SpVoice");
    //			运行时输出语音内容
               Dispatch dispatch = activeXComponent.getObject();
    //			设置音量
               activeXComponent.setProperty("Volume", new Variant(100));
    //			语音的朗读速度-10 到 +10
               activeXComponent.setProperty("Rate", new Variant(1));
    
    //			调用执行朗读
               Dispatch.call(dispatch, "Speak", new Variant(text));
    

    遇到问题

    查阅资料不知道怎么更换 朗读人 微软本地 我看可以更换。但是代码一直是默认的

    pk5LoF0.png

    求助

    1. 如何使用微软 tts 方案更换朗读人
    2. 有无开源的可本地化的 tts 项目 轻量化 功能不必强大 可被 java 项目调用
    3 replies    2024-07-16 08:33:41 +08:00
    COOOOOOde
        1
    COOOOOOde  
       Jul 15, 2024
    刚好昨天写了个简单 demo, 微软的 API 用 http 请求就能很方便地调用了呀, (随便写的一个, 很多参数都没有调成动态的)
    ```js
    export function azureSpeak(content) {
    const config = {
    gender: 'Female',
    // speaker: 'ChristopherNeural',
    //'Microsoft Server Speech Text to Speech Voice (zh-CN, YunxiNeural)',
    speaker: 'zh-CN-XiaoxiaoMultilingualNeural',
    content: content
    }
    return fetch("https://southeastasia.tts.speech.microsoft.com/cognitiveservices/v1", {
    method: "POST",
    headers: {
    "Ocp-Apim-Subscription-Key": "XXXXXX",
    "Content-Type": "application/ssml+xml",
    "X-Microsoft-OutputFormat": "audio-16khz-128kbitrate-mono-mp3",
    },
    body: `<speak version='1.0' xml:lang='en-US'>` +
    `<voice xml:lang='en-US' xml:gender='${config.gender}' scenario='Podcast' name='${config.speaker}'>${config.content}`
    + `</voice></speak>`
    })
    .then(response => response.blob())
    .then(blob => {
    return window.URL.createObjectURL(blob)
    })
    .catch(error => {
    console.error("Error:", error);
    });
    }
    ```
    COOOOOOde
        2
    COOOOOOde  
       Jul 15, 2024
    @COOOOOOde #1 抱歉, 没注意到关键词`本地` , 无视我的回复吧
    jimisun
        3
    jimisun  
    OP
       Jul 16, 2024
    @COOOOOOde 谢谢 因为本身就不要 tts 的音质很高 经过网络传输会很慢 这是其 1 第二是有额外的成本
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2552 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 410ms · UTC 08:51 · PVG 16:51 · LAX 01:51 · JFK 04:51
    ♥ Do have faith in what you're doing.