音频
文本转语音和语音转文字端点。
认证
两种方式均支持 — 所有请求通过 x402 链上结算:
| 方式 | Header | 描述 |
|---|---|---|
| API Key | Authorization: Bearer sk-... | 平台自动从你的 HD 钱包签名 x402 |
| 私钥(x402) | 通过 SDK 自动 | Agent 直接从自身钱包签名 x402 |
详见 Agent 支付(x402) 了解完整详情。
文本转语音
POST /v1/audio/speech
将文本转换为语音音频。
请求
json
{
"model": "auto/tts",
"input": "你好,欢迎来到 JarvisClaw!",
"voice": "sarah"
}参数
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
model | string | 否 | TTS 模型 ID(默认: elevenlabs/flash-v2.5)。见下方可用模型 |
input | string | 是 | 要合成的文本(最大长度取决于模型 — 见表格) |
voice | string | 否 | 音色别名(如 sarah, george, charlie, charlotte, aria)或原始 ElevenLabs voice_id。默认: sarah |
instructions | string | 否 | 系统级指令用于指导语音风格。需要 OpenAI TTS 模型;当前清单中没有此类模型,故下表 ElevenLabs 模型会忽略该参数 |
response_format | string | 否 | 音频格式: mp3(默认), opus, pcm, wav |
speed | float | 否 | 播放速度(0.7 到 1.2)。默认: 1.0 |
stream_format | string | 否 | 流式格式。设为 sse 启用音频块的 Server-Sent Events 流式传输 |
metadata | object | 否 | 可选元数据 |
响应
返回 JSON,音频链接在 data[0].url:
json
{
"created": 1782225665,
"model": "elevenlabs/flash-v2.5",
"data": [
{ "url": "https://cdn.jarvisclaw.ai/media/media/audios/2026/06/23/QshFG9Df.mp3", "format": "mp3", "characters": 74 }
]
}从 data[0].url 下载音频文件(CDN 托管,保留 48 小时)。SDK 的 speech() 会自动跟随该链接 并返回字节流。
可用模型
| 模型 | 价格 | 最大输入 | 适用场景 |
|---|---|---|---|
elevenlabs/flash-v2.5(默认) | $0.05/千字符 | 40,000 字符 | 实时语音 Agent(约 75ms 延迟) |
elevenlabs/turbo-v2.5 | $0.05/千字符 | 40,000 字符 | 质量与延迟均衡 |
elevenlabs/multilingual-v2 | $0.12/千字符 | 10,000 字符 | 录音棚级旁白 |
elevenlabs/v3 | $0.12/千字符 | 5,000 字符 | 最高质量,最新模型 |
elevenlabs/sound-effects | $0.12/千字符 | — | 音效生成 |
auto/tts | 不定 | 不定 | 自动选择最佳模型 |
OpenAI TTS 模型当前未上架
openai/tts-1、openai/tts-1-hd、openai/gpt-4o-mini-tts 不在当前模型清单内,请以 GET /v1/models 为准。instructions 参数依赖这些模型,因此在 ElevenLabs 上无效。
auto/tts 与 x402 钱包
实测中智能路由 TTS 对钱包直付(private_key)调用方结算失败。用自己的钱包付费时请显式指定 ElevenLabs 模型;API Key 调用不受影响。
SDK 示例
python
from openai import OpenAI
client = OpenAI(
api_key="sk-your-api-key",
base_url="https://api.jarvisclaw.ai/v1"
)
# 默认使用 ElevenLabs(更高质量,更长输入)
response = client.audio.speech.create(
model="auto/tts",
voice="sarah",
input="你好世界!这是 JarvisClaw 文本转语音。"
)
response.stream_to_file("output.mp3")python
from jarvisclaw import AudioClient
audio = AudioClient(api_key="sk-your-api-key")
# 文本转语音
audio.speak("你好世界!", voice="sarah", output="hello.mp3")
# 流式传输(适用于长文本)
for chunk in audio.speak_stream("很长的文本...", voice="george"):
process(chunk)python
from jarvisclaw import AudioClient
# x402 Agent 钱包 — 通过 Base 上的 USDC 按调用付费
audio = AudioClient(private_key="0x<evm-private-key>")
# 文本转语音
audio.speak("你好世界!", voice="sarah", output="hello.mp3")go
package main
import (
"context"
"fmt"
jc "github.com/api-jarvisclaw/go-sdk/v2"
)
func main() {
ctx := context.Background()
ac, _ := jc.NewAudioClient(jc.WithAPIKey("sk-your-api-key"))
// 文本转语音
data, _ := ac.Speak(ctx, "你好世界!",
jc.WithVoice("sarah"), jc.WithAudioFormat("mp3"))
fmt.Printf("音频大小: %d 字节\n", len(data))
}bash
curl https://api.jarvisclaw.ai/v1/audio/speech \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "auto/tts",
"input": "你好世界!",
"voice": "sarah"
}' \
--output speech.mp3语音转文字
POST /v1/audio/transcriptions
将音频转录为文本。兼容 OpenAI Whisper API。
请求
以 multipart/form-data 形式发送:
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
file | file | 是 | 要转录的音频文件 |
model | string | 是 | 必须为 whisper-1 |
language | string | 否 | 语言提示(ISO 639-1 代码),如 zh, en |
response_format | string | 否 | json(默认), text, srt, verbose_json, vtt |
temperature | float | 否 | 采样温度(0 到 1) |
响应
json
{
"text": "转录后的文本内容..."
}SDK 示例
python
from openai import OpenAI
client = OpenAI(
api_key="sk-your-api-key",
base_url="https://api.jarvisclaw.ai/v1"
)
with open("recording.mp3", "rb") as audio_file:
transcript = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file,
)
print(transcript.text)python
from jarvisclaw import AudioClient
audio = AudioClient(api_key="sk-your-api-key")
# 转录音频文件
text = audio.transcribe("recording.mp3", model="whisper-1")
print(text)
# 使用语言提示以获得更好的准确率
text = audio.transcribe("recording.mp3", model="whisper-1", language="zh")
print(text)python
from jarvisclaw import AudioClient
# x402 Agent 钱包 — 通过 Base 上的 USDC 按调用付费
audio = AudioClient(private_key="0x<evm-private-key>")
# 转录音频文件
text = audio.transcribe("recording.mp3", model="whisper-1")
print(text)bash
curl https://api.jarvisclaw.ai/v1/audio/transcriptions \
-H "Authorization: Bearer sk-your-api-key" \
-F file="@recording.mp3" \
-F model="whisper-1"音乐生成
POST /v1/audio/generations
使用 JarvisClaw SDK 从文本提示生成音乐。
SDK 示例
python
from jarvisclaw import AudioClient
audio = AudioClient(api_key="sk-your-api-key")
# 从提示生成音乐
result = audio.music("欢快的电子音乐配合合成贝斯", model="auto/music")
# 保存生成的音乐
with open("track.mp3", "wb") as f:
f.write(result.content)
# 仅器乐(无人声)
result = audio.music("平静的爵士钢琴", instrumental=True)
with open("jazz.mp3", "wb") as f:
f.write(result.content)python
from jarvisclaw import AudioClient
audio = AudioClient(private_key="0x<evm-private-key>")
# 生成音乐(默认等待完成)
result = audio.music("史诗管弦战斗主题", wait=True)
with open("epic.mp3", "wb") as f:
f.write(result.content)go
package main
import (
"context"
"fmt"
jc "github.com/api-jarvisclaw/go-sdk/v2"
)
func main() {
ctx := context.Background()
ac, _ := jc.NewAudioClient(jc.WithAPIKey("sk-your-api-key"))
// 生成音乐
result, _ := ac.Music(ctx, "欢快的电子音乐配合合成贝斯")
fmt.Printf("音乐 URL: %s\n", result.URL)
fmt.Printf("任务 ID: %s, 状态: %s\n", result.ID, result.Status)
}go
package main
import (
"context"
"fmt"
jc "github.com/api-jarvisclaw/go-sdk/v2"
)
func main() {
ctx := context.Background()
// x402 Agent 钱包
ac, _ := jc.NewAudioClient(jc.WithPrivateKey("0x<evm-private-key>"))
result, _ := ac.Music(ctx, "平静的爵士钢琴")
fmt.Printf("音乐 URL: %s\n", result.URL)
}注意事项
- 最大音频文件大小: 25 MB
- 支持的音频格式: mp3, mp4, mpeg, mpga, m4a, wav, webm
- 单次 TTS 合成支持最多 40,000 字符(ElevenLabs)或 4,096 字符(OpenAI)