# MsEdgeTTS
[![npm version](https://yellow-cdn.veclightyear.com/2b54e442/1b3c9c59-b050-4997-af8d-02c93d7172b8.svg)](https://badge.fury.io/js/msedge-tts)
一个简单的 Azure 语音服务模块,使用 Microsoft Edge 阅读朗读 API。
~~完全支持 SSML~~ 仅支持 `speak`、`voice` 和 `prosody` 元素类型。以下是默认的 SSML 对象:
```xml
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts"
xml:lang="${this._voiceLang}">
<voice name="${voiceName}">
<prosody rate="${rate}" pitch="${pitch}" volume="${volume}">
${input}
</prosody>
</voice>
</speak>
有关 SSML 格式的文档 可在此处找到。所有支持的音频格式 可在此处找到。
示例用法
确保转义/清理用户的输入! 使用类似 xml-escape 的库。
写入到流
import {MsEdgeTTS, OUTPUT_FORMAT} from "msedge-tts";
const tts = new MsEdgeTTS();
await tts.setMetadata("en-IE-ConnorNeural", OUTPUT_FORMAT.WEBM_24KHZ_16BIT_MONO_OPUS);
const readable = tts.toStream("Hi, how are you?");
readable.on("data", (data) => {
console.log("DATA RECEIVED", data);
// 原始音频文件数据
});
readable.on("close", () => {
console.log("STREAM CLOSED");
});
写入到文件
import {MsEdgeTTS, OUTPUT_FORMAT} from "msedge-tts";
(async () => {
const tts = new MsEdgeTTS();
await tts.setMetadata("en-US-AriaNeural", OUTPUT_FORMAT.WEBM_24KHZ_16BIT_MONO_OPUS);
const filePath = await tts.toFile("./example_audio.webm", "Hi, how are you?");
})();
更改语速、音高和音量
import {MsEdgeTTS, OUTPUT_FORMAT} from "msedge-tts";
(async () => {
const tts = new MsEdgeTTS();
await tts.setMetadata("en-US-AriaNeural", OUTPUT_FORMAT.WEBM_24KHZ_16BIT_MONO_OPUS);
const filePath = await tts.toFile("./example_audio.webm", "Hi, how are you?", {rate: 0.5, pitch: "+200Hz"});
})();
使用替代的 HTTP 代理
使用自定义的 http.Agent 实现,例如 https-proxy-agent 或 socks-proxy-agent。
import {SocksProxyAgent} from 'socks-proxy-agent';
(async () => {
const agent = new SocksProxyAgent("socks://your-name%40gmail.com:abcdef12345124@br41.nordvpn.com");
const tts = new MsEdgeTTS(agent);
await tts.setMetadata("en-US-AriaNeural", OUTPUT_FORMAT.WEBM_24KHZ_16BIT_MONO_OPUS);
const filePath = await tts.toFile("./example_audio.webm", "Hi, how are you?");
})();
API
完整的文档请查看 API 文档。
该库仅支持 Promise。