Multichannel speech-to-text
Multichannel speech-to-text
How-to guide · Assumes you have completed the Speech to Text quickstart.
Overview
The multichannel Speech to Text feature enables you to transcribe audio files where each channel contains a distinct speaker. This is particularly useful for recordings where speakers are isolated on separate audio channels, providing cleaner transcriptions without the need for speaker diarization.
Each channel is processed independently and automatically assigned a speaker ID based on its channel number (channel 0 → speaker_0, channel 1 → speaker_1, etc.). The system extracts individual channels from your input audio file and transcribes them in parallel. By default the API returns one transcript per channel; set multichannel_output_style=combined to instead receive a single transcript with all channels merged into one list sorted by start time, with each word tagged by its channel_index.
Common use cases
- Stereo interview recordings - Interviewer on left channel, interviewee on right channel
- Multi-track podcast recordings - Each participant recorded on a separate track
- Call center recordings - Agent and customer separated on different channels
- Conference recordings - Individual participants isolated on separate channels
- Court proceedings - Multiple parties recorded on distinct channels
Requirements
- An ElevenLabs account with an API key
- Multichannel audio file (WAV, MP3, or other supported formats)
- Maximum 5 channels per audio file
- Each channel should contain only one speaker
How it works
Prepare your multichannel audio
Ensure your audio file has speakers isolated on separate channels. The multichannel feature supports up to 5 channels, with each channel mapped to a specific speaker:
- Channel 0 →
speaker_0 - Channel 1 →
speaker_1 - Channel 2 →
speaker_2 - Channel 3 →
speaker_3 - Channel 4 →
speaker_4
Configure API parameters
When making a speech-to-text request, you must set:
use_multi_channel:truediarize:false(multichannel mode handles speaker separation via channels)
Optionally, control the response shape with:
multichannel_output_style:separate(default) returns one transcript per channel.combinedmerges all channels into a single transcript whose words are sorted by start time, each carrying achannel_index— matching the standard single-channel response shape.combinedrequires timestamps (timestamps_granularitymust not benone) and is not supported with webhook delivery or entity detection/redaction.
The num_speakers parameter cannot be used with multichannel mode as the speaker count is automatically determined by the number of channels. Multichannel mode assumes there will exactly one speaker per channel. If there are more, it will assign the same speaker id to all speakers in the channel.
Process the response
By default (multichannel_output_style=separate), multichannel audio returns a different response format than single-channel:
If you set use_multi_channel: true but provide a single-channel (mono) audio file, you’ll
receive a standard single-channel response, not the multichannel format. The multichannel response
format is only returned when the audio file actually contains multiple channels.
With multichannel_output_style=combined, the response uses the same flat shape as a single-channel transcription (top-level text and words, no transcripts array), with all channels merged into one list sorted by start time. Every word includes a channel_index (and speaker_id) identifying its channel.
Implementation
Basic multichannel transcription
Here’s a complete example of transcribing a stereo audio file with two speakers:
Creating conversation transcripts
The easiest way to get a time-ordered, conversation-style transcript is to request multichannel_output_style=combined — the API returns a single words list, already sorted by start time, with a channel_index and speaker_id on each word:
If you’re using the default separate output, you can merge the per-channel transcripts client-side instead:
Using webhooks with multichannel
Multichannel transcription supports webhook delivery for asynchronous processing:
Webhooks return the separate (per-channel) format. multichannel_output_style=combined is not
currently supported with webhook delivery — use a synchronous request, or merge the per-channel
webhook payload client-side.
Error handling
Common validation errors
Setting diarize=true with multichannel mode
Error: Multichannel mode does not support diarization and assigns speakers based on the channel they speak on.
Solution: Always set diarize=false when using multichannel mode.
Providing num_speakers parameter
Error: Cannot specify num_speakers when use_multi_channel is enabled. The number of speakers
is automatically determined by the number of channels. Solution: Remove the num_speakers
parameter from your request.
Audio file with more than 5 channels
Error: Multichannel mode supports up to 5 channels, but the audio file contains X channels.
Solution: Process only the first 5 channels or pre-process your audio to reduce channel count.
Using combined output without timestamps
Error: multichannel_output_style=‘combined’ requires timestamps; set timestamps_granularity to ‘word’ or ‘character’.
Solution: Combined output sorts words by time, so set timestamps_granularity to word
(the default) or character.
Using combined output with webhooks
Error: multichannel_output_style=‘combined’ is not yet supported with webhook delivery.
Solution: Use a synchronous request with combined, or keep the default separate output
when using webhooks and merge client-side.
Best practices
Audio preparation
For optimal results: - Use 16kHz sample rate for better performance - Remove silent or unused channels before processing - Ensure each channel contains only one speaker - Use lossless formats (WAV) when possible for best quality
Performance optimization
The concurrency cost increases linearly with the number of channels. A 60-second 3-channel file has 3x the concurrency cost of a single-channel file.
You can estimate the processing time for multichannel audio using the following formula:
Where:
- = file duration in seconds
- = number of channels
- = processing speed factor (approximately 30% of real-time)
- = fixed overhead in seconds
- = per-channel overhead in seconds
Example: For a 60-second stereo file (2 channels):
Memory considerations
For large multichannel files, consider streaming or chunking:
FAQ
What happens if my audio has more than 5 channels?
The API will return an error. You’ll need to either select which 5 channels to send to the API or mix down some channels before sending them to the API.
Can I process mono audio with multichannel mode?
Yes, but it’s unnecessary. If you send mono audio with use_multi_channel=true, you’ll receive
a standard single-channel response, not the multichannel format.
Can I get one combined transcript instead of separate per-channel transcripts?
Yes. Set multichannel_output_style=combined to receive a single transcript with all channels
merged and sorted by start time, each word tagged with its channel_index. This matches the
standard single-channel response shape. It requires timestamps and isn’t available with webhook
delivery.
How are speaker IDs assigned?
Speaker IDs are deterministic based on channel number: channel 0 becomes speaker_0, channel 1 becomes speaker_1, and so on.
Can channels have different languages?
Yes, each channel is processed independently and can detect different languages. The language
detection happens per channel. With multichannel_output_style=combined, the top-level
language_code reflects the most confident channel, while each word still carries its
channel_index.