国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

微軟(TTS)文本轉(zhuǎn)語(yǔ)音服務(wù)API實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了微軟(TTS)文本轉(zhuǎn)語(yǔ)音服務(wù)API實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

此博客實(shí)現(xiàn)與java實(shí)現(xiàn)微軟文本轉(zhuǎn)語(yǔ)音(TTS)經(jīng)驗(yàn)總結(jié)_java tts_${簡(jiǎn)簡(jiǎn)單單}的博客-CSDN博客之上,首先感謝博客源碼的提供,本人在上面添加了一些詳細(xì)的注釋,方便大家跟好的理解和使用,畢竟我已經(jīng)用原文調(diào)試了一下午才調(diào)通,一些細(xì)節(jié)的問(wèn)題給大家標(biāo)注出來(lái),免得浪費(fèi)大家的時(shí)間,下面直接開(kāi)始代碼吧!

首先大家需要去微軟官網(wǎng)獲取到密鑰,方便調(diào)用時(shí)可以使用,大家注意看下圖,我們一定要注意給我們分配到的區(qū)域,我這里是分配到eastus ,就是east us(美國(guó)東部)的意思,大家一定需要注意一下,后面會(huì)使用到的,然后終結(jié)點(diǎn)里面的地址就是我們獲取token的地址

下面我們準(zhǔn)備幾個(gè)類,方便后面使用,大家把代碼都復(fù)制到自己項(xiàng)目中,不要有遺漏:

package com.daoversal.util;

public class ByteArray {
    private byte[] data;
    private int length;
 
    public ByteArray(){
        length = 0;
        data = new byte[length];
    }
 
    public ByteArray(byte[] ba){
        data = ba;
        length = ba.length;
    }
 
    /**
    合并數(shù)組
     */
    public  void cat(byte[] second, int offset, int length){
 
        if(this.length + length > data.length) {
            int allocatedLength = Math.max(data.length, length);
            byte[] allocated = new byte[allocatedLength << 1];
            System.arraycopy(data, 0, allocated, 0, this.length);
            System.arraycopy(second, offset, allocated, this.length, length);
            data = allocated;
        }else {
            System.arraycopy(second, offset, data, this.length, length);
        }
 
        this.length += length;
    }
 
    public  void cat(byte[] second){
        cat(second, 0, second.length);
    }
 
    public byte[] getArray(){
        if(length == data.length){
            return data;
        }
 
        byte[] ba = new byte[length];
        System.arraycopy(data, 0, ba, 0, this.length);
        data = ba;
        return ba;
    }
 
    public int getLength(){
        return length;
    }
}
package com.daoversal.util;

import javax.net.ssl.HttpsURLConnection;
import java.net.URL;

public class HttpsConnection {
 
    public static HttpsURLConnection getHttpsConnection(String connectingUrl) throws Exception {
 
        URL url = new URL(connectingUrl);
        return (HttpsURLConnection) url.openConnection();
    }
}
package com.daoversal.util;

import lombok.extern.slf4j.Slf4j;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.StringWriter;

@Slf4j
public class XmlDom {
    public static String createDom(String locale, String genderName, String voiceName, String textToSynthesize){
        Document doc = null;
        Element speak, voice;
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = dbf.newDocumentBuilder();
            doc = builder.newDocument();
            if (doc != null){
                speak = doc.createElement("speak");
                speak.setAttribute("version", "1.0");
                speak.setAttribute("xml:lang", "en-US");
                voice = doc.createElement("voice");
                voice.setAttribute("xml:lang", locale);
                voice.setAttribute("xml:gender", genderName);
                voice.setAttribute("name", voiceName);
                voice.appendChild(doc.createTextNode(textToSynthesize));
                speak.appendChild(voice);
                doc.appendChild(speak);
            }
        } catch (ParserConfigurationException e) {
            log.error("Create ssml document failed: {}",e.getMessage());
            return null;
        }
        return transformDom(doc);
    }
 
    private static String transformDom(Document doc){
        StringWriter writer = new StringWriter();
        try {
            TransformerFactory tf = TransformerFactory.newInstance();
            Transformer transformer;
            transformer = tf.newTransformer();
            transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
            transformer.transform(new DOMSource(doc), new StreamResult(writer));
        } catch (TransformerException e) {
            log.error("Transform ssml document failed: {}",e.getMessage());
            return null;
        }
        return writer.getBuffer().toString().replaceAll("\n|\r", "");
    }
}

?下面這個(gè)類我給大家重點(diǎn)講一下,大家去下面網(wǎng)址看看自己的參數(shù)Text to speech API reference (REST) - Speech service - Azure AI services | Microsoft Learn

AUDIO_24KHZ_48KBITRATE_MONO_MP3 :語(yǔ)言類型,這個(gè)不重要,那個(gè)聲音好聽(tīng)用那個(gè),去下圖找:

微軟(TTS)文本轉(zhuǎn)語(yǔ)音服務(wù)API實(shí)現(xiàn),microsoft,開(kāi)發(fā)語(yǔ)言,java

ACCESS_TOKEN_URI :就是本文章的第一張圖里面,里面獲取token的地址,直接將地址復(fù)制進(jìn)來(lái)就好了。

API_KEY :自己的api key,就是密鑰。

?TTS_SERVICE_URI : 這個(gè)地址一定要對(duì)應(yīng)分配的區(qū)域才行,不然會(huì)報(bào)權(quán)限錯(cuò)誤

Synthesis tts speech failed Server returned HTTP response code: 401 for URL: https://.........

我這里是?east us(美國(guó)東部),所以就使用美國(guó)東部里面的地址即可。

微軟(TTS)文本轉(zhuǎn)語(yǔ)音服務(wù)API實(shí)現(xiàn),microsoft,開(kāi)發(fā)語(yǔ)言,java

package com.daoversal.util;

public class TtsConst {
    /**
     * 音頻合成類型(親測(cè)這種效果最佳,其他的你自己去試試)
     * 里面有很多類型,可以去里面找自己需要的
     * https://learn.microsoft.com/en-us/azure/ai-services/speech-service/rest-text-to-speech?tabs=streaming
     */
    public static final String AUDIO_24KHZ_48KBITRATE_MONO_MP3 = "audio-24khz-48kbitrate-mono-mp3";
    /**
     * 授權(quán)url   獲取密鑰頁(yè)面 終結(jié)點(diǎn) 里面的地址,我們使用這個(gè)獲取token
     */
    public static final String ACCESS_TOKEN_URI = "token獲取地址";
    /**
     * api key
     */
    public static final String API_KEY = "自己的密鑰";
    /**
     * tts服務(wù)url,這里一定要根據(jù)自己分配的地區(qū)找相應(yīng)的地址才行
     */
    public static final String TTS_SERVICE_URI = "https://eastus.tts.speech.microsoft.com/cognitiveservices/v1/";


}

下面參數(shù)給大家講一下:

textToSynthesize : 傳入的合成語(yǔ)音文本內(nèi)容

locale:語(yǔ)言類型,大家可以參考,中文在嵌入式語(yǔ)音里面,大家可以在兩個(gè)頁(yè)面找到自己需要的語(yǔ)言。

Embedded Speech - Speech service - Azure AI services | Microsoft Learn

Language support - Speech service - Azure AI services | Microsoft Learn

微軟(TTS)文本轉(zhuǎn)語(yǔ)音服務(wù)API實(shí)現(xiàn),microsoft,開(kāi)發(fā)語(yǔ)言,java

微軟(TTS)文本轉(zhuǎn)語(yǔ)音服務(wù)API實(shí)現(xiàn),microsoft,開(kāi)發(fā)語(yǔ)言,java

gender:為發(fā)聲人性別,Male表示男性

?voiceName :發(fā)聲者名稱,大家可以去下圖找出對(duì)應(yīng)的,比如中文的話:

微軟(TTS)文本轉(zhuǎn)語(yǔ)音服務(wù)API實(shí)現(xiàn),microsoft,開(kāi)發(fā)語(yǔ)言,java

package com.daoversal.util;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import javax.net.ssl.HttpsURLConnection;
import java.io.DataOutputStream;
import java.io.InputStream;

@Slf4j
@Component
public class TtsService {
 
    @Resource
    private Authentication authentication;

    /**
     * 合成音頻
     * @param textToSynthesize 傳入需要翻譯的文本
     * @param locale    要合成的語(yǔ)言類型
     * @param gender    性別
     * @param voiceName 發(fā)音者名稱
     * @return
     */
    public byte[] genAudioBytes(String textToSynthesize, String locale, String gender, String voiceName) {
        String accessToken = authentication.genAccessToken();
        if (StringUtils.isEmpty(accessToken)) {
            return new byte[0];
        }
        try {
            HttpsURLConnection webRequest = HttpsConnection.getHttpsConnection(TtsConst.TTS_SERVICE_URI);
            webRequest.setRequestProperty("Host", "eastus.tts.speech.microsoft.com");
            webRequest.setRequestProperty("Content-Type", "application/ssml+xml");
            webRequest.setRequestProperty("X-Microsoft-OutputFormat", TtsConst.AUDIO_24KHZ_48KBITRATE_MONO_MP3);
            webRequest.setRequestProperty("Authorization", "Bearer " + accessToken);
            webRequest.setRequestProperty("Ocp-Apim-Subscription-Key", TtsConst.API_KEY);
            webRequest.setRequestProperty("User-Agent", "Mozilla/5.0");
            webRequest.setRequestProperty("Accept", "*/*");
            webRequest.setDoInput(true);
            webRequest.setDoOutput(true);
            webRequest.setConnectTimeout(5000);
            webRequest.setReadTimeout(300000);
            webRequest.setRequestMethod("POST");
 
            String body = XmlDom.createDom(locale, gender, voiceName, textToSynthesize);
            if (StringUtils.isEmpty(body)) {
                return new byte[0];
            }
            byte[] bytes = body.getBytes();
            webRequest.setRequestProperty("content-length", String.valueOf(bytes.length));
            webRequest.connect();
            DataOutputStream dop = new DataOutputStream(webRequest.getOutputStream());
            dop.write(bytes);
            dop.flush();
            dop.close();
            InputStream inSt = webRequest.getInputStream();
            ByteArray ba = new ByteArray();
            int rn2 = 0;
            int bufferLength = 4096;
            byte[] buf2 = new byte[bufferLength];
            while ((rn2 = inSt.read(buf2, 0, bufferLength)) > 0) {
                ba.cat(buf2, 0, rn2);
            }
            inSt.close();
            webRequest.disconnect();
            return ba.getArray();
        } catch (Exception e) {
            log.error("Synthesis tts speech failed {}", e.getMessage());
        }
        return null;
    }

}
package com.daoversal.util;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.net.ssl.HttpsURLConnection;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.concurrent.TimeUnit;

/**
 * 此類獲取token,每次調(diào)用都需要使用到token的
 * token的有效期是10分鐘,但是不建議大家10分鐘調(diào)一次,免得使用了失效的token
 */
@Component
@Slf4j
public class Authentication {

    @Autowired
    private RedissonClient redisson;

    public String genAccessToken() {
        InputStream inSt;
        HttpsURLConnection webRequest;
        try {
            //先從redis里面取緩存的token,如果沒(méi)有就遠(yuǎn)程拉取,有的話就直接使用,大家可根據(jù)自己的業(yè)務(wù)調(diào)整
            Object ob = redisson.getBucket("accessToken").get();
            String accessToken = ob == null ? null : ob.toString();
            if (StringUtils.isEmpty(accessToken)) {
                webRequest = HttpsConnection.getHttpsConnection(TtsConst.ACCESS_TOKEN_URI);
                webRequest.setDoInput(true);
                webRequest.setDoOutput(true);
                webRequest.setConnectTimeout(5000);
                webRequest.setReadTimeout(5000);
                webRequest.setRequestMethod("POST");
 
                byte[] bytes = new byte[0];
                webRequest.setRequestProperty("content-length", String.valueOf(bytes.length));
                //api的key,取微軟官網(wǎng)獲取
                webRequest.setRequestProperty("Ocp-Apim-Subscription-Key", TtsConst.API_KEY);
                webRequest.connect();
 
                DataOutputStream dop = new DataOutputStream(webRequest.getOutputStream());
                dop.write(bytes);
                dop.flush();
                dop.close();
 
                inSt = webRequest.getInputStream();
                InputStreamReader in = new InputStreamReader(inSt);
                BufferedReader bufferedReader = new BufferedReader(in);
                StringBuilder strBuffer = new StringBuilder();
                String line = null;
                while ((line = bufferedReader.readLine()) != null) {
                    strBuffer.append(line);
                }
 
                bufferedReader.close();
                in.close();
                inSt.close();
                webRequest.disconnect();
 
                accessToken = strBuffer.toString();
                //獲取到了token,緩存到redis里面,5分鐘失效
                redisson.getBucket("accessToken").set(accessToken,5L, TimeUnit.MINUTES);
                //設(shè)置accessToken的過(guò)期時(shí)間為5分鐘
                log.info("New tts access token {}", accessToken);
            }
            return accessToken;
        } catch (Exception e) {
            log.error("Generate tts access token failed {}", e.getMessage());
        }
        return null;
    }
}

最后就是調(diào)用了,大家可以測(cè)試了:

package com.daoversal.web;


import com.daoversal.framework.http.Response;
import com.daoversal.task.DvWeekCountTask;
import com.daoversal.task.RechargeTask;
import com.daoversal.task.UserGradeCountTask;
import com.daoversal.task.WindControlMsgTask;
import com.daoversal.util.TtsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import okhttp3.*;
import org.springframework.boot.configurationprocessor.json.JSONException;
import org.springframework.boot.configurationprocessor.json.JSONObject;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.*;

/**
 * <p>
 * 套餐價(jià)值釋放記錄表 前端控制器
 * </p>
 *
 * @author HayDen
 * @since 03 22 10:44:13
 */
@RestController
@RequestMapping("/test")
@Api(value = "test")
public class TestController {

    @Resource
    private TtsService testService;

    @PostMapping("/ttsService")
    @ApiOperation(value = "獲取ttsService", httpMethod = "POST" )
    public void ttsService(String text) {
       // byte[] bte = testService.genAudioBytes(res,"en-US","Male","en-US-JennyNeural");
        byte[] bte = testService.genAudioBytes(text,"zh-CN","Male","zh-CN-YunxiNeural");
        String value = "hllo.mp3";
        convertByteArrayToFile(bte,value);
        System.out.println("213213123");
    }

    /**
     * 此文件是將byte[] 轉(zhuǎn)換成文件存儲(chǔ)到指定路徑的
     * @param arr
     * @param value
     */
    public static void convertByteArrayToFile(byte[] arr,String value) {
        try (
                BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(arr));
                //這里是轉(zhuǎn)換以后的文件存儲(chǔ)的路徑
                FileOutputStream fileOutputStream = new FileOutputStream("/Users/recovery/Downloads/"+value);
                BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream)
        ) {
            int data;
            while ((data = bis.read()) != -1) {
                bos.write(data);
            }
            bos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

最后大家需要注意一下就是如果你選的是英文en-US,但是輸入的文本是中文的話他是不會(huì)翻譯的,所以大家一定要注意自己的語(yǔ)言類型不要弄錯(cuò)了,如果有疑問(wèn)可以留言哦,我看到肯定會(huì)毫無(wú)保留的給大家說(shuō)明的。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-725252.html

到了這里,關(guān)于微軟(TTS)文本轉(zhuǎn)語(yǔ)音服務(wù)API實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • [chatgpt+Azure]unity AI二次元小女友之使用微軟Azure服務(wù)實(shí)現(xiàn)RestfulApi->語(yǔ)音識(shí)別+語(yǔ)音合成

    [chatgpt+Azure]unity AI二次元小女友之使用微軟Azure服務(wù)實(shí)現(xiàn)RestfulApi->語(yǔ)音識(shí)別+語(yǔ)音合成

    ????????如題所述,這個(gè)小項(xiàng)目是在unity引擎端,使用了chatgpt+微軟azure的一個(gè)AI二次元女友對(duì)話的項(xiàng)目,實(shí)現(xiàn)原理也比較簡(jiǎn)單,即在unity端實(shí)現(xiàn)AI二次元女友的交互界面,接入chatgpt-3.5-turbo的api接口,借助chatgpt的自然語(yǔ)言生成能力,作為這個(gè)項(xiàng)目的聊天引擎。聊天功能也比較

    2024年02月04日
    瀏覽(26)
  • [Unity+OpenAI TTS] 集成openAI官方提供的語(yǔ)音合成服務(wù),構(gòu)建海王暖男數(shù)字人

    [Unity+OpenAI TTS] 集成openAI官方提供的語(yǔ)音合成服務(wù),構(gòu)建海王暖男數(shù)字人

    ? ? ? ? 最近openAI官方發(fā)布了很多新功能,其中就包括了最新發(fā)布的TTS語(yǔ)音合成服務(wù)的api接口。說(shuō)到這個(gè)語(yǔ)音合成接口,大家可能會(huì)比較陌生,但是說(shuō)到chatgpt官方應(yīng)用上的聊天機(jī)器人,那個(gè)臺(tái)灣腔的海王暖男的聲音,可能就有印象了吧。那么從官方文檔中,可以發(fā)現(xiàn),openA

    2024年02月04日
    瀏覽(27)
  • 微軟認(rèn)知服務(wù)-語(yǔ)音識(shí)別相關(guān)

    微軟認(rèn)知服務(wù)-語(yǔ)音識(shí)別相關(guān)

    在csdn上面看到有微軟認(rèn)知服務(wù)的試用,之前正好因?yàn)橐恍┬枨?,接觸到了這塊的一些東西,正好總結(jié)一下,之前使用的是國(guó)外的賬號(hào),這個(gè)登錄以后看到是國(guó)內(nèi)世紀(jì)互聯(lián)運(yùn)營(yíng)的國(guó)內(nèi)的azure,在識(shí)別這塊應(yīng)該針對(duì)中文方面有更好的適配 0元試用微軟 Azure人工智能認(rèn)知服務(wù),精美

    2024年02月14日
    瀏覽(22)
  • Android快速集成微軟語(yǔ)音服務(wù)(Azure認(rèn)知服務(wù))

    Android快速集成微軟語(yǔ)音服務(wù)(Azure認(rèn)知服務(wù))

    在網(wǎng)上溜了一圈,發(fā)現(xiàn)使用微軟語(yǔ)音服務(wù)(Azure)的文章好少,為之感嘆,在國(guó)內(nèi),百度語(yǔ)音、訊飛語(yǔ)音算是前沿語(yǔ)音技術(shù),使用的公司和人自然不少,不過(guò),在國(guó)際語(yǔ)言,小語(yǔ)種這塊,還需要努力。剛開(kāi)始,我也想使用百度語(yǔ)音翻譯來(lái)著,后面發(fā)現(xiàn)集成好麻煩,API請(qǐng)求參數(shù)

    2024年02月04日
    瀏覽(28)
  • 如何注冊(cè)微軟Azure并獲取語(yǔ)音合成服務(wù)?

    如何注冊(cè)微軟Azure并獲取語(yǔ)音合成服務(wù)?

    按步驟,一步步來(lái)。 使用條件,以下可選: 1、有信用卡 2、有學(xué)生郵箱、學(xué)校郵箱。 步驟: 1、打開(kāi)地址,去注冊(cè)。 信用卡注冊(cè): 文本轉(zhuǎn)語(yǔ)音 – 真實(shí) AI 語(yǔ)音生成器 | Microsoft Azure 學(xué)生郵箱: 面向?qū)W生的 Azure - 免費(fèi)帳戶額度 | Microsoft Azure 2、注冊(cè)后去后臺(tái),打開(kāi)語(yǔ)音服務(wù)。 后

    2024年02月03日
    瀏覽(19)
  • edge-tts微軟文本轉(zhuǎn)語(yǔ)音庫(kù),來(lái)聽(tīng)聽(tīng)這些語(yǔ)音是否很熟悉?

    edge-tts微軟文本轉(zhuǎn)語(yǔ)音庫(kù),來(lái)聽(tīng)聽(tīng)這些語(yǔ)音是否很熟悉?

    上期圖文教程,我們分享了Azure機(jī)器學(xué)習(xí)的文本轉(zhuǎn)語(yǔ)音的賬號(hào)申請(qǐng)與API申請(qǐng)的詳細(xì)步驟,也介紹了基于python3實(shí)現(xiàn)Azure機(jī)器學(xué)習(xí)文本轉(zhuǎn)語(yǔ)音功能的代碼實(shí)現(xiàn)過(guò)程,雖然我們可以使用Azure賬號(hào)免費(fèi)提供一年的試用期,但是畢竟是要付費(fèi)的,我們的API也無(wú)法長(zhǎng)期使用,好在微軟發(fā)布了

    2024年02月07日
    瀏覽(20)
  • 我開(kāi)發(fā)了一個(gè)【免費(fèi)】使用微軟的文字轉(zhuǎn)語(yǔ)音服務(wù)的js庫(kù)

    我開(kāi)發(fā)了一個(gè)【免費(fèi)】使用微軟的文字轉(zhuǎn)語(yǔ)音服務(wù)的js庫(kù)

    嘗試過(guò)各種TTS的方案,一番體驗(yàn)下來(lái),發(fā)現(xiàn)微軟才是這個(gè)領(lǐng)域的王者,其 Azure文本轉(zhuǎn)語(yǔ)音 服務(wù)的轉(zhuǎn)換出的語(yǔ)音效果最為自然,但Azure是付費(fèi)服務(wù),注冊(cè)操作付費(fèi)都太麻煩了。但在其官網(wǎng)上竟然提供了一個(gè) 完全體 的演示功能,能夠完完整整的體驗(yàn)所有角色語(yǔ)音,說(shuō)話風(fēng)格…

    2024年02月05日
    瀏覽(25)
  • 用python協(xié)寫個(gè)調(diào)用移動(dòng)語(yǔ)音通知API的服務(wù)

    要實(shí)現(xiàn)這個(gè)功能,你需要使用Python中的第三方庫(kù),如 requests 和 datetime 庫(kù)。同時(shí),你需要先注冊(cè)移動(dòng)語(yǔ)音通知API的賬號(hào)并獲取API密鑰。 以下是一個(gè)基本的Python代碼示例,它使用移動(dòng)語(yǔ)音通知API來(lái)發(fā)送語(yǔ)音通知:

    2024年02月13日
    瀏覽(16)
  • 微軟/edge文本轉(zhuǎn)語(yǔ)音API接口

    類型:websocket 類型:websocket

    2023年04月16日
    瀏覽(12)
  • C#調(diào)用微軟api文本轉(zhuǎn)語(yǔ)音

    C#調(diào)用微軟api文本轉(zhuǎn)語(yǔ)音

    目錄 1.注冊(cè)微軟云服務(wù),搭建文本轉(zhuǎn)語(yǔ)音標(biāo)準(zhǔn)應(yīng)用(每月500萬(wàn)字免費(fèi)好像) 2.Visual studio使用nuget給程序安裝Microsoft.CognitiveServices.Speech框架 ?3.引用命名空間 4.文本轉(zhuǎn)語(yǔ)音參考代碼 5.文本轉(zhuǎn)語(yǔ)音下載到本地參考代碼

    2024年02月12日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包