Skip to content

rogueme/ms-ra-forwarder

 
 

Repository files navigation

ms-ra-forwarder

创建这个项目的初衷是为了能够在阅读(legado)中听“晓晓”念书。由于其中的脚本引擎不支持 WebSocket ,所以包装了一下微软 Edge 浏览器“大声朗读”的接口。

如果你的项目可以使用 WebSocket ,请直接在项目中调用原接口。具体代码可以参考 service/edge/index.ts

重要更改

2022-09-01:Azure TTS API 好像又改了,旧版用户可能会无法正常使用,请更新到最新版。

2022-07-17:添加 Azure TTS API 支持(没怎么测试,不知道用起来稳不稳定)。因为调用 Azure TTS API 需要获取授权码。其它方式只需要或取一次就可以使用一段时间,而 Vercel 每次调用 API 都需要重新获取授权码。容易超时不说,也加剧了微软服务器的负担,所以不是很推荐部署在 Vercel 的用户使用(虽然也不是不能用~但是万一微软被薅痛了,又改接口就不好了😂)。

2022-07-02:测试目前还支持的格式有 webm-24khz-16bit-mono-opuaudio-24khz-48kbitrate-mono-mp3audio-24khz-96kbitrate-mono-mp3。另外今天下午开始,使用不在下拉列表中声音会出现类似 “Unsupported voice zh-CN-YunyeNeural.” 错误,后续可能也会被砍掉。且用且珍惜吧! 2022-07-01:部署在中国大陆以外服务器上的服务目前只能选择 webm-24khz-16bit-mono-opus 格式的音频了! 所以使用 Vercel 的用户需要重新部署一下。

2022-06-16:Edge 浏览器提供的接口现在已经不能设置讲话风格了,若发现不能正常使用,请参考 #12 获取更新。

部署

请参考下列部署方式。

部署到 Vercel

请先 Fork 一份代码然后部署到自己的 Vercel 中 。参考 演示视频

注:由于 Vercel 使用了无状态的云函数,每次请求都需要与重新微软的服务器建立连接,所以速度会相对较慢。

部署到 Heroku

Deploy

部署到 Railway

Deploy on Railway

Docker部署过程

请先自行安装好Docker、Docker Compose、node.js、git,不会可以找百度。

1 拉取镜像

docker pull ljmalyp/ms-tts:latest

运行方式二选一

2.1 启动容器(方式一)

无TOKEN密码启动容器

docker run --name ms-tts -d -p 3000:3000 ljmalyp/ms-tts

TOKEN密码启动容器

docker run --name ms-tts -d -p 3000:3000 -e TOKEN="密码" ljmalyp/ms-tts

2.2 Docker Compose(方式二)

2.2.1 进入home目录

cd /home

2.2.2 获取代码

git clone https://github.com/rogueme/ms-ra-forwarder.git

2.2.3 进入/home/ms-ra-forwarder目录

cd /home/ms-ra-forwarder

2.2.4 创建 docker-compose.yml 文件

在ms-ra-forwarder目录下创建 docker-compose.yml 文件并写入以下内容并保存。

无需自定义的请使用以下内容:

version: '3'

services:
  ms-ra-forwarder:
    container_name: ms-tts
    ports:
     - "3000:3000"
    image: ljmalyp/ms-tts:latest

 需要自定义更改网站文件的请使用以下内容:

version: '3'

services:
  ms-ra-forwarder:
    container_name: ms-tts
    ports:
     - "3000:3000"
    volumes:
     - ./api/:/app/api/
     - ./service/:/app/service/
     - ./dist/:/app/dist/
     - ./public/:/app/public/
    image: ljmalyp/ms-tts:latest

docker-compose.yml 文件目录下执行

 更新环境配置:

docker-compose up -d

如docker-compose.yml文件内容未改变请执行

 重启容器:

docker-compose restart

改动后缀ts文件内容后需要重新编译为js才会生效

进入/home/ms-ra-forwarder目录

cd /home/ms-ra-forwarder

编译ts文件

tsc -w

4 浏览器访问 http://localhost:3000

手动运行

手动运行需要事先安装好 git 和 nodejs。

# 安装依赖
npm install 
# 运行
npm run start

使用

导入到阅读(legado)

请访问你部署好的网站,在页面中测试没有问题后点击“生成阅读(legado)语音引擎链接”,然后在阅读(legado)中导入。

手动调用

接口地址为:

POST /api/ra
FORMAT: audio-16khz-128kbitrate-mono-mp3
Content-Type: text/plain

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="en-US">
  <voice name="zh-CN-XiaoxiaoNeural">
    表征这个词印象中就没在中文里见到过
  </voice>
</speak>

定制发音和音色

请求的正文为 ssml 格式,支持定制发音人和说话风格(最新接口不再支持定制说话风格),下面是相关的示例和文档:

文本转语音

通过语音合成标记语言 (SSML) 改善合成

音频格式

默认的音频格式为 mp3 ,如果需要获取为其他格式的音频请修改请求头的 FORMAT(可用的选项可以在 ra/index.ts 中查看)。

限制访问

由于 Vercel 并非无限制的免费,如果需要防止他人滥用你的部署的服务,可以在应用的环境变量中添加 TOKEN,然后在请求头中添加 Authorization: Bearer <TOKEN>访问。注意:这只会阻止未授权的请求调用微软的接口,并不会减少 Vercel Serverless Function 限额的用量(大概会减少一点流量)。

相关项目

其他说明

  • 微软官方的 Azure TTS 服务目前拥有一定的免费额度,如果免费额度对你来说够用的话,请支持官方的服务。

  • 如果只需要为固定的文本生成语音,可以使用有声内容创作。它提供了更丰富的功能可以生成更自然的声音。

  • 本项目使用的是Edge浏览器“大声朗读”功能的接口,不保证后续可用性和稳定性。

  • 本项目仅供学习和参考,请勿商用。

Releases

No releases published

Packages

No packages published

Languages

  • HTML 50.1%
  • TypeScript 32.3%
  • JavaScript 17.4%
  • Dockerfile 0.2%