集成:Elevenlabs
ElevenLabs 文本转语音组件,用于 Haystack。
目录
概述
此存储库包含 ElevenLabs 的文本转语音 API 与 Haystack 流水的集成。此包允许您使用 ElevenLabs 的 API 将文本转换为语音,并可选择将生成的音频保存到 AWS S3。
安装
pip install elevenlabs_haystack
使用
ElevenLabs API 密钥
要访问 ElevenLabs API,您需要创建一个账户并获取一个 API 密钥。
- 访问 ElevenLabs 网站并注册一个账户。
- 登录后,导航到个人资料部分。
- 在API 部分,生成一个新的 API 密钥。
- 复制 API 密钥。
AWS 凭证
要将生成的音频文件存储在 AWS S3 上,您需要 AWS 凭证(访问密钥 ID、秘密访问密钥)并指定一个区域。
- 如果您没有 AWS 账户,请在 AWS 注册。
- 创建一个新的 IAM 用户,并分配必要的权限,允许用户将文件上传到 S3。
AmazonS3FullAccess策略足以满足此示例的要求。 - 创建 IAM 用户后,下载或记下AWS 访问密钥 ID 和秘密访问密钥。
- 确定您的 S3 存储桶所在的AWS 区域(例如,
us-east-1)。此信息可以在 AWS 管理控制台中找到。 - 最后,创建或识别将要保存生成的音频文件的 S3 存储桶。
在根目录下创建一个 .env 文件,内容如下(替换为您实际的凭证)
ELEVENLABS_API_KEY=sk_your_elevenlabs_api_key_here
AWS_ACCESS_KEY_ID=your_aws_access_key_id
AWS_SECRET_ACCESS_KEY=your_aws_secret_access_key
AWS_REGION_NAME=us-east-1
AWS_S3_BUCKET_NAME=your_s3_bucket_name
这些变量将使用 dotenv 自动加载,并用于安全地访问 ElevenLabs 和 AWS 服务。
基本文本转语音示例
此示例演示了如何使用 ElevenLabsTextToSpeech 组件将文本转换为语音,并将生成的音频文件保存在本地或 AWS S3 存储桶中。它使用环境变量来访问敏感凭证。
from haystack.utils import Secret
from elevenlabs_haystack import ElevenLabsTextToSpeech
# Initialize the ElevenLabsTextToSpeech component using environment variables for sensitive data
tts = ElevenLabsTextToSpeech(
elevenlabs_api_key=Secret.from_env_var("ELEVENLABS_API_KEY"),
output_folder="audio_files", # Save the generated audio locally
voice_id="Alice", # ElevenLabs voice ID
aws_s3_bucket_name=Secret.from_env_var("AWS_S3_BUCKET_NAME"), # S3 bucket for optional upload
aws_s3_output_folder="s3_files", # Save the generated audio to AWS S3
aws_access_key_id=Secret.from_env_var("AWS_ACCESS_KEY_ID"),
aws_secret_access_key=Secret.from_env_var("AWS_SECRET_ACCESS_KEY"),
aws_region_name=Secret.from_env_var("AWS_REGION_NAME"), # AWS region
voice_settings={
"stability": 0.75,
"similarity_boost": 0.75,
"style": 0.5,
"use_speaker_boost": True, # Optional voice settings
},
)
# Run the text-to-speech conversion
result = tts.run("Hello, world!")
# Print the result
print(result)
"""
{
"id": "elevenlabs-id",
"file_name": "audio_files/elevenlabs-id.mp3",
"s3_file_name": "s3_files/elevenlabs-id.mp3",
"s3_bucket_name": "test-bucket",
"s3_presigned_url": "https://test-bucket.s3.amazonaws.com/s3_files/elevenlabs-id.mp3"
}
"""
使用 Haystack 流水线的示例
此示例演示了如何将 ElevenLabsTextToSpeech 组件集成到 Haystack 流水线中。此外,我们定义了一个 WelcomeTextGenerator 组件,用于生成个性化的欢迎消息。
from haystack import component, Pipeline
from haystack.utils import Secret
from elevenlabs_haystack import ElevenLabsTextToSpeech
# Define a simple component to generate a welcome message
@component
class WelcomeTextGenerator:
"""
A component generating a personal welcome message and making it upper case.
"""
@component.output_types(welcome_text=str, note=str)
def run(self, name: str):
return {
"welcome_text": f'Hello {name}, welcome to Haystack!'.upper(),
"note": "welcome message is ready"
}
# Create a Pipeline
text_pipeline = Pipeline()
# Add WelcomeTextGenerator to the Pipeline
text_pipeline.add_component(
name="welcome_text_generator",
instance=WelcomeTextGenerator()
)
# Add ElevenLabsTextToSpeech to the Pipeline using environment variables
text_pipeline.add_component(
name="tts",
instance=ElevenLabsTextToSpeech(
elevenlabs_api_key=Secret.from_env_var("ELEVENLABS_API_KEY"),
output_folder="audio_files", # Save the generated audio locally
voice_id="Alice", # ElevenLabs voice ID
aws_s3_bucket_name=Secret.from_env_var("AWS_S3_BUCKET_NAME"), # S3 bucket for optional upload
aws_s3_output_folder="s3_files", # Save the generated audio to AWS S3
aws_access_key_id=Secret.from_env_var("AWS_ACCESS_KEY_ID"),
aws_secret_access_key=Secret.from_env_var("AWS_SECRET_ACCESS_KEY"),
aws_region_name=Secret.from_env_var("AWS_REGION_NAME"), # Load region from env
voice_settings={
"stability": 0.75,
"similarity_boost": 0.75,
"style": 0.5,
"use_speaker_boost": True, # Optional voice settings
},
),
)
# Connect the output of WelcomeTextGenerator to the input of ElevenLabsTextToSpeech
text_pipeline.connect(sender="welcome_text_generator.welcome_text", receiver="tts")
# Run the pipeline with a sample name
result = text_pipeline.run({"welcome_text_generator": {"name": "Bilge"}})
# Print the result
print(result)
"""
{
"id": "elevenlabs-id",
"file_name": "audio_files/elevenlabs-id.mp3",
"s3_file_name": "s3_files/elevenlabs-id.mp3",
"s3_bucket_name": "test-bucket",
"s3_presigned_url": "https://test-bucket.s3.amazonaws.com/s3_files/elevenlabs-id.mp3"
}
"""
许可证
本项目根据 MIT 许可证进行许可。
