rw-integrate-audio

Par runwayml · skills

Aide les utilisateurs à intégrer les API audio Runway (TTS, effets sonores, isolation vocale, doublage)

npx skills add https://github.com/runwayml/skills --skill rw-integrate-audio

Intégrer la génération audio

PRÉREQUIS : Exécutez d'abord +rw-check-compatibility. Exécutez +rw-fetch-api-reference pour charger la dernière référence API avant l'intégration. Nécessite +rw-setup-api-key pour les identifiants API. Nécessite +rw-integrate-uploads pour les fichiers audio/vidéo locaux.

Aidez les utilisateurs à ajouter la génération audio Runway à leur code côté serveur.

Modèles disponibles

Modèle Endpoint Cas d'usage Coût
eleven_multilingual_v2 POST /v1/text_to_speech Synthèse vocale 1 crédit/50 caractères
eleven_text_to_sound_v2 POST /v1/sound_effect Génération d'effets sonores 1-2 crédits
eleven_voice_isolation POST /v1/voice_isolation Isoler la voix de l'audio 1 crédit/6 sec
eleven_voice_dubbing POST /v1/voice_dubbing Doubler l'audio dans d'autres langues 1 crédit/2 sec
eleven_multilingual_sts_v2 POST /v1/speech_to_speech Conversion de voix 1 crédit/3 sec

Synthèse vocale

Générez de la parole à partir de texte en utilisant le modèle multilingue ElevenLabs.

Node.js SDK

import RunwayML from '@runwayml/sdk';

const client = new RunwayML();

const task = await client.textToSpeech.create({
  model: 'eleven_multilingual_v2',
  promptText: 'Hello, welcome to our application!',
  voice: { type: 'runway-preset', presetId: 'Maya' }
}).waitForTaskOutput();

const audioUrl = task.output[0];

Python SDK

from runwayml import RunwayML

client = RunwayML()

task = client.text_to_speech.create(
    model='eleven_multilingual_v2',
    prompt_text='Hello, welcome to our application!',
    voice={ 'type': 'runway-preset', 'presetId': 'Maya' }
).wait_for_task_output()

audio_url = task.output[0]

Effets sonores

Générez des effets sonores à partir de descriptions textuelles.

const task = await client.soundEffect.create({
  model: 'eleven_text_to_sound_v2',
  promptText: 'Thunder rolling across a stormy sky'
}).waitForTaskOutput();
task = client.sound_effect.create(
    model='eleven_text_to_sound_v2',
    prompt_text='Thunder rolling across a stormy sky'
).wait_for_task_output()

Isolation vocale

Extrayez la voix de l'audio avec du bruit de fond.

// Si vous utilisez un fichier local, téléchargez-le d'abord
const upload = await client.uploads.createEphemeral(
  fs.createReadStream('/path/to/noisy-audio.mp3')
);

const task = await client.voiceIsolation.create({
  model: 'eleven_voice_isolation',
  audioUri: upload.runwayUri
}).waitForTaskOutput();

Doublage vocal

Doublez l'audio/vidéo dans d'autres langues.

const task = await client.voiceDubbing.create({
  model: 'eleven_voice_dubbing',
  audioUri: 'https://example.com/speech.mp3',
  targetLang: 'es'  // Spanish
}).waitForTaskOutput();

Conversion vocale

Convertissez une voix en une autre.

const task = await client.speechToSpeech.create({
  model: 'eleven_multilingual_sts_v2',
  media: { type: 'audio', uri: 'https://example.com/original-speech.mp3' },
  voice: { type: 'runway-preset', presetId: 'Noah' }
}).waitForTaskOutput();

Modèle d'intégration

Express.js — Endpoint Synthèse vocale

import RunwayML from '@runwayml/sdk';
import express from 'express';

const client = new RunwayML();
const app = express();
app.use(express.json());

app.post('/api/text-to-speech', async (req, res) => {
  try {
    const { text, voiceId } = req.body;

    const task = await client.textToSpeech.create({
      model: 'eleven_multilingual_v2',
      promptText: text,
      voice: { type: 'runway-preset', presetId: voiceId || 'Maya' }
    }).waitForTaskOutput();

    res.json({ audioUrl: task.output[0] });
  } catch (error) {
    console.error('TTS failed:', error);
    res.status(500).json({ error: error.message });
  }
});

FastAPI — Effets sonores

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from runwayml import RunwayML

app = FastAPI()
client = RunwayML()

class SoundRequest(BaseModel):
    prompt: str

@app.post("/api/sound-effect")
async def generate_sound(req: SoundRequest):
    try:
        task = client.sound_effect.create(
            model='eleven_text_to_sound_v2',
            prompt_text=req.prompt
        ).wait_for_task_output()
        return {"audio_url": task.output[0]}
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

Conseils

  • Les URLs de sortie expirent dans 24-48 heures. Téléchargez les fichiers audio dans votre propre stockage.
  • Pour les fichiers audio locaux (isolation vocale, doublage, conversion vocale), téléchargez d'abord via +rw-integrate-uploads.
  • Les IDs de voix peuvent être listés via l'endpoint voices — consultez +rw-api-reference pour les détails.
  • Le coût de la synthèse vocale varie avec la longueur du texte : 1 crédit pour 50 caractères.

Skills similaires