当前位置: 首页 > article >正文

【AI技术】Edge-TTS 国内使用方法

介绍:

TTS软件效果里,微软推出的免费使用的Edge-TTS平台是效果比较好的,但是目前该平台开始对国内阻止使用了。这里给大家和我一样使用该python库的小伙伴一个临时的解决方法。

提示:建议大家还是要么迁移到国内的收费平台或者是一些免费的开源框架(paddlespeech、gpt-sovits)


解决方案:

这个TTS服务在Edge浏览器中其实也有嵌入,并且国内一样可以使用,经过和官方的访问地址对比发现是多了两个参数Sec-MS-GECSec-MS-GEC-Version,只要这两个参数传入就可以通过认证连接WebSocket服务了。所以我们这里在Internet选项中加入代理访问方式,再使用Python的mitmproxy库来监听代理的8080端口。这样就可以获得浏览器使用TTS时使用的url地址,再从中取出我们需要的两个参数即可。

这里的整个思路都来自github的一位大佬,这里附上他的链接,他也自己开发了一个API供大家使用,同样附上链接。

补充:

1、API的代码


from flask import Flask, jsonify
import json
import os

app = Flask(__name__)

@app.route('/get_token', methods=['GET'])
def get_token():
    if os.path.exists("token.json"):
        with open("token.json", "r") as f:
            data = json.load(f)
        return jsonify(data)
    else:
        return jsonify({"error": "token.json not found"}), 404

if __name__ == '__main__':
    app.run(host="0.0.0.0", debug=True)

2、Html的代码做了一个每60秒刷新一次的补充,因为实际使用中发现如果不刷新有的时候mitmproxy会卡主,必须自行刷新Edge的页面才会恢复,既然这样就直接在脚本中加入。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>自动循环播放语音</title>
</head>
<body>
    <!-- 多行文本显示 -->
    <div id="textContainer">
        <p>天王盖地虎,</p>
        <p>宝塔镇河妖。</p>
    </div>

    <script>
        // 获取所有可用的语音
        function getVoices() {
            return new Promise((resolve) => {
                let voices = speechSynthesis.getVoices();
                if (voices.length) {
                    resolve(voices);
                    return;
                }
                speechSynthesis.onvoiceschanged = () => {
                    voices = speechSynthesis.getVoices();
                    resolve(voices);
                };
            });
        }

        // 根据语音名称播放文本并监听结束事件
        async function speakbyvoice(text, voiceName, onEndCallback) {
            const voices = await getVoices();
            const utter = new SpeechSynthesisUtterance(text);
            const voice = voices.find(v => v.name.includes(voiceName));
            if (voice) {
                utter.voice = voice;
            } else {
                console.warn(`找不到语音:${voiceName}`);
            }
            utter.onend = onEndCallback; // 设置播放结束时的回调
            speechSynthesis.speak(utter);
        }

        // 开始循环播放
        function startPlayback() {
            const paragraphs = document.querySelectorAll("#textContainer p");
            let currentParagraphIndex = 0;

            function playNextParagraph() {
                if (currentParagraphIndex >= paragraphs.length) {
                    currentParagraphIndex = 0; // 重置为第一个段落
                }
                const text = paragraphs[currentParagraphIndex].innerText;
                speakbyvoice(text, "Xiaoxiao", playNextParagraph);
                currentParagraphIndex++;
            }

            playNextParagraph(); // 开始播放第一个段落
        }

        // 页面加载完成后自动开始播放
        window.onload = startPlayback;

        // 1分钟后刷新页面
        setInterval(function(){
            location.reload();
        }, 60000);
    </script>
</body>
</html>

3、尽量避免浏览器其他地址的访问,我的这个API服务是单独拿了一个机器去跑,因为如果使用浏览器做其他的动作的时候也会导致mitmproxy的卡主。

特别感谢

最后再次感谢github的大神jianchang512同学


http://www.kler.cn/a/387645.html

相关文章:

  • 32位、64位、x86与x64:深入解析计算机架构
  • K8s进阶使用
  • 修改yolo格式的labels类别、删除yolo格式的labels类别
  • vue el-date-picker 日期选择器禁用失效问题
  • Nginx配置自带的stub状态实现活动监控指标
  • STM32学习笔记------GPIO介绍
  • 问题排查:C++ exception with description “getrandom“ thrown in the test body
  • Ubuntu实现双击图标运行自己的应用软件
  • Windows系统中Oracle VM VirtualBox的安装
  • 2024年第四届“网鼎杯”网络安全比赛---朱雀组Crypto- WriteUp
  • 计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
  • 个性化培训:扫码分组指南
  • ResNet 残差网络 (乘法→加法的思想 - 残差连接是所有前沿模型的标配) + 代码实现 ——笔记2.16《动手学深度学习》
  • FPGA时序分析和约束学习笔记(4、IO传输模型)
  • Linux命令学习,git命令
  • Node-Red二次开发:各目录结构说明及开发流程
  • Mac intel 安装IDEA激活时遇到问题 jetbrains.vmoptions.plist: Permission denied
  • 量化交易系统开发-实时行情自动化交易-Okex行情交易数据
  • Spark的Standalone集群环境安装
  • arcgis pro 学习笔记
  • 代码随想录算法训练营Day58 | 卡玛网 110.字符串接龙、卡玛网 105.有向图的完全可达性、卡玛网 106.岛屿的周长
  • MyBatisPlus 用法详解
  • SQL语句-MySQL
  • HuggingFace中from_pretrained函数的加载文件
  • Unity Shader分段式血条
  • 基于SSM社区便民服务管理系统JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解