Skip to content

音频

文本转语音和语音转文字端点。

认证

两种方式均支持 — 所有请求通过 x402 链上结算:

方式Header描述
API KeyAuthorization: Bearer sk-...平台自动从你的 HD 钱包签名 x402
私钥(x402)通过 SDK 自动Agent 直接从自身钱包签名 x402

详见 Agent 支付(x402) 了解完整详情。

文本转语音

POST /v1/audio/speech

将文本转换为语音音频。

请求

json
{
  "model": "auto/tts",
  "input": "你好,欢迎来到 JarvisClaw!",
  "voice": "sarah"
}

参数

参数类型必填描述
modelstringTTS 模型 ID(默认: elevenlabs/flash-v2.5)。见下方可用模型
inputstring要合成的文本(最大长度取决于模型 — 见表格)
voicestring音色别名(如 sarah, george, charlie, charlotte, aria)或原始 ElevenLabs voice_id。默认: sarah
instructionsstring系统级指令用于指导语音风格。需要 OpenAI TTS 模型;当前清单中没有此类模型,故下表 ElevenLabs 模型会忽略该参数
response_formatstring音频格式: mp3(默认), opus, pcm, wav
speedfloat播放速度(0.7 到 1.2)。默认: 1.0
stream_formatstring流式格式。设为 sse 启用音频块的 Server-Sent Events 流式传输
metadataobject可选元数据

响应

返回 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-1openai/tts-1-hdopenai/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 形式发送:

参数类型必填描述
filefile要转录的音频文件
modelstring必须为 whisper-1
languagestring语言提示(ISO 639-1 代码),如 zh, en
response_formatstringjson(默认), text, srt, verbose_json, vtt
temperaturefloat采样温度(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)