指南

C++ 文字转语音:为游戏和应用提供自然的声音

C++ 没有标准的文字转语音库。常见选择有:各操作系统的语音 API(Windows、macOS、Linux 各不相同)、像 eSpeak NG 这样听起来像机器人的老式共振峰合成器,或者从 C++ 调用的神经网络引擎。最后一种能在所有平台上提供一致的自然声音。请注意:Supertonic 3 暂不支持中文。

SuperClonica 提供 31 种语言的自然声音,可在线免费试听,还有带命令行和 Docker HTTP 服务器的免费引擎,以及 170 多个目录声音。本指南介绍在 C++ 中使用它的两种方式:预先生成台词,以及运行时调用本地服务器。

C++ 中的语音方案

多数游戏对固定对话使用预生成文件,只把玩家输入的文字交给服务器。

  • 系统 API:Windows 的 SAPI、Apple 系统的 AVSpeechSynthesizer、Linux 的 Speech Dispatcher,需要三套代码。
  • eSpeak NG:体积小、易嵌入,但明显像机器人。
  • 预生成文件:游戏或应用的台词生成一次,以 WAV 或 OGG 随包发布。
  • 本地 HTTP 服务器:程序发送文字,收到 WAV。

在线免费挑选声音

在任意声音页面输入 30 到 100 个字符的台词,选择语言并点击生成按钮。几秒后就能听出是否适合你的游戏或应用,无需注册。

预先为台词配音

相同的文字、声音和 seed 总会生成相同的文件,所以配好的台词可以放进版本控制,需要时重新生成。

  • 安装引擎:python -m pip install superclonica-cpu。
  • 在构建脚本或工具中调用命令行:std::system("superclonica --text \"Welcome, traveler.\" --voice M2 --lang en --output welcome.wav");
  • 文件名决定格式:WAV、MP3、OGG 或 FLAC。
  • 用你已在使用的音频库加载文件,例如 SDL_mixer、SFML、raylib 或 miniaudio。

运行时的语音服务器

对于运行时才出现的文字,先启动一次服务器:docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu。然后用 libcurl 发送 JSON,并把响应写入文件(包含 curl/curl.h 并链接 libcurl):std::string body = R"({"text": "Welcome, traveler.", "voice": "M2", "lang": "en"})"; CURL* c = curl_easy_init(); curl_slist* h = curl_slist_append(nullptr, "Content-Type: application/json"); curl_easy_setopt(c, CURLOPT_URL, "http://localhost:8000/synthesize"); curl_easy_setopt(c, CURLOPT_HTTPHEADER, h); curl_easy_setopt(c, CURLOPT_POSTFIELDS, body.c_str()); FILE* f = std::fopen("welcome.wav", "wb"); curl_easy_setopt(c, CURLOPT_WRITEDATA, f); curl_easy_perform(c); std::fclose(f); curl_slist_free_all(h); curl_easy_cleanup(c); 响应是 16 位单声道 WAV,响应头 X-Sample-Rate 和 X-Duration-Seconds 描述了它。如果服务器不在玩家自己的电脑上,请设置 SUPERCLONICA_API_KEY 并把服务器放在私有网络中。

可随产品发布的声音

要发布的游戏或应用,请使用在 OpenRAIL-M 许可下免费的十个标准声音(M1 至 M5、F1 至 F5),或用征得同意的配音演员录音在 SuperClonica 工作室训练的你自己的声音。引擎和 Docker 镜像采用 Apache 2.0 许可。目录中粉丝制作的角色声音仅用于粉丝项目,不能用于商业发布。