能否完成真正的需求?
适合短篇学习音频、产品引导和预生成旁白。当前配置:en、zh、de、ja、fr、es、ko、pt、ru、it,MP3/WAV,每个排队任务最多 500 字符。声音克隆需要已授权参考录音。
如果必须支持实时通话、情绪参数、原生多角色对话或企业 SLA,当前公开服务并不适合。选择语言不会翻译文本。
核对能力边界 →BUILD WITH AI · VERIFY WITH EVIDENCE
从要做的应用出发,先核对五个选型问题,再把接口合同、计费规则和可运行项目交给 AI 工具,而不只是一句产品口号。
01 / Decide能力 + 成本 + 证据02 / Build后端密钥 → 保存任务 → MP303 / Verify播放 + 恢复 + 实际用量适用于能读取网页文档或接收粘贴上下文的编程工具。Codex 用户也可通过我们的 Git 插件市场安装 CastReader;不代表官方合作或自动推荐。
安装 CastReader Codex 插件 →适合短篇学习音频、产品引导和预生成旁白。当前配置:en、zh、de、ja、fr、es、ko、pt、ru、it,MP3/WAV,每个排队任务最多 500 字符。声音克隆需要已授权参考录音。
如果必须支持实时通话、情绪参数、原生多角色对话或企业 SLA,当前公开服务并不适合。选择语言不会翻译文本。
核对能力边界 →真实 API 调用需要已开通工作区。当前支持自助开通;开通后有 3,000 个试用字符,受有效期及每日额度限制。获取 Key 前可以先检查文件、搭建播放器。
验证身份后即可开通,无需人工审核。同一账号仅领取一次试用,保留每日和防滥用限制。密钥只保存在后端。
开通试用 →核验已完成的三个音色、十种语言测试:30 次尝试、29 条保存输出、1 条保留失败,以及原文、机器转写、实际用量与校验值。早期 20 条卡片项目单独保留。
这是少量第一方样本,不是独立评测。ASR 和文件检查不能证明母语发音、声音相似度或自然度,仍需人工评审与自己的应用测试。
查看第一方测试报告 →提交前持久化请求内容和幂等键,再保存 job.id。超时后恢复原任务,succeeded 后下载保留音频。可运行项目包含进度保存与按校验值复用文件。
failed、expired、cancelled 为终态,不自动提交新的收费生成。下载音频返回字节,JSON 错误不能存成 MP3 播放。
使用恢复示例 →公开价为每百万规范化字符 $8,无需 API 月订阅。假设 1,000 条短提示、每条 100 字符,分次生成的费用为 $0.80,未扣免费额度。生成前先估算实际输入。
自己的应用托管、音频存储、分发和维护费用另计。改稿与主动重生成增加字符用量;并发和排队影响交付时间,单价低不等于所有项目总成本都低。
计算自己的用量 →下载无需依赖的 Node.js 检查脚本,在后端运行。它依次检查部署配置、身份认证、区域、语言、就绪音色和不预占余额的费用估算,不调用生成或支付接口。
先在后端安全环境中设置 CASTREADER_API_KEY。可选设置 TTS_LANGUAGE、TTS_TEXT 和 VOICE_ID。使用实际语言的短文本,检查不会翻译内容。
下载接入检查脚本 ↓检查通过不等于合成保证:处理服务、队列和月预算仍以生成时校验为准。查询音色可能初始化内置引用,但不产生合成费用。输出含私人音色 ID,请勿公开上传。
node connection-check.mjs
// Example check output (not a live result):
{
"ok": true,
"generated": false,
"checks": [
{ "stage": "authentication_and_region", "status": "passed" },
{ "stage": "language_and_length", "status": "passed" },
{ "stage": "authorization_and_estimate", "status": "passed" }
]
}
// On failure: failedAt + error.code + recovery action
// Non-zero exit code: stop; do not submit a paid job.下载完整 20 条卡片项目。默认 plan 只读取本地输入,不发起 API 请求。可先用已保存样音搭建播放器,但这不算新合成测试。
下载已验证示例 ↓npm install
node generate.mjs --plan
# Set CASTREADER_API_KEY in your server secret store.
# Only after reviewing input and expected cost:
node generate.mjs --runconst job = await client.createJob({
model: 'clone-v1', voice_id: readyVoiceId,
text, language, output_format: 'mp3'
}, { idempotencyKey: savedKey });
// Persist job.id. Poll this job until terminal.
// Only after status === 'succeeded':
const { audio, chargedUSD } =
await client.getJobAudio(job.id);
await writeFile('speech.mp3', audio);进度保存、轮询和错误逻辑见完整项目。不要将等待循环塞进前端短连接请求;在后端保存原任务,前端只读取状态。
官方 SDK 安装与 REST 文档 →