# Audio

> Generate speech and dialogue, design and change voices, dub, create sound effects, transcribe, and clean or trim audio with the Nodaro MCP audio tools.

Source: https://nodaro.ai/docs/mcp/tools/audio

The **audio tools** let an assistant make and change sound in Nodaro: speech and dialogue, new and changed voices, dubbing, sound effects, transcripts, and clean-up. Each tool except `list_voices` starts a job and returns its id, and the result is saved to your library. Every audio tool needs the `workflows:execute` permission.

| Tool | What it does |
| --- | --- |
| [`generate_speech`](#generate_speech) | Text to speech with a voice |
| [`generate_dialogue`](#generate_dialogue) | A conversation between several voices, as one file |
| [`list_voices`](#list_voices) | The premade voices |
| [`voice_design`](#voice_design) | A new voice from a description |
| [`voice_remix`](#voice_remix) | Speech in a voice you describe, without a voice id |
| [`voice_changer`](#voice_changer) | Changes the voice of a recording or a video |
| [`voice_changer_pro`](#voice_changer_pro) | Changes several speakers' voices at once |
| [`dubbing`](#dubbing) | Translates speech into another language, keeping the voices |
| [`text_to_audio`](#text_to_audio) | Sound effects from a description |
| [`transcribe`](#transcribe) | Speech to text, with word timings |
| [`audio_isolation`](#audio_isolation) | Isolates the main voice or sound from a mix |
| [`separate_audio`](#separate_audio) | Splits audio into vocals and instrumental, or into stems |
| [`apply_audio_fx`](#apply_audio_fx) | Reverbs and effects that place a voice in a space |
| [`trim_audio`](#trim_audio) | Trims audio, or extracts it from a video |
| [`download_youtube_audio`](#download_youtube_audio) | The audio track of a YouTube video |

## `generate_speech`

Turns text into speech with an ElevenLabs voice. It works like the [Text to Speech](https://nodaro.ai/docs/nodes/audio/text-to-speech) node.

**Permission:** `workflows:execute`. **Credits:** the price of the model, below.

| Model | Maker | Modes | Credits | Details |
| --- | --- | --- | --- | --- |
| [ElevenLabs v3](https://nodaro.ai/docs/models/audio/elevenlabs-v3) | ElevenLabs | Text to speech | 30 | Latest ElevenLabs TTS — supports [audio tags] for emotion / pacing. Direct API. |
| [ElevenLabs Turbo v2.5](https://nodaro.ai/docs/models/audio/elevenlabs-turbo-v2-5) | ElevenLabs | Text to speech | 15 | Fast, cheap ElevenLabs TTS via the direct ElevenLabs API. Good for narration. |
| [ElevenLabs Multilingual v2](https://nodaro.ai/docs/models/audio/elevenlabs-multilingual-v2) | ElevenLabs | Text to speech | 30 | Multi-language ElevenLabs TTS via the direct ElevenLabs API. |

| Parameter | Type | Notes |
| --- | --- | --- |
| `text` | string | **Required.** What to say, up to 5,000 characters. Split a longer script into several calls. |
| `voice_id` | string | A premade voice name, or the id of a voice you cloned. Default `Rachel`. An unknown id fails with `voice_not_found`. |
| `voice_type` | string | `premade`, `custom` or `library`. |
| `model` | string | `elevenlabs-v3` (default), `elevenlabs-turbo` or `elevenlabs-multilingual`. |
| `language_code` | string | The language of the text. |
| `stability`, `similarity_boost`, `style` | number | Delivery settings, from 0 to 1. |
| `speed` | number | From 0.7 to 1.2. |
| `presetId` | string | A delivery preset, such as **Calm Narrator**, **Commercial Read** or **Audiobook**, from [`list_node_presets`](https://nodaro.ai/docs/mcp/tools/models-and-credits#list_node_presets). You still pass `text`. |

**Choosing a model.** ElevenLabs v3 supports audio tags such as `[laughs]`, `[whispers]` and `[sighs]` for emotion and pacing, and it is fully multilingual: use it for every language, including Hebrew, Arabic, Chinese, Japanese and Korean. ElevenLabs Turbo is cheaper for plain narration. ElevenLabs Multilingual v2 is a legacy model; use it only for a voice known to work only on v2.

**Choosing a voice.** The premade voices are Rachel, Aria, Roger, Sarah, Laura, Charlie, George, Callum, River, Liam, Charlotte, Alice, Matilda, Will, Jessica, Eric, Chris, Brian, Daniel, Lily and Bill. For a warm female voice try Rachel, for a young female voice Aria or Lily, for a deep male voice Roger or Brian, for a neutral male voice George or Daniel, and for a British voice Charlie or Charlotte.

**Returns:** a job id. The card plays the audio when it is ready.

## `generate_dialogue`

Voices a script of several speakers as one audio file, with natural turn-taking, on ElevenLabs Dialogue v3. Use it for conversations, interviews, podcast-style exchanges and scenes, instead of joining separate `generate_speech` clips. It works like the [Text to Dialogue](https://nodaro.ai/docs/nodes/audio/text-to-dialogue) node.

**Permission:** `workflows:execute`. **Credits:** the price of [ElevenLabs Dialogue v3](https://nodaro.ai/docs/models/audio/elevenlabs-dialogue-v3), per 1,000 characters.

| Parameter | Type | Notes |
| --- | --- | --- |
| `dialogue` | array | **Required.** The lines in speaking order, 1 to 200, each `{ text, voice_id }`. Reuse a voice for the same character. Lines can contain audio tags such as `[laughs]`. |
| `stability` | number | `0` (most varied), `0.5` (balanced) or `1` (most stable). |
| `language_code` | string | A language hint, such as `en` or `he`. Leave it out to detect the language. |
| `seed` | integer | A fixed seed for a repeatable result. |
| `apply_text_normalization` | string | Spells out numbers, dates and abbreviations: `auto` (default), `on` or `off`. |

The limits are 5,000 characters in total, with 2,000 or fewer recommended for the best quality, and 10 different voices per call. Voices can be premade names and cloned voices in the same script.

**Returns:** a job id.

## `list_voices`

Returns the premade voices, with their id, name, and any gender, accent and description details. `generate_speech`, `voice_changer` and `voice_changer_pro` need a voice id.

**Permission:** `workflows:execute`. **Credits:** free.

This tool has no parameters. It reads the catalog and starts no job.

## `voice_design`

Designs a new voice from a description and returns a sample of it speaking your script. Use it to preview a voice before you save it. It works like the [Voice Design](https://nodaro.ai/docs/nodes/audio/voice-design) node.

**Permission:** `workflows:execute`. **Credits:** 50.

| Parameter | Type | Notes |
| --- | --- | --- |
| `voice_description` | string | **Required.** The voice: gender, age, accent, tone and character, up to 1,000 characters. For example "warm female narrator with a soft British accent, low-pitched, calm pacing". |
| `text` | string | **Required.** A sample script for the voice to speak, 100 to 1,000 characters. |
| `model` | string | `eleven_ttv_v3` (default, every language) or the legacy `eleven_multilingual_ttv_v2`. |
| `loudness`, `guidance_scale`, `quality`, `seed`, `should_enhance` | | Optional design settings. |

**Returns:** a job id. The result is an audio sample of the designed voice.

## `voice_remix`

Speaks a text in a voice you describe in words, without a voice id. Use it for a one-off voice that you do not need to keep. It works like the [Voice Remix](https://nodaro.ai/docs/nodes/audio/voice-remix) node.

**Permission:** `workflows:execute`. **Credits:** 40.

| Parameter | Type | Notes |
| --- | --- | --- |
| `text` | string | **Required.** What to say, up to 5,000 characters. |
| `voice_description` | string | **Required.** The voice, up to 1,000 characters, for example "a warm, mid-40s British woman with a calm news-anchor tone". |

**Returns:** a job id.

## `voice_changer`

Replaces the voice in an audio track, or in a whole talking video, while keeping the delivery and the rhythm. It works like the [Voice Changer](https://nodaro.ai/docs/nodes/audio/voice-changer) node.

**Permission:** `workflows:execute`. **Credits:** 40.

| Parameter | Type | Notes |
| --- | --- | --- |
| `voice_id` | string | **Required.** The new voice: a premade name or the id of a voice you cloned. |
| `audio_url` or `audio_asset_id` | string | An audio source. |
| `video_url` or `video_asset_id` | string | A video source instead. The video wins when you pass both. |
| `remove_background_noise` | boolean | `true` returns a clean voice only. `false` keeps the music and sound effects under the new voice. |
| `stability`, `similarity_boost`, `style` | number | From 0 to 1. `style` exaggerates the original delivery; above 0 it is slower and can be less stable. |

**Returns:** a job id. For a video source, the card previews the new audio, and the new video lands in your library.

## `voice_changer_pro`

Detects every speaker in a clip and gives each one a new voice, keeping the words and the timing. Speaker 1 gets the first voice in the list, speaker 2 the second, and so on, in the order they first speak. It works like the [Voice Changer Pro](https://nodaro.ai/docs/nodes/audio/voice-changer-pro) node.

**Permission:** `workflows:execute`. **Credits:** as the Voice Changer Pro node. **Nodaro Cloud only.**

| Parameter | Type | Notes |
| --- | --- | --- |
| `ordered_voices` | array | **Required.** 1 to 8 entries, one per speaker. An entry is a voice id, an object with its own settings, or `null` to keep that speaker's own voice. At least one entry must not be `null`. |
| `audio_url`, `audio_asset_id`, `video_url` or `video_asset_id` | string | The source: an audio track, or a video whose voices are changed. |
| `analysis` | object | The output of an earlier `voice_changer_pro_analyze` job. The change then uses exactly the speaker list you mapped your voices to, instead of detecting the speakers again. |
| `preserve_background` | boolean | Mixes the music and sound effects back under the new voices. Default `true`. |
| `music_volume_mode`, `music_volume` | | The level of the background: `match` (original), `normalize` or `manual` with a volume from 0 to 200. |
| `voice_fx` | object | A reverb or effect on the new voices, before the background returns: a `preset` such as `room`, `hall`, `church`, `telephone` or `echo`, with `wetDryMix`, `delayMs` and `decay`. |
| `separation_quality` | string | `fast` (default) or `best`. |
| `remove_background_noise` | boolean | Removes background noise first, for a clean voice-only result. |
| `output` | string | `video` (default), a finished video, or `stems`, the separate tracks for your own mix with `voice_changer_pro_export`. |
| `model` | string | A voice model override. |

A voice entry object takes `voiceId` and optional `engine`, `stability`, `similarityBoost`, `style`, `useSpeakerBoost`, `seed`, `volumeMode` and `volume`. The `engine` is `sts` (the default, which changes the voice of the original performance) or `v3`, which re-speaks the line from its transcript with ElevenLabs v3. The `v3` engine accepts audio tags and a stability of 0, 0.5 or 1, and it reads the transcript from the `analysis`; without an analysis, it uses its own transcription.

**Returns:** a job id.

## `voice_changer_pro_analyze`

Detects the speakers in a clip without changing them: the first step of the interactive flow. The job output holds the separated voice and background tracks, each speaker with its time segments, first appearance, word count and a text snippet, and the language. Check it to choose a voice for each speaker, and to spot "speakers" that are not people, such as applause.

**Permission:** `workflows:execute`. **Nodaro Cloud only.**

| Parameter | Type | Notes |
| --- | --- | --- |
| `audio_url`, `audio_asset_id`, `video_url` or `video_asset_id` | string | The source clip. |
| `separation_quality` | string | `fast` (default) or `best`. |
| `suggest_title` | boolean | Also suggests a title from the transcript, as `suggestedTitle`. |

**Returns:** a job id. Pass its `output_data` to `voice_changer_pro` as `analysis`.

## `voice_changer_pro_export`

Renders a finished video from your own mix of tracks: the last step of the interactive flow, after `voice_changer_pro` with `output: "stems"`. The video is copied without re-encoding.

**Permission:** `workflows:execute`. **Nodaro Cloud only.**

| Parameter | Type | Notes |
| --- | --- | --- |
| `tracks` | array | **Required.** 1 to 16 tracks, each with a `url`, a `gain` from 0 to 200 (100 is unchanged), `muted`, and a `kind`, `voice` (default) or `background`. At least one track must not be muted. |
| `video_url` or `video_asset_id` | string | The source video. |
| `voice_fx` | object | An effect applied to the voice tracks only. |

**Returns:** a job id.

## `dubbing`

Translates speech into another language while keeping each speaker's voice and timing. A video source returns the dubbed video and its audio track. It works like the [Dubbing](https://nodaro.ai/docs/nodes/audio/dubbing) node.

**Permission:** `workflows:execute`. **Credits:** priced per minute of the dubbed span.

| Parameter | Type | Notes |
| --- | --- | --- |
| `target_language` | string | **Required.** A language code, such as `en`, `es`, `fr`, `de`, `ja`, `zh`, `ko` or `ar`. |
| `audio_url`, `audio_asset_id`, `video_url`, `video_asset_id` or `source_url` | string | **Exactly one source.** `source_url` is a public YouTube, TikTok or direct link that is fetched directly. |
| `source_language` | string | A hint for the source language. It is detected when you leave it out. |
| `num_speakers` | integer | The number of different voices, up to 20. `0` detects them. |
| `disable_voice_cloning` | boolean | Uses a similar native voice instead of each speaker's own voice. |
| `drop_background_audio` | boolean | Removes the background, for speech-only sources. |
| `start_time`, `end_time` | number | Dubs only part of the source, in seconds. |
| `highest_resolution` | boolean | Keeps the source resolution of a video. Slower. |
| `use_profanity_filter`, `target_accent`, `watermark` | | Optional. `target_accent` steers the voices toward an accent. |

A dub covers at most 30 minutes. Use `start_time` and `end_time` for part of a longer source.

**Returns:** a job id.

## `text_to_audio`

Creates a sound effect from a description: foley, ambience, interface sounds. It is not for speech or music. It works like the [Text to Audio](https://nodaro.ai/docs/nodes/audio/text-to-audio) node.

**Permission:** `workflows:execute`. **Credits:** the price of [ElevenLabs Sound Effects](https://nodaro.ai/docs/models/audio/elevenlabs-sound-effects).

| Parameter | Type | Notes |
| --- | --- | --- |
| `prompt` | string | The sound, for example "thunderstorm with heavy rain", up to 2,000 characters. Required unless a preset supplies it. |
| `duration` | number | From 0.5 to 30 seconds. By default the model decides. |
| `loop` | boolean | Makes the sound loop seamlessly. |
| `prompt_influence` | number | How closely the sound follows the prompt, from 0 to 1. |
| `presetId` | string | A preset such as **Rain Ambience**, **Whoosh** or **Impact / Boom**. |

**Returns:** a job id.

## `transcribe`

Turns speech in an audio or video file into text on the ElevenLabs STT engine. The word timings, in milliseconds, are always in `output_data.json.words`. It works like the [Transcribe](https://nodaro.ai/docs/nodes/audio/transcribe) node.

**Permission:** `workflows:execute`. **Credits:** the price of [ElevenLabs STT](https://nodaro.ai/docs/models/audio/elevenlabs-stt).

| Parameter | Type | Notes |
| --- | --- | --- |
| `audio_url` or `audio_asset_id` | string | The source. The id can be an audio or a video job. |
| `language` | string | A language code such as `en`. Detected when you leave it out. |
| `diarize` | boolean | Labels each speaker. Default `false`. |
| `tag_audio_events` | boolean | Marks sounds such as `[laughter]` or `[music]`. Default `false`. |
| `word_timestamps` | boolean | Kept for compatibility. Word timings are returned either way. |

**Returns:** a job id. The transcript is in the job output. To caption a video with corrected text, map `json.words` into the `captions` of [`add_captions`](https://nodaro.ai/docs/mcp/tools/video-editing#add_captions), one entry per word. The Whisper engines are available on the canvas node, the REST API, the SDK and the CLI, not through this tool.

## `audio_isolation`

Removes background music and noise from a mix and returns the main voice, vocals or instrument as one clean track. It works like the [Voice Extractor](https://nodaro.ai/docs/nodes/audio/voice-extractor) node.

**Permission:** `workflows:execute`. **Credits:** the price of [ElevenLabs Voice Isolation](https://nodaro.ai/docs/models/audio/elevenlabs-voice-isolation), by length.

| Parameter | Type | Notes |
| --- | --- | --- |
| `audio_url` or `audio_asset_id` | string | The source. The id can be an audio or a video job. |

**Returns:** a job id.

## `separate_audio`

Splits any audio into vocals and instrumental, or into full stems: drums, bass, guitar, piano and other. It runs Demucs, and unlike `suno_separate_stems`, it needs no Suno track. It works like the [Audio Separation](https://nodaro.ai/docs/nodes/audio/audio-separation) node.

**Permission:** `workflows:execute`. **Credits:** from 30 to 80, by mode and quality.

| Parameter | Type | Notes |
| --- | --- | --- |
| `audio_url` or `audio_asset_id` | string | The source. |
| `mode` | string | `vocal_instrumental` (default) or `stems`. |
| `quality` | string | `auto` (default), `fast` or `best`. |

**Returns:** a job id. Read each stem's URL, such as `vocalUrl`, `instrumentalUrl` or `drumsUrl`, with `get_job`.

## `apply_audio_fx`

Applies a creative effect to a voice or a clip: a reverb that places a dry voice in a space, or a telephone, megaphone or echo effect. It works like the [Audio FX](https://nodaro.ai/docs/nodes/audio/audio-fx) node.

**Permission:** `workflows:execute`. **Credits:** 20.

| Parameter | Type | Notes |
| --- | --- | --- |
| `audio_url` or `audio_asset_id` | string | The source. The id can be an audio or a video job. |
| `preset` | string | `room` (default), `bathroom`, `car`, `hall`, `concert-hall`, `church`, `cave`, `arena`, `outdoor`, `telephone`, `megaphone`, `echo` or `custom`. |
| `mix` | number | How much reverb, from 0 to 100. |

**Returns:** a job id.

## `trim_audio`

Trims audio to a time window, or extracts the audio of a video and trims it. It works like the [Trim Audio](https://nodaro.ai/docs/nodes/audio/trim-audio) node.

**Permission:** `workflows:execute`. **Credits:** 10.

| Parameter | Type | Notes |
| --- | --- | --- |
| `audio_url`, `audio_asset_id`, `video_url` or `video_asset_id` | string | One source. A video source gives its audio track. |
| `start_time`, `end_time` | number | The window in seconds. Leave both out to keep the whole track. |
| `audio_format` | string | `mp3` (default), `wav` or `aac`. |

**Returns:** a job id.

## `download_youtube_audio`

Extracts the audio track of a YouTube video.

**Permission:** `workflows:execute`.

| Parameter | Type | Notes |
| --- | --- | --- |
| `youtube_url` | string | **Required.** The YouTube video URL. |

**Returns:** a job id. The result is an audio file you can pass to other tools.

## Frequently asked questions

### Which voice does generate_speech use by default?

Rachel, on the ElevenLabs v3 model. Pass voice_id with a premade voice name such as Aria, Roger or Charlotte, or the id of a voice you cloned. list_voices returns the premade voices.

### How do I make a conversation between two voices?

Use generate_dialogue with an ordered list of lines, each with its text and voice. It returns one audio file with natural turn-taking, which sounds better than joining separate speech clips.

### Does ElevenLabs v3 speak languages other than English?

Yes. It is fully multilingual, including Hebrew, Arabic, Chinese, Japanese and Korean, so use it for every language. It also understands audio tags such as [laughs] and [whispers].

### How do I get word timings for captions?

Call transcribe. The word timings, in milliseconds, are always in the job's output_data.json.words, which is the shape add_captions accepts as captions.

### Can I change several voices in one clip?

Yes, on Nodaro Cloud, with voice_changer_pro. It detects each speaker and gives each one the voice you list for it, in the order they first speak, while keeping the words and the timing.
