mcpField
M
modelslab-audio-generation

modelslab-audio-generation

github.com/modelslab创意与媒体1370 次安装36 周前更新
代码仓库

关于 modelslab-audio-generation

通过 ModelsLab API 使用 AI 生成和处理语音、音乐及音效的技能,适合需要音频创作或转录的开发者。它涵盖多类语音端点,并提供模型查询与异步结果轮询示例。

主要功能

  1. 01文本转语音与语音转文本
  2. 02语音转换和多语言配音
  3. 03根据提示生成音乐与音效
  4. 04扩展或修补歌曲
  5. 05查询音频模型及其详情

适用场景

  1. 01为有声内容生成旁白
  2. 02转录音频或转换说话者音色
  3. 03为视频或应用制作音乐和音效
  4. 04将音频配制成其他语言

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/modelslab/skills --skill modelslab-audio-generation

安装后在 Claude Code 中输入/modelslab-audio-generation确认已加载。

详细介绍

ModelsLab 音频生成

使用 AI 生成高品质音频,包括语音、音乐、声音转换、音效和配音。

适用场景

  • 将文本转换为自然流畅的语音(TTS)
  • 将语音转录为文本
  • 转换声音特征(语音到语音)
  • 根据文本提示词生成音乐
  • 创建音效
  • 将音频配制成不同语言
  • 延长或修补歌曲
  • 构建语音助手或有声读物

可用 API(v7)

语音端点
  • 文本转语音:POST https://modelslab.com/api/v7/voice/text-to-speech
  • 语音转文本:POST https://modelslab.com/api/v7/voice/speech-to-text
  • 语音到语音:POST https://modelslab.com/api/v7/voice/speech-to-speech
  • 音乐生成:POST https://modelslab.com/api/v7/voice/music-gen
  • 声音生成:POST https://modelslab.com/api/v7/voice/sound-generation
  • 创建配音:POST https://modelslab.com/api/v7/voice/create-dubbing
  • 歌曲延长:POST https://modelslab.com/api/v7/voice/song-extender
  • 歌曲修补:POST https://modelslab.com/api/v7/voice/song-inpaint
  • 获取结果:POST https://modelslab.com/api/v7/voice/fetch/{id}

注意:v6 端点(/api/v6/voice/text_to_speech 等)仍然可用,但 v7 是当前版本。v7 中的参数名称有所变化(例如,text 现在为 prompt,audio 现在为 init_audio)。

发现音频模型

# Search audio/voice models
modelslab models search --feature audio_gen

# Search by provider
modelslab models search --search "eleven"

# Get model details
modelslab models detail --id eleven_multilingual_v2

音频模型 ID

model_id名称适用场景
eleven_multilingual_v2ElevenLabs Multilingual v2文本转语音
eleven_english_sts_v2ElevenLabs Voice Changer语音到语音
scribe_v1ElevenLabs Scribe语音转文本
eleven_sound_effectElevenLabs Sound Effects声音生成
music_v1ElevenLabs Music音乐生成
inworld-tts-1Inworld TTS文本转语音

文本转语音

import requests
import time

def text_to_speech(text, api_key, voice_id="21m00Tcm4TlvDq8ikWAM", model_id="eleven_multilingual_v2"):
    """Convert text to speech.

    Args:
        text: The text to convert to speech
        api_key: Your ModelsLab API key
        voice_id: ElevenLabs voice ID (see Available Voices below)
        model_id: TTS model to use
    """
    response = requests.post(
        "https://modelslab.com/api/v7/voice/text-to-speech",
        json={
            "key": api_key,
            "prompt": text,             # v7 uses "prompt" not "text"
            "voice_id": voice_id,
            "model_id": model_id
        }
    )

    data = response.json()

    if data["status"] == "success":
        return data["output"][0]
    elif data["status"] == "processing":
        return poll_audio_result(data["id"], api_key)
    else:
        raise Exception(f"Error: {data.get('message', 'Unknown error')}")

# Usage
audio_url = text_to_speech(
    "Hello! Welcome to ModelsLab. This is a test of our text-to-speech API.",
    "your_api_key"
)
print(f"Audio URL: {audio_url}")

语音转文本(转录)

def speech_to_text(audio_url, api_key, model_id="scribe_v1"):
    """Transcribe speech from audio to text.

    Args:
        audio_url: URL of audio file (must be publicly accessible)
        model_id: STT model to use
    """
    response = requests.post(
        "https://modelslab.com/api/v7/voice/speech-to-text",
        json={
            "key": api_key,
            "init_audio": audio_url,    # v7 uses "init_audio" not "audio"
            "model_id": model_id
        }
    )

    data = response.json()

    if data["status"] == "success":
        return data["output"][0]
    elif data["status"] == "processing":
        return poll_audio_result(data["id"], api_key)
    else:
        raise Exception(data.get("message"))

# Transcribe audio
result = speech_to_text(
    "https://example.com/speech.mp3",
    "your_api_key"
)
print(f"Transcription: {result}")

语音到语音(声音转换)

def speech_to_speech(audio_url, voice_id, api_key, model_id="eleven_english_sts_v2"):
    """Convert voice characteristics in audio.

    Args:
        audio_url: URL of the source audio
        voice_id: Target ElevenLabs voice ID
        model_id: Voice conversion model
    """
    response = requests.post(
        "https://modelslab.com/api/v7/voice/speech-to-speech",
        json={
            "key": api_key,
            "init_audio": audio_url,
            "voice_id": voice_id,
            "model_id": model_id
        }
    )

    data = response.json()
    if data["status"] == "success":
        return data["output"][0]
    elif data["status"] == "processing":
        return poll_audio_result(data["id"], api_key)

音效生成

def generate_sound_effect(description, api_key, model_id="eleven_sound_effect"):
    """Generate a sound effect from a text description.

    Args:
        description: What sound to generate
        model_id: Sound effects model
    """
    response = requests.post(
        "https://modelslab.com/api/v7/voice/sound-generation",
        json={
            "key": api_key,
            "prompt": description,
            "model_id": model_id
        }
    )

    data = response.json()
    if data["status"] == "success":
        return data["output"][0]
    elif data["status"] == "processing":
        return poll_audio_result(data["id"], api_key)

# Generate door slam sound
sfx_url = generate_sound_effect(
    "Heavy wooden door slamming shut",
    "your_api_key"
)

音乐生成

def generate_music(prompt, api_key, model_id="music_v1"):
    """Generate music from a text description.

    Args:
        prompt: Description of music style/mood
        model_id: Music generation model
    """
    response = requests.post(
        "https://modelslab.com/api/v7/voice/music-gen",
        json={
            "key": api_key,
            "prompt": prompt,
            "model_id": model_id
        }
    )

    data = response.json()
    if data["status"] == "success":
        return data["output"][0]
    elif data["status"] == "processing":
        return poll_audio_result(data["id"], api_key)

# Generate background music
music_url = generate_music(
    "Upbeat electronic music with a driving beat, perfect for a tech startup video",
    "your_api_key"
)
print(f"Music: {music_url}")

轮询异步结果

def poll_audio_result(request_id, api_key, timeout=300):
    """Poll for async audio generation results."""
    start_time = time.time()

    while time.time() - start_time < timeout:
        fetch = requests.post(
            f"https://modelslab.com/api/v7/voice/fetch/{request_id}",
            json={"key": api_key}
        )
        result = fetch.json()

        if result["status"] == "success":
            return result["output"][0]
        elif result["status"] == "failed":
            raise Exception(result.get("message", "Generation failed"))

        time.sleep(5)

    raise Exception("Timeout waiting for audio generation")

可用的 ElevenLabs 声音 ID

声音 ID名称风格
21m00Tcm4TlvDq8ikWAMRachel中性、平静
AZnzlk1XvdvUeBnXmlldDomi自信
EXAVITQu4vr4xnSDxMaLBella柔和、温暖
ErXwobaYiN019PkySvjVAntoni全面均衡
MF3mGyEYCl7XYWbV9V6OElli年轻、清晰
TxGEqnHWrfWFTfGW9XjXJosh低沉、温暖
VR6AewLTigWG4xSOukaGArnold有力
pNInz6obpgDQGcFmaJgBAdam低沉、叙事感
yoZ06aMxZJJ28mfd3POQSam富有活力

关键参数

文本转语音
参数类型必填描述
promptstring是要转换为语音的文本
voice_idstring是ElevenLabs 声音标识符
model_idstring是TTS 模型(例如,eleven_multilingual_v2)
temperaturefloat否声音变化程度
webhookstring否异步通知 URL
语音转文本
参数类型必填描述
init_audiostring是要转录的音频 URL
model_idstring是STT 模型(例如,scribe_v1)
声音生成
参数类型必填描述
promptstring是音效描述
model_idstring是SFX 模型(例如,eleven_sound_effect)

v6 到 v7 的参数变化

v6 参数v7 参数说明
textpromptTTS 文本输入
audioinit_audioSTT/STS 音频输入
target_audioinit_audio声音转换的源音频
(非必填)model_id现在所有端点都必填

最佳实践

1. 使用正确的语音 ID

TTS 需要有效的 ElevenLabs 语音 ID(不能使用“alloy”等通用名称)。

2. 确保音频可访问

用于语音转文本的音频 URL 必须无需重定向或身份验证即可公开访问。

3. 对长时间运行的操作使用 Webhook
payload = {
    "key": api_key,
    "prompt": "...",
    "model_id": "eleven_multilingual_v2",
    "webhook": "https://yourserver.com/webhook/audio",
    "track_id": "audio_001"
}

错误处理

try:
    audio = text_to_speech(text, api_key)
    print(f"Audio generated: {audio}")
except Exception as e:
    print(f"Audio generation failed: {e}")

资源

相关技能

  • modelslab-model-discovery - 查找并筛选模型
  • modelslab-video-generation - 为视频添加音频
  • modelslab-chat-generation - 与 LLM 模型聊天
  • modelslab-webhooks - 处理异步音频生成

评论

支持 Markdown