关于 speech
Drawcall Speech 将文本转换为可播放的音频,适合为应用添加语音内容的开发者。它将声音选择与可选的表达指导分开,并缓存重复请求。
主要功能
- 01生成文本转音频 URL
- 02选择具名声音
- 03可选表达风格指导
- 04文本内嵌表演指示
- 05缓存重复请求
适用场景
- 01为游戏添加 NPC 对话
- 02制作旁白或教程语音
- 03提供无障碍朗读
- 04播放 UI 语音提示
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ drawcall-ai/ speech --skill speech安装后在 Claude Code 中输入/speech确认已加载。
详细介绍
语音
使用 Drawcall Speech 生成语音输出:NPC 对话、旁白、教程语音、无障碍朗读和 UI 语音。它会将文本转换为音频片段 URL,供应用加载和播放。
端点
Drawcall Speech 会将文本转换为音频 URL。
GET https://v1.speech.drawcall.ai/?text=Hello+world&voice=Zephyr
text:必填,URL 编码、去除首尾空格,最多 1000 个字符。style:可选,URL 编码、去除首尾空格,最多 1000 个字符。可用于指定语气、情绪、口音、语速和停顿等演绎要求。voice:可选,默认为Zephyr。- 未知的 voice 名称也会回退到
Zephyr;请将角色定位和演绎说明放在style中。 - 响应:音频文件,通常为
audio/wav。 - 缓存:生成的片段会按文本、style 和 voice 缓存;重复播放时请复用相同的 URL。
- 错误:输入无效时返回纯文本
400,生成失败时返回502。
风格
普通台词使用 text 和 voice。只有整句或整个片段需要整体演绎指导时,才添加 style。这符合常见的 TTS 划分方式:转录文本与语音选择分开,演绎控制则是可选的。style 是 Drawcall Speech 对自然语言演绎说明的公开名称;它是一个便捷名称,并非通用的 TTS 标准,但与 Gemini 风格提示词和 Azure 风格的 SSML 命名相适配,且不会暴露模型提示词机制。
将要说出的内容放在 text 中;如果整句需要指定语气、情绪、口音、语速或停顿,则将整句演绎说明放在 style 中。如果控制要求仅适用于特定词语或节拍,在 text 中加入行内舞台指示通常就足够了,无需单独设置 style。Style 只能尽力实现,无法达到采样级的精准定时;如需精准定时,请预先生成并编辑音频素材。
合适的 style 值:
用温暖而兴奋的语气说,第一句后停顿较长。用缓慢的诡异耳语读出这段内容,并在接近结尾时紧张地笑一声。使用平静的英式旁白语气,并在分句之间短暂停顿。
对于特定位置的局部变化,在 text 中加入行内舞台指示效果更好。使用方括号标注指示,例如 [pause]、[long pause]、[whispers]、[shouting]、[happy]、[sad]、[laughs] 或 [very slow]。服务会要求模型将方括号中的指示视为表演说明,而非朗读内容,但效果仍取决于模型。整体演绎要求放在 style 中;定时或局部变化放在 text 中。
GET https://v1.speech.drawcall.ai/?text=Hello+from+Drawcall.+Now+we+continue.&voice=Puck&style=Say+warmly+and+excitedly,+with+a+long+dramatic+pause+after+the+first+sentence.
GET https://v1.speech.drawcall.ai/?text=[whispers]+I+found+it.+[long+pause]+[shouting]+Run+now!&voice=Puck&style=Start+tense,+then+turn+urgent.
首次请求延迟
首次请求特定的 text、style 和 voice 组合时,端点必须先生成片段才能提供服务。如果测试要求即时播放、动画同步或确定的时序,这段短暂延迟可能会导致应用内行为异常。
如果这点很重要,请在测试前为缓存预热:针对每条所需台词及其 style 和 voice 调用一次端点。之后,对相同 URL 的请求会命中缓存,理应可以即时响应。
如需更严格的控制,可下载并在本地存储音频文件,然后由应用提供服务。折中的做法是编写一个小型语音脚本,预先下载每条台词,同时将语音台词文本保存在同一个源文件中;这样修改台词只需改动一处源文件。
示例
HTML 音频:
<audio
controls
src="https://v1.speech.drawcall.ai/?text=Welcome+to+Drawcall&voice=Zephyr"
></audio>
Three.js 空间音频:
import * as THREE from "three";
const listener = new THREE.AudioListener();
camera.add(listener);
const speaker = new THREE.Object3D();
speaker.position.set(2, 1.5, -3);
scene.add(speaker);
const audio = new THREE.PositionalAudio(listener);
audio.setRefDistance(2);
audio.setRolloffFactor(1.5);
speaker.add(audio);
const text = encodeURIComponent("I am speaking from over here.");
const voice = encodeURIComponent("Puck");
new THREE.AudioLoader().load(
`https://v1.speech.drawcall.ai/?text=${text}&voice=${voice}`,
(buffer) => {
audio.setBuffer(buffer);
audio.setVolume(1);
audio.play();
},
);
语音
已知语音包括 Zephyr、Puck、Charon、Kore、Fenrir、Leda、Orus、Aoede、Callirrhoe、Autonoe、Enceladus、Iapetus、Umbriel、Algieba、Despina、Erinome、Algenib、Rasalgethi、Laomedeia、Achernar、Alnilam、Schedar、Gacrux、Pulcherrima、Achird、Zubenelgenubi、Vindemiatrix、Sadachbia、Sadaltager 和 Sulafat。
浏览器通常要求用户先点击或轻触,才能播放音频。在 UI 中,请从用户手势触发播放;如有需要,请先恢复音频上下文。