#tts #buffer #length #channel #signed #characters #16-bit

fry

一个非常简单、无分配、无std的TTS

2个版本

0.0.2 2023年10月28日
0.0.1 2023年10月25日

#562 in 音频

MIT/Apache

210KB
149

fry

crates.io badge docs.rs badge

一个非常简单、愚蠢、无分配、无std的TTS。它有一些极端的限制

  1. 它可能只能处理固定大小的缓冲区(一次最多32个字符)的文本。
  2. 它只拼写字符串,实际上并不发音。
  3. 它使用espeak生成声音文件,并使用sox修改输出以固定长度。
  4. 它没有输出能力。用户必须知道将此数据存储在哪里。
  5. 产生的音频仅为16位有符号PCM,单通道。

名称来自术语“vocal fry”。

构建新文件

如果您想为库生成新文件(例如,要更改说话速度),则可以使用data中的脚本创建新文件。请注意,您必须手动更新脚本和库中的变量,以适应对数据文件所做的任何更改。

generate_base.sh

此脚本使用espeak和英文字母字符列表创建新文件,以生成[a-z].wav您可以通过-s标志修改espeak的参数,以通过“每分钟单词数”设置产生更快的声音。

有关更多详细信息,请参阅man espeakman 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)
  • 实际上使用语音合成引擎,而不是手动逐字输入拼写。
  • 当它们对消费者可用时,添加 stdalloc 功能。
  • 添加编译时或测试时的测试,以确保以下内容与 lib.rs 文件中的某些常量相匹配
    • 验证位排列(小端,大端)
    • 验证通道数(单声道,立体声)
    • 验证采样率(22050,41000等)
    • 验证PCM宽度(s16,u16,s32,s8等)
  • 将原始数据包装在 PCM 类型中,因为否则测试输出会非常大,泛型覆盖
    • 位排列(小端,大端)
    • 通道数(单声道,立体声)
    • 采样率(22050,41000等)
    • PCM宽度(s16,u16,s32,s8等)

依赖关系