名称: elevenlabs 描述: | AI驱动的音频生成,使用ElevenLabs API - 文本转语音具有逼真声音、音效生成和从文本描述创作音乐。生成32种语言的自然语音,为游戏和视频创建自定义音效,并创作免版税音乐曲目。
当用户请求以下内容时使用此技能:
- 语音生成或文本转语音转换
- 内容(视频、有声书、播客)的音频旁白
- 游戏、视频或应用程序的音效
- 从文本描述生成音乐
- 多说话者对话或对话音频
- 语音克隆或自定义语音创建
- 实时应用程序的音频流
能力:文本转语音(32种语言,100多种声音)、音效生成、音乐创作、语音克隆、实时音频流
Python SDK: elevenlabs (pip install elevenlabs) 允许工具: [“Bash”, “Read”, “Write”, “AskUserQuestion”]
ElevenLabs 音频生成
目的
此技能通过ElevenLabs API启用AI驱动的音频生成。以32种语言创建逼真文本转语音,为游戏和视频生成自定义音效,并从文本描述创作免版税音乐。支持100多种专业声音、自定义语音克隆、实时流和多说话者对话。
何时使用
当用户要求以下内容时应调用此技能:
- 从文本生成语音(“将此转换为语音”、“创建音频旁白…”)
- 为视频、演示或内容创建配音
- 以特定声音或语言生成音频
- 创建音效(“生成脚步声”、“创建爆炸音频…”)
- 从描述创作音乐(“生成欢快的背景音乐…”)
- 构建多说话者对话或对话
- 从音频样本克隆语音
- 在实时应用程序中流式传输音频
- 创建有声书、播客或音频内容
可用能力
1. 文本转语音(语音生成)
模型:
- Eleven Multilingual v2 (
eleven_multilingual_v2) - 最高质量,29种语言 - Eleven Flash v2.5 (
eleven_flash_v2_5) - 超低75毫秒延迟,32种语言,便宜50% - Eleven Turbo v2.5 (
eleven_turbo_v2_5) - 平衡质量和延迟
特性:
- 100多种预置专业声音
- 从音频样本自定义语音克隆
- 多说话者对话生成
- 实时音频流
- 支持32种语言
- 情感和自然语调
- 语音设置定制(稳定性、相似性、风格)
输出格式:
- MP3(各种比特率:32kbps至192kbps)
- PCM(8kHz至48kHz)
- Opus, µ-law, A-law
2. 音效生成
模型:
- Eleven Text-to-Sound v2 (
eleven_text_to_sound_v2)
特性:
- 从文本描述生成音效
- 可定制持续时间
- 支持循环以无缝音频
- 提示影响控制
- 高质量音频用于游戏、视频、UI/UX
使用案例:
- 游戏音频(脚步声、爆炸、环境音)
- 视频制作声音
- UI/UX声音设计
- 自然声音(雨、风、海浪)
- 机械声音(门、引擎、机器)
- 幻想/科幻效果
3. 音乐生成
特性:
- 文本转音乐创作
- 声乐和器乐轨道
- 多种流派和风格
- 可定制轨道持续时间
- 创作计划(结构化音乐蓝图)
- 免版税生成音乐
参数:
- 文本提示描述所需音乐
- 持续时间控制(毫秒)
- 流派、风格、情绪规范
- 部分级别创作控制
要求:
- 付费ElevenLabs账户(音乐API在免费层不可用)
内容政策:
- 无版权材料(艺术家名称、乐队名称、商标)
- 返回受限提示的建议
指令
步骤1:理解请求
分析用户请求以确定:
- 任务类型:文本转语音、音效或音乐生成
- 内容:要转换的文本/描述
- 声音/音效:特定声音、语言或音效特征
- 格式:输出格式要求(MP3、流式等)
- 持续时间:长度要求(用于音效或音乐)
- 使用案例:旁白、视频、游戏、播客等
步骤2:选择适当模型/能力
对于文本转语音:
- 需要高质量 →
eleven_multilingual_v2 - 低延迟/实时 →
eleven_flash_v2_5 - 平衡 →
eleven_turbo_v2_5
对于音效:
- 使用
eleven_text_to_sound_v2模型 - 考虑持续时间和循环需求
对于音乐:
- 确保用户有付费账户
- 确定轨道长度和风格
步骤3:设置API认证
import os
from elevenlabs.client import ElevenLabs
# 使用API密钥初始化客户端
client = ElevenLabs(api_key=os.environ.get("ELEVENLABS_API_KEY"))
API密钥应设置为环境变量:
export ELEVENLABS_API_KEY="your-api-key-here"
步骤4:根据任务类型实施
文本转语音实施
基本语音生成:
from elevenlabs.client import ElevenLabs
from pathlib import Path
client = ElevenLabs(api_key=os.environ["ELEVENLABS_API_KEY"])
# 生成语音
audio = client.text_to_speech.convert(
text="您的文本内容在此",
voice_id="JBFqnCBsd6RMkjVDRZzb", # 默认声音(George)
model_id="eleven_multilingual_v2",
output_format="mp3_44100_128"
)
# 保存到文件
output_path = Path("speech_output.mp3")
with output_path.open("wb") as f:
for chunk in audio:
f.write(chunk)
print(f"音频保存到: {output_path}")
流式语音(实时):
from elevenlabs.client import ElevenLabs
from elevenlabs import stream
client = ElevenLabs(api_key=os.environ["ELEVENLABS_API_KEY"])
# 实时流式传输音频
audio_stream = client.text_to_speech.convert_as_stream(
text="这将随着生成而流式传输",
voice_id="JBFqnCBsd6RMkjVDRZzb",
model_id="eleven_flash_v2_5", # 用于流式的低延迟模型
output_format="mp3_44100_128"
)
# 流式传输到扬声器
stream(audio_stream)
多说话者对话:
# 用多种声音生成对话
speakers = [
{
"voice_id": "JBFqnCBsd6RMkjVDRZzb", # 说话者1
"text": "你好,今天怎么样?"
},
{
"voice_id": "21m00Tcm4TlvDq8ikWAM", # 说话者2(Rachel)
"text": "我很好,谢谢询问!"
}
]
# 生成每个说话者的音频并合并
from pydub import AudioSegment
combined = AudioSegment.empty()
for speaker in speakers:
audio = client.text_to_speech.convert(
text=speaker["text"],
voice_id=speaker["voice_id"],
model_id="eleven_multilingual_v2"
)
# 保存临时文件
temp_path = Path(f"temp_{speaker['voice_id']}.mp3")
with temp_path.open("wb") as f:
for chunk in audio:
f.write(chunk)
# 添加到合并音频
segment = AudioSegment.from_mp3(str(temp_path))
combined += segment
temp_path.unlink() # 清理
# 导出最终对话
combined.export("dialogue.mp3", format="mp3")
列出可用声音:
# 获取所有可用声音
voices = client.voices.get_all()
print("可用声音:")
for voice in voices.voices:
print(f"- {voice.name} (ID: {voice.voice_id})")
print(f" 标签: {voice.labels}")
print(f" 描述: {voice.description}")
常见声音ID:
JBFqnCBsd6RMkjVDRZzb- George(男性,英语,中年)21m00Tcm4TlvDq8ikWAM- Rachel(女性,英语,年轻)AZnzlk1XvdvUeBnXmlld- Domi(女性,英语,年轻)EXAVITQu4vr4xnSDxMaL- Bella(女性,英语,年轻)ErXwobaYiN019PkySvjV- Antoni(男性,英语,年轻)MF3mGyEYCl7XYWbV9V6O- Elli(女性,英语,年轻)TxGEqnHWrfWFTfGW9XjX- Josh(男性,英语,年轻)
音效实施
基本音效生成:
from elevenlabs.client import ElevenLabs
from pathlib import Path
client = ElevenLabs(api_key=os.environ["ELEVENLABS_API_KEY"])
# 生成音效
audio = client.text_to_sound_effects.convert(
text="木地板上的脚步声,慢速行走",
duration_seconds=5.0,
prompt_influence=0.5 # 如何紧密遵循提示(0.0-1.0)
)
# 保存到文件
output_path = Path("footsteps.mp3")
with output_path.open("wb") as f:
for chunk in audio:
f.write(chunk)
print(f"音效保存到: {output_path}")
循环音效:
# 生成无缝循环音频
audio = client.text_to_sound_effects.convert(
text="轻柔的雨落在树叶上,环境自然声音",
duration_seconds=10.0,
prompt_influence=0.5
# 注意:循环参数可能在较新API版本中可用
)
output_path = Path("rain_loop.mp3")
with output_path.open("wb") as f:
for chunk in audio:
f.write(chunk)
多音效:
# 为游戏生成各种音效
sound_effects = [
{
"name": "explosion",
"description": "大爆炸,碎片落下,动作电影风格",
"duration": 3.0
},
{
"name": "door_open",
"description": "吱吱作响的木门缓慢打开,恐怖氛围",
"duration": 2.0
},
{
"name": "ui_click",
"description": "轻柔按钮点击,UI反馈声音,愉快音调",
"duration": 0.5
}
]
for sfx in sound_effects:
audio = client.text_to_sound_effects.convert(
text=sfx["description"],
duration_seconds=sfx["duration"]
)
output_path = Path(f"{sfx['name']}.mp3")
with output_path.open("wb") as f:
for chunk in audio:
f.write(chunk)
print(f"生成: {output_path}")
音乐生成实施
基本音乐创作:
from elevenlabs.client import ElevenLabs
from pathlib import Path
client = ElevenLabs(api_key=os.environ["ELEVENLABS_API_KEY"])
# 从提示生成音乐
prompt = """欢快的独立流行歌曲,有原声吉他、轻鼓和欢快
旋律。现代和充满活力的感觉,完美适合生活方式视频的背景音乐。
仅器乐,无声乐。"""
try:
audio = client.music_generation.compose(
prompt=prompt,
music_length_ms=30000 # 30秒
)
# 保存音乐文件
output_path = Path("background_music.mp3")
with output_path.open("wb") as f:
for chunk in audio:
f.write(chunk)
print(f"音乐保存到: {output_path}")
except Exception as e:
if "paid" in str(e).lower() or "subscription" in str(e).lower():
print("错误:音乐生成需要付费ElevenLabs账户")
else:
print(f"错误: {e}")
带创作计划的音乐:
# 首先创建结构化创作计划
composition_plan = client.music_generation.composition_plan.create(
prompt="""电子舞曲轨道,有充满活力的渐强、高潮部分和
chill结尾。渐进浩室风格。""",
music_length_ms=60000 # 60秒
)
# 从计划生成音乐(允许更多控制)
audio = client.music_generation.compose(
composition_plan=composition_plan
)
output_path = Path("edm_track.mp3")
with output_path.open("wb") as f:
for chunk in audio:
f.write(chunk)
流派特定音乐:
# 为不同流派/情绪生成音乐
music_prompts = {
"cinematic": """史诗电影管弦乐音乐,有戏剧性弦乐、强大
铜管和英雄主题。完美适合电影预告片,鼓舞人心和宏伟。""",
"lo-fi": """轻松lo-fi嘻哈节拍,有爵士钢琴、乙烯基噼啪声和柔和
鼓。放松学习音乐氛围,器乐。""",
"ambient": """环境音景,有以太垫、微妙纹理和和平
氛围。冥想和镇静,完美适合放松。""",
"game_menu": """神秘幻想游戏菜单音乐,有竖琴、柔和弦乐和
魔法氛围。中世纪RPG感觉,循环背景音乐。"""
}
for name, prompt in music_prompts.items():
try:
audio = client.music_generation.compose(
prompt=prompt,
music_length_ms=20000 # 20秒
)
output_path = Path(f"music_{name}.mp3")
with output_path.open("wb") as f:
for chunk in audio:
f.write(chunk)
print(f"生成: {output_path}")
except Exception as e:
print(f"生成{name}错误: {e}")
步骤5:处理输出和错误
保存音频文件:
from pathlib import Path
def save_audio(audio_generator, filename):
"""将音频生成器保存到文件"""
output_path = Path(filename)
with output_path.open("wb") as f:
for chunk in audio_generator:
f.write(chunk)
print(f"保存: {output_path.absolute()}")
return output_path
错误处理:
import os
from elevenlabs.client import ElevenLabs
def check_api_key():
"""验证API密钥是否设置"""
if not os.environ.get("ELEVENLABS_API_KEY"):
raise ValueError(
"ELEVENLABS_API_KEY未设置。 "
"请设置环境变量: export ELEVENLABS_API_KEY='your-key'"
)
def handle_elevenlabs_request(func, *args, **kwargs):
"""错误处理包装器"""
try:
return func(*args, **kwargs)
except Exception as e:
error_msg = str(e).lower()
if "api key" in error_msg or "authentication" in error_msg:
print("错误:无效或缺失API密钥")
print("设置您的API密钥: export ELEVENLABS_API_KEY='your-key'")
elif "quota" in error_msg or "limit" in error_msg:
print("错误:API配额超出")
print("检查您的使用情况: https://elevenlabs.io/app/usage")
elif "paid" in error_msg or "subscription" in error_msg:
print("错误:此功能需要付费订阅")
elif "bad_prompt" in error_msg:
print("错误:提示包含受限内容")
print("避免版权材料(艺术家名称、品牌)")
else:
print(f"错误: {e}")
raise
步骤6:向用户提供输出
- 报告生成的内容
- 显示文件路径 音频保存位置
- 提供播放选项 如果适用
- 提供改进建议 (不同声音、更长持续时间等)
- 显示元数据 (持续时间、格式、使用模型)
要求
API密钥:
- ElevenLabs API密钥(从 https://elevenlabs.io/app/settings/api-keys 获取)
- 设置为环境变量:
ELEVENLABS_API_KEY
Python包:
pip install elevenlabs pydub python-dotenv
系统:
- Python 3.8+
- 互联网连接用于API访问
- 音频播放库(可选,用于播放生成音频)
- ffmpeg(pydub用于音频处理所需)
账户要求:
- 免费层:文本转语音和音效
- 付费层:音乐生成,更高配额
最佳实践
文本转语音
-
选择适当模型:
- 高质量旁白 →
eleven_multilingual_v2 - 实时/流式 →
eleven_flash_v2_5 - 平衡使用案例 →
eleven_turbo_v2_5
- 高质量旁白 →
-
选择正确声音:
- 匹配声音到内容(年龄、性别、口音)
- 使用
voices.get_all()探索选项 - 考虑声音标签和描述
-
优化使用案例:
- 长内容:使用标准转换,非流式
- 实时应用程序:使用Flash模型与流式
- 对话:每个说话者生成单独音频
-
格式选择:
- 网页/移动:MP3(好质量,小尺寸)
- 高质量:使用较高比特率(128kbps+)
- 电话系统:µ-law 或 A-law 格式
音效生成
-
描述性:
- 包括上下文:“砾石上的脚步声,慢行速度”
- 指定情绪:“吱吱作响的门,恐怖氛围”
- 添加技术细节:“深低音爆炸,动作电影”
-
持续时间控制:
- 短声音:0.5-2秒(UI点击、冲击)
- 中声音:2-5秒(脚步声、门)
- 环境循环:5-10+秒(雨、风、环境)
-
提示影响:
- 高(0.7-1.0):紧密遵循提示,更字面
- 中(0.4-0.6):平衡创造性和遵循
- 低(0.0-0.3):更多创意解释
-
迭代:
- 生成多个变体
- 根据结果调整描述
- 如果需要组合多种效果
音乐生成
-
详细提示:
- 指定流派、乐器、情绪、节奏
- 提及结构(前奏、渐强、高潮、结尾)
- 包括使用案例上下文(游戏菜单、视频背景)
-
避免版权引用:
- 不要提及艺术家名称、乐队名称、歌曲
- 使用通用风格描述代替
- 专注于特征,非示例
-
持续时间规划:
- 短剪辑:10-30秒(循环、背景)
- 完整轨道:60-120秒(完整歌曲)
- 考虑导出时间(更长=更多处理)
-
创作计划:
- 用于复杂多部分轨道
- 更好控制结构
- 允许部分级别定制
通用最佳实践
-
API密钥安全:
- 存储在环境变量中,切勿在代码中
- 本地开发使用
.env文件 - 定期轮换密钥
-
错误处理:
- 始终在try/except中包装API调用
- 检查配额限制
- 提供有用的错误消息
-
成本优化:
- 当质量差异最小化时使用Flash模型
- 尽可能缓存/重用生成音频
- 通过仪表板监控使用情况
-
文件管理:
- 使用描述性文件名
- 按类型组织(语音、音效、音乐)
- 清理临时文件
-
测试:
- 先用短持续时间测试
- 在长生成前验证输出质量
- 检查不同声音/设置
示例
示例1:有声书旁白
用户请求: “将此章节转换为有声书格式”
预期行为:
- 选择适当声音(例如,叙事声音如George)
- 使用高质量模型 (
eleven_multilingual_v2) - 从章节文本生成语音
- 以高比特率保存为MP3
- 报告持续时间和文件位置
audio = client.text_to_speech.convert(
text=chapter_text,
voice_id="JBFqnCBsd6RMkjVDRZzb", # George
model_id="eleven_multilingual_v2",
output_format="mp3_44100_128"
)
save_audio(audio, "chapter_1.mp3")
示例2:视频游戏音效
用户请求: “为奇幻RPG游戏生成音效”
预期行为:
- 创建多音效带描述
- 为每个设置适当持续时间
- 以描述性名称保存
- 组织在游戏音频文件夹中
sfx_list = [
("sword_swing", "剑划破空气,奇幻战斗", 1.0),
("potion_drink", "饮用魔法药水,吞咽声,RPG游戏", 0.8),
("spell_cast", "魔法咒语施放,以太般呼啸声,奇幻魔法", 1.5),
("footsteps_stone", "石地牢地板上的脚步声,回声", 2.0)
]
for name, description, duration in sfx_list:
audio = client.text_to_sound_effects.convert(
text=description,
duration_seconds=duration
)
save_audio(audio, f"sfx_{name}.mp3")
示例3:播客前奏带音乐
用户请求: “创建带语音和背景音乐的播客前奏”
预期行为:
- 生成前奏语音
- 生成背景音乐
- 注意混音需要外部工具(pydub)
- 提供两个音频文件
# 生成前奏语音
intro_text = "欢迎来到Tech Talk播客,我们讨论技术和创新的最新内容。"
speech = client.text_to_speech.convert(
text=intro_text,
voice_id="TxGEqnHWrfWFTfGW9XjX", # Josh(充满活力)
model_id="eleven_flash_v2_5"
)
save_audio(speech, "podcast_intro_voice.mp3")
# 生成背景音乐(需要付费账户)
music = client.music_generation.compose(
prompt="欢快的科技播客前奏音乐,电子节拍,现代和充满活力",
music_length_ms=10000 # 10秒
)
save_audio(music, "podcast_intro_music.mp3")
print("使用音频编辑软件混合语音和音乐")
示例4:多语言内容
用户请求: “创建英语、西班牙语和法语的欢迎消息”
预期行为:
- 每种语言生成语音
- 使用多语言模型
- 为每种语言选择适当声音
- 以语言特定文件名保存
messages = {
"english": ("Hello and welcome!", "JBFqnCBsd6RMkjVDRZzb"),
"spanish": ("¡Hola y bienvenido!", "ThT5KcBeYPX3keUQqHPh"), # 西班牙声音
"french": ("Bonjour et bienvenue!", "XB0fDUnXU5powFXDhCwa") # 法语声音
}
for lang, (text, voice_id) in messages.items():
audio = client.text_to_speech.convert(
text=text,
voice_id=voice_id,
model_id="eleven_multilingual_v2"
)
save_audio(audio, f"welcome_{lang}.mp3")
示例5:实时语音流
用户请求: “将此新闻文章流式传输为音频”
预期行为:
- 使用Flash模型以低延迟
- 流式传输音频随生成
- 提供实时播放或增量保存
from elevenlabs import stream
audio_stream = client.text_to_speech.convert_as_stream(
text=news_article_text,
voice_id="21m00Tcm4TlvDq8ikWAM", # Rachel
model_id="eleven_flash_v2_5",
output_format="mp3_44100_128"
)
# 实时流式传输到扬声器
stream(audio_stream)
限制
-
音乐生成:
- 需要付费订阅
- 不允许版权材料
- 处理时间随持续时间增加
-
API配额:
- 每月字符限制(层依赖)
- 请求速率限制
- 免费与付费层不同限制
-
语音克隆:
- 未在Tier 1实施中涵盖
- 需要语音样本和额外设置
-
音频质量:
- 输出格式影响质量和文件大小
- 更高质量格式可能需要付费层
- 流式传输质量略低于标准
-
语言支持:
- 支持32种语言但质量各异
- 某些声音是语言特定
- 推荐多语言模型用于非英语
-
音效:
- 限于基于描述的生成
- 无法通过API编辑生成效果
- 持续时间限制(通常低于22秒)
-
内容政策:
- 无有害或版权内容
- 音乐生成拒绝艺术家/乐队名称
- 所有端点的严格内容审核
相关技能
image-generation- 用于视觉内容创作python-plotting- 用于可视化音频数据scientific-writing- 用于生成旁白文本python-best-practices- 用于编写干净音频处理代码