#语音合成 #文本到语音 #tts #hello-world

bin+lib aspeak

Azure TTS API 的简单文本到语音客户端

28 个版本 (10 个稳定版)

6.0.1 2023 年 10 月 3 日
6.0.0 2023 年 6 月 29 日
5.2.0 2023 年 5 月 5 日
5.1.0 2023 年 4 月 20 日
0.1.0 2023 年 2 月 3 日

#90音频

Download history 28/week @ 2024-04-16 14/week @ 2024-04-23 14/week @ 2024-05-07 5/week @ 2024-05-14 5/week @ 2024-05-28 33/week @ 2024-06-04 30/week @ 2024-06-11 49/week @ 2024-06-18 32/week @ 2024-06-25 118/week @ 2024-07-02 35/week @ 2024-07-09 181/week @ 2024-07-23 4/week @ 2024-07-30

每月 222 下载

MIT 许可协议

170KB
3.5K SLoC

🗣️ aspeak

GitHub stars GitHub issues GitHub forks GitHub license

Azure TTS API 的简单文本到语音客户端. 😆

注意

从版本 6.0.0 开始,aspeak 默认使用 Azure TTS 的 RESTful API。如果您想使用 WebSocket API,可以在调用 aspeak 时指定 --mode websocket 或者在您的配置文件中的 auth 部分设置 mode = "websocket"

从版本 4.0.0 开始,aspeak 使用 rust 重新编写。旧版 Python 版本可在 python 分支找到。

您可以在 Azure 注册账户,然后根据需要选择支付计划(或坚持免费层)。免费层包括每月 0.5 百万字符的配额,免费提供。

请参阅 认证部分 了解如何为 aspeak 设置认证。

安装

从这里下载最新发布版 here

下载后,解压缩存档,您将得到一个可执行文件。

您可以将它放在您的 PATH 环境变量中的一个目录中,这样您就可以在任何地方运行它。

从 v4.1.0 版本开始,您可以从 AUR 安装 aspeak-bin

从 PyPI 安装

从 PyPI 安装将为您安装 aspeak 的 Python 绑定。有关使用 Python 绑定的更多信息,请参阅 库使用#Python

pip install -U aspeak==6.0.0

目前预构建的wheel包只适用于x86_64架构。由于一些技术问题,我还没有将源代码上传到PyPI。因此,要从源码构建wheel,您需要遵循从源码安装中的说明。

由于许多Linux兼容性问题,Linux的wheel包在PyPI上不可用。(但您仍然可以从源码构建它们。)

从源码安装

仅限命令行界面

从源码安装aspeak的最简单方法是使用cargo

cargo install aspeak -F binary

或者,您也可以从AUR安装aspeak

Python Wheel

要构建Python wheel,您首先需要安装maturin

pip install maturin

在克隆仓库并使用cd进入目录后,您可以通过运行以下命令来构建wheel:

maturin build --release --strip -F python --bindings pyo3 --interpreter python --manifest-path Cargo.toml --out dist-pyo3
maturin build --release --strip --bindings bin -F binary --interpreter python --manifest-path Cargo.toml --out dist-bin
bash merge-wheel.bash

如果一切顺利,您将在dist目录中获得wheel文件。

用法

运行aspeak help以查看帮助信息。

运行aspeak help <subcommand>以查看子命令的帮助信息。

身份验证

身份验证选项应放在任何子命令之前。

例如,要利用您的订阅密钥和一个由区域指定的官方端点,请运行以下命令

$ aspeak --region <YOUR_REGION> --key <YOUR_SUBSCRIPTION_KEY> text "Hello World"

如果您正在使用自定义端点,可以使用--endpoint选项而不是--region

为了避免重复,您可以将身份验证详细信息存储在您的aspeak配置文件中。请阅读以下部分以获取更多详细信息。

从v5.2.0版本开始,您也可以通过以下环境变量设置身份验证密钥

  • ASPEAK_AUTH_KEY用于使用订阅密钥进行身份验证
  • ASPEAK_AUTH_TOKEN用于使用授权令牌进行身份验证

从v4.3.0版本开始,您可以允许aspeak使用代理服务器连接到端点。目前,仅支持http和socks5代理(尚未支持https)。例如

$ aspeak --proxy http://your_proxy_server:port text "Hello World"
$ aspeak --proxy socks5://your_proxy_server:port text "Hello World"

aspeak也尊重HTTP_PROXY(或http_proxy)环境变量。

配置

aspeak v4引入了配置文件的概念。配置文件是一个配置文件,其中您可以指定命令行选项的默认值。

运行以下命令以创建默认配置文件:

$ aspeak config init

要编辑配置文件,运行

$ aspeak config edit

如果您在运行上述命令时遇到问题,您可以手动编辑配置文件

首先通过运行以下命令获取配置文件的路径:

$ aspeak config where

然后使用您喜欢的文本编辑器编辑文件。

配置文件是一个TOML文件。默认配置文件如下所示

请检查配置文件中的注释以获取有关可用选项的更多信息。

# Profile for aspeak
# GitHub: https://github.com/kxxt/aspeak

# Output verbosity
# 0   - Default
# 1   - Verbose
# The following output verbosity levels are only supported on debug build
# 2   - Debug
# >=3 - Trace
verbosity = 0

#
# Authentication configuration
#

[auth]
# Endpoint for TTS
# endpoint = "wss://eastus.tts.speech.microsoft.com/cognitiveservices/websocket/v1"

# Alternatively, you can specify the region if you are using official endpoints
# region = "eastus"

# Synthesizer Mode, "rest" or "websocket"
# mode = "rest"

# Azure Subscription Key
# key = "YOUR_KEY"

# Authentication Token
# token = "Your Authentication Token"

# Extra http headers (for experts)
# headers = [["X-My-Header", "My-Value"], ["X-My-Header2", "My-Value2"]]

# Proxy
# proxy = "socks5://127.0.0.1:7890"

# Voice list API url
# voice_list_api = "Custom voice list API url"

#
# Configuration for text subcommand
#

[text]
# Voice to use. Note that it takes precedence over the locale
# voice = "en-US-JennyNeural"
# Locale to use
locale = "en-US"
# Rate
# rate = 0
# Pitch
# pitch = 0
# Role
# role = "Boy"
# Style, "general" by default
# style = "general"
# Style degree, a floating-point number between 0.1 and 2.0
# style_degree = 1.0

#
# Output Configuration
#

[output]
# Container Format, Only wav/mp3/ogg/webm is supported.
container = "wav"
# Audio Quality. Run `aspeak list-qualities` to see available qualities.
#
# If you choose a container format that does not support the quality level you specified here, 
# we will automatically select the closest level for you.
quality = 0
# Audio Format(for experts). Run `aspeak list-formats` to see available formats.
# Note that it takes precedence over container and quality!
# format = "audio-16khz-128kbitrate-mono-mp3"

如果您想使用除默认配置文件之外的配置文件,可以使用--profile参数

aspeak --profile <PATH_TO_A_PROFILE> text "Hello"

如果您想暂时禁用配置文件,可以使用--no-profile参数

aspeak --no-profile --region eastus --key <YOUR_KEY> text "Hello"

音高和速度

  • rate:语音的说话速度。
    • 如果您使用浮点值(例如0.5),该值将乘以100%并变为50.00%
    • 您还可以使用以下值:x-slowslowmediumfastx-fastdefault
    • 您还可以直接使用百分比值:+10%
    • 您还可以使用带后缀 f 的相对浮点值(例如,1.2f)。
      • 根据 Azure 文档
      • 相对值,表示为默认值的乘数。
      • 例如,1f 的值会导致速率无变化。值为 0.5f 的速率减半。值为 3f 的速率增加三倍。
  • pitch:声音的音调。
    • 如果您使用浮点值(例如 -0.5),则该值将乘以 100%,成为 -50.00%
    • 您还可以使用以下值:x-lowlowmediumhighx-highdefault
    • 您还可以直接使用百分比值:+10%
    • 您还可以使用相对值,例如 -2st+80Hz
      • 根据 Azure 文档
      • 相对值,表示为带有 "+" 或 "-" 的数字,后跟 "Hz" 或 "st",指定要更改音调的量。
      • "st" 表示变化单位是半音,它是标准音阶上音的一半(半步)。
    • 您还可以使用绝对值:例如 600Hz

注意:不合理的过高/过低值将由 Azure 认知服务剪辑到合理的值。

示例

以下示例假设您已在您的配置文件中设置了身份验证。

对默认扬声器说“Hello, world!”。

$ aspeak text "Hello, world"

SSML 到语音

$ aspeak ssml << EOF
<speak version='1.0' xmlns='http://www.w3.org/2001/10/synthesis' xml:lang='en-US'><voice name='en-US-JennyNeural'>Hello, world!</voice></speak>
EOF

列出所有可用的语音。

$ aspeak list-voices

列出所有可用的中文语音。

$ aspeak list-voices -l zh-CN

获取有关语音的信息。

$ aspeak list-voices -v en-US-SaraNeural
输出
Microsoft Server Speech Text to Speech Voice (en-US, SaraNeural)
Display name: Sara
Local name: Sara @ en-US
Locale: English (United States)
Gender: Female
ID: en-US-SaraNeural
Voice type: Neural
Status: GA
Sample rate: 48000Hz
Words per minute: 157
Styles: ["angry", "cheerful", "excited", "friendly", "hopeful", "sad", "shouting", "terrified", "unfriendly", "whispering"]

将合成语音保存到文件。

$ aspeak text "Hello, world" -o output.wav

如果您更喜欢 mp3/ogg/webm,可以使用 -c mp3/-c ogg/-c webm 选项。

$ aspeak text "Hello, world" -o output.mp3 -c mp3
$ aspeak text "Hello, world" -o output.ogg -c ogg
$ aspeak text "Hello, world" -o output.webm -c webm

列出所有可用质量级别

$ aspeak list-qualities
输出
Qualities for MP3:
  3: audio-48khz-192kbitrate-mono-mp3
  2: audio-48khz-96kbitrate-mono-mp3
 -3: audio-16khz-64kbitrate-mono-mp3
  1: audio-24khz-160kbitrate-mono-mp3
 -2: audio-16khz-128kbitrate-mono-mp3
 -4: audio-16khz-32kbitrate-mono-mp3
 -1: audio-24khz-48kbitrate-mono-mp3
  0: audio-24khz-96kbitrate-mono-mp3

Qualities for WAV:
 -2: riff-8khz-16bit-mono-pcm
  1: riff-24khz-16bit-mono-pcm
  0: riff-24khz-16bit-mono-pcm
 -1: riff-16khz-16bit-mono-pcm

Qualities for OGG:
  0: ogg-24khz-16bit-mono-opus
 -1: ogg-16khz-16bit-mono-opus
  1: ogg-48khz-16bit-mono-opus

Qualities for WEBM:
  0: webm-24khz-16bit-mono-opus
 -1: webm-16khz-16bit-mono-opus
  1: webm-24khz-16bit-24kbps-mono-opus

列出所有可用音频格式(仅限专家用户)

$ aspeak list-formats
输出
amr-wb-16000hz
audio-16khz-128kbitrate-mono-mp3
audio-16khz-16bit-32kbps-mono-opus
audio-16khz-32kbitrate-mono-mp3
audio-16khz-64kbitrate-mono-mp3
audio-24khz-160kbitrate-mono-mp3
audio-24khz-16bit-24kbps-mono-opus
audio-24khz-16bit-48kbps-mono-opus
audio-24khz-48kbitrate-mono-mp3
audio-24khz-96kbitrate-mono-mp3
audio-48khz-192kbitrate-mono-mp3
audio-48khz-96kbitrate-mono-mp3
ogg-16khz-16bit-mono-opus
ogg-24khz-16bit-mono-opus
ogg-48khz-16bit-mono-opus
raw-16khz-16bit-mono-pcm
raw-16khz-16bit-mono-truesilk
raw-22050hz-16bit-mono-pcm
raw-24khz-16bit-mono-pcm
raw-24khz-16bit-mono-truesilk
raw-44100hz-16bit-mono-pcm
raw-48khz-16bit-mono-pcm
raw-8khz-16bit-mono-pcm
raw-8khz-8bit-mono-alaw
raw-8khz-8bit-mono-mulaw
riff-16khz-16bit-mono-pcm
riff-22050hz-16bit-mono-pcm
riff-24khz-16bit-mono-pcm
riff-44100hz-16bit-mono-pcm
riff-48khz-16bit-mono-pcm
riff-8khz-16bit-mono-pcm
riff-8khz-8bit-mono-alaw
riff-8khz-8bit-mono-mulaw
webm-16khz-16bit-mono-opus
webm-24khz-16bit-24kbps-mono-opus
webm-24khz-16bit-mono-opus

增加/减少音频质量

# Less than default quality.
$ aspeak text "Hello, world" -o output.mp3 -c mp3 -q=-1
# Best quality for mp3
$ aspeak text "Hello, world" -o output.mp3 -c mp3 -q=3

从文件读取文本并朗读。

$ cat input.txt | aspeak text

$ aspeak text -f input.txt

使用自定义编码

$ aspeak text -f input.txt -e gbk

从 stdin 读取并朗读。

$ aspeak text

也许您更喜欢

$ aspeak text -l zh-CN << EOF
我能吞下玻璃而不伤身体。
EOF

朗读中文。

$ aspeak text "你好,世界!" -l zh-CN

使用自定义语音。

$ aspeak text "你好,世界!" -v zh-CN-YunjianNeural

自定义音调、速率和风格

$ aspeak text "你好,世界!" -v zh-CN-XiaoxiaoNeural -p 1.5 -r 0.5 -S sad
$ aspeak text "你好,世界!" -v zh-CN-XiaoxiaoNeural -p=-10% -r=+5% -S cheerful
$ aspeak text "你好,世界!" -v zh-CN-XiaoxiaoNeural -p=+40Hz -r=1.2f -S fearful
$ aspeak text "你好,世界!" -v zh-CN-XiaoxiaoNeural -p=high -r=x-slow -S calm
$ aspeak text "你好,世界!" -v zh-CN-XiaoxiaoNeural -p=+1st -r=-7% -S lyrical

高级用法

使用自定义音频格式进行输出

注意:某些音频格式在输出到扬声器时不受支持。

$ aspeak text "Hello World" -F riff-48khz-16bit-mono-pcm -o high-quality.wav

库用法

Python

新版本的 aspeak 使用 Rust 编写,Python 绑定由 PyO3 提供。

以下是一个简单示例

from aspeak import SpeechService

service =  SpeechService(region="eastus", key="YOUR_AZURE_SUBSCRIPTION_KEY")
service.speak_text("Hello, world")

首先,您需要创建一个 SpeechService 实例。

创建 SpeechService 实例时,您可以指定以下参数

  • audio_format(位置参数):输出音频的音频格式。默认为 AudioFormat.Riff24KHz16BitMonoPcm
    • 您可以通过提供容器格式和品质级别来获取音频格式:AudioFormat("mp3", 2)
  • endpoint:语音服务的端点。
  • region:或者,您可以指定语音服务的区域,而不是输入无聊的端点URL。
  • key:语音服务的订阅密钥。
  • token:语音服务的认证令牌。如果您提供令牌,则忽略订阅密钥。
  • headers:语音服务的附加HTTP头部。
  • mode:选择要使用的合成器。可以是restwebsocket
    • 在websocket模式下,合成器将在创建SpeechService实例时连接到端点。

之后,您可以调用speak_text()来朗读文本,或调用speak_ssml()来朗读SSML。或者您也可以调用synthesize_text()synthesize_ssml()来获取音频数据。

对于synthesize_text()synthesize_ssml(),如果您提供了output,音频数据将被写入该文件,函数将返回None。否则,函数将返回音频数据。

以下是speak_text()synthesize_text()的常见选项:

  • locale:声音的locale。默认为en-US
  • voice:声音名称。默认为en-US-JennyNeural
  • rate:声音的说话速度。它必须是一个字符串,符合本节中记录的要求:[音调和速度](#readme-pitch-and-rate)
  • pitch:声音的音调。它必须是一个字符串,符合本节中记录的要求:[音调和速度](#readme-pitch-and-rate)
  • style:声音的风格。
    • 您可以通过执行aspeak -L -v <VOICE_ID>来获取特定声音的可用风格列表。
    • 默认值为general
  • style_degree:风格的程度。
    • 根据[Azure文档](https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/speech-synthesis-markup?tabs=csharp#adjust-speaking-styles) ,风格程度指定了说话风格的程度。它是一个介于0.01和2之间的浮点数,包括2。
    • 截至写作时,风格程度调整仅支持中文(普通话,简体)神经声音。
  • role:声音的角色。
    • 根据Azure 文档role指定了说话角色扮演。声音可以扮演不同的年龄和性别,但声音名称不会改变。
    • 截至写作时,以下这些中文(普通话,简体)神经声音支持角色调整:zh-CN-XiaomoNeuralzh-CN-XiaoxuanNeuralzh-CN-YunxiNeuralzh-CN-YunyeNeural

Rust

aspeak添加到您的Cargo.toml

$ cargo add aspeak

然后按照aspeak crate的文档进行操作。

有4个示例供快速参考

依赖关系

~7–44MB
~743K SLoC