2个版本
0.0.2 | 2023年10月28日 |
---|---|
0.0.1 | 2023年10月25日 |
#562 in 音频
210KB
149 行
fry
一个非常简单、愚蠢、无分配、无std的TTS。它有一些极端的限制
- 它可能只能处理固定大小的缓冲区(一次最多32个字符)的文本。
- 它只拼写字符串,实际上并不发音。
- 它使用
espeak
生成声音文件,并使用sox
修改输出以固定长度。 - 它没有输出能力。用户必须知道将此数据存储在哪里。
- 产生的音频仅为16位有符号PCM,单通道。
名称来自术语“vocal fry”。
构建新文件
如果您想为库生成新文件(例如,要更改说话速度),则可以使用data
中的脚本创建新文件。请注意,您必须手动更新脚本和库中的变量,以适应对数据文件所做的任何更改。
generate_base.sh
此脚本使用espeak
和英文字母字符列表创建新文件,以生成[a-z].wav
您可以通过-s
标志修改espeak的参数,以通过“每分钟单词数”设置产生更快的声音。
有关更多详细信息,请参阅man espeak
或man espeak-ng
。
calc.py
此Python文件使用sox
命令和一些基本数学来计算输出,以便在WAV文件中添加0
填充,使所有文件长度完全相同(以字节和时间计)。然后,剥离头文件,以便WAV数据只是简单的原始PCM数据。用户可以决定如何使用此数据。
如果mediainfo
显示与[a-z].wav
不同的信息,则您可能需要更改calc.py
中的常量设置,以生成正确尺寸的填充/原始文件。
待办事项
- 添加一些测试以验证位模式确实被正确连接。
- 简化每个字母的
.wav
文件的构建过程。 - 消除构建
.wav
文件的非 Rust 依赖。-
sox
(calc.py
) -
python
(calc.py
) -
espeak
(generate-base.sh
) -
bash
(generate-base.sh
)
-
- 实际上使用语音合成引擎,而不是手动逐字输入拼写。
- 当它们对消费者可用时,添加
std
和alloc
功能。 - 添加编译时或测试时的测试,以确保以下内容与
lib.rs
文件中的某些常量相匹配- 验证位排列(小端,大端)
- 验证通道数(单声道,立体声)
- 验证采样率(22050,41000等)
- 验证PCM宽度(s16,u16,s32,s8等)
- 将原始数据包装在
PCM
类型中,因为否则测试输出会非常大,泛型覆盖- 位排列(小端,大端)
- 通道数(单声道,立体声)
- 采样率(22050,41000等)
- PCM宽度(s16,u16,s32,s8等)