Dual-channel audio records each speaker of a call on a separate channel: in a contact center, the agent on one channel and the customer on the other. A mono recording sums both voices into a single channel, and spatial stereo from two microphones in one room puts both voices on both channels at different levels. For speech AI, one speaker per channel means every word, pause and interruption already belongs to a known speaker, so no model has to guess who said it.
Our guide to speech data sample rates defines the format next to bit depth and file type. The classic conversational telephone corpora were recorded this way too, as our post on Switchboard and Fisher alternatives describes. This article covers the practical side: what the second channel does for call analytics and voice agents, how to get it out of a telephony stack, and what to check before you buy or record two-channel data.
Mono, stereo and dual-channel are different files
| Layout | What each channel holds | Who spoke when |
|---|---|---|
| Mono mix | Both voices summed into one signal | Has to be inferred by diarization |
| Spatial stereo | Both voices on both channels, from two microphones in one room | Partly recoverable from level and timing differences |
| Dual-channel | One speaker per channel, from separate lines or headsets | Known from the channel, including during overlap |
File headers don't tell these apart. A dual-channel call, a stereo room recording and a mono recording copied onto two channels all report two channels. The checks further down tell them apart in a few minutes.
What one speaker per channel enables
| Task | With one speaker per channel | On a mono mix |
|---|---|---|
| Transcription | Each channel is transcribed on its own, and overlapping words keep overlapping timestamps | Two voices arrive at once; overlapped words are often dropped or given to the wrong speaker |
| Agent and customer attribution | The channel is the role, fixed once per recording setup | A diarization model labels speaker A and B, and something else decides which is the agent |
| Talk time, interruptions, silence | Voice activity on each channel gives exact figures | Estimated from diarization, which errs most where speakers overlap |
| Intent and sentiment labels | Each side's turns are labeled separately | Mixed turns blur who expressed what |
| PII redaction | Silence the customer channel alone | Silencing a span mutes both speakers |
| Side-specific models | Train or test on the customer side or the agent side alone | Separate the voices first |
| Voice agent evaluation | Replay the caller channel and compare with the real agent's timing | One side can't be played without the other |
Call analytics. Most call metrics are measured per speaker. Amazon Transcribe Call Analytics reports talk time as the milliseconds each participant spoke, and flags an interruption when one participant cuts off the other mid-sentence, according to its call characteristics documentation. The service only supports two-channel audio with the agent on one channel and the customer on the other, and its ChannelDefinition setting maps channel 0 or 1 to the role AGENT or CUSTOMER. If you train your own analytics models, the same structure turns talk-time ratio, overlap and hold silence into measured labels rather than estimates.
Redaction. Amazon's post-call redaction replaces spoken personal information in the audio file with silence. With one speaker per channel, a redaction step can silence a card number on the customer channel alone, while the agent's overlapping words stay intact. In a mono mix, the same silence cuts the agent too.
Side-specific models. Agents typically wear headsets at a desk, while customers call from cars, kitchens and speakerphones. Separate channels let you fine-tune a recognizer on caller audio only, report word error rate per side, and keep agent speech out of a test set meant to represent callers.
Voice agents. A deployed voice agent hears only the caller, so the caller channel is its realistic input. Replay a recorded caller channel into the agent under test, and the real agent channel shows where a human yielded, backchanneled or kept talking. Barge-in, the caller cutting in while the agent speaks, shows up as overlap between the two channels' voice activity. Replay isn't interactive, since the recorded caller won't react to your agent, but it gives real timing for where callers cut in. Our article on speech data for voice agents covers the rest of the data brief, and the guide to full-duplex conversational speech data explains why speech-to-speech models train on two-channel conversation.
Diarization. Mixing the two channels down gives a realistic mono input, and the channels supply the reference answer, as our speaker diarization guide explains.
Getting dual-channel audio out of a telephony stack
Telephony and contact-center platforms such as Twilio and Amazon Connect can record each party separately, but the setting, the default and the channel order differ from one platform to the next.
Twilio. The Recordings API takes RecordingChannels set to mono or dual, and dual records each party of a two-party call on its own channel. The default depends on how recording starts: mono for a recording created through that API, and dual for the TwiML <Recording> noun, whose docs put the parent call on the first channel and the child call on the second. Recordings made with the <Record> verb are always mono. Conferences need Dual-channel Recording for Conference turned on in the Voice Recording settings; the first participant to join with recording enabled then gets the first channel, and everyone else is mixed on the second. Conference recordings download as mono unless the request adds RequestedChannels=2.
Amazon Connect. Contact recordings in the contact-center product, now called Amazon Connect Customer, are stereo. In recordings of agent interactions, the agent is on the right channel and the customer, plus any conferenced third parties, on the left. In IVR recordings, the customer is on the right and system prompts on the left. The same customer can therefore sit on different sides in the two recordings of one contact.
Speech-to-text services then need to be told to treat the channels separately:
| Service | Setting | What the docs say |
|---|---|---|
| Google Cloud Speech-to-Text (v1) | audioChannelCount and enableSeparateRecognitionPerChannel |
Only the first channel is recognized unless both are set; billed as channel count times audio length; each result carries a channelTag |
| Amazon Transcribe | ChannelIdentification |
Two channels at most, labeled ch_0 and ch_1; when speakers talk over each other, the channels' timestamps overlap |
| Deepgram | multichannel=true |
A separate transcript for each channel, up to 20 channels |
| AssemblyAI | multichannel |
Each utterance carries a channel number starting at 1; transcription takes about 40% longer; combine with speaker_labels to diarize within a channel |
Google's default is the easiest one to miss. Its reference says "We only recognize the first channel by default", so a dual-channel call sent without the flag comes back as a transcript of one side. The v1 API also limits MULAW audio to a single channel, so convert two-channel mu-law telephony files to LINEAR16 or FLAC first.
What to check in a two-channel sample
"Stereo" on a spec sheet settles none of the problems below. Ask for a sample, choose 20 files yourself, and check each row.
| Problem | What it sounds or looks like | How to check |
|---|---|---|
| Bleed or crosstalk | The other speaker faintly audible on a channel | Solo each channel during the other person's long turn |
| Echo | A delayed copy of one voice on the other channel, often from a speakerphone | Same solo test; listen for the repeat |
| Channel swap | The agent on the left in some files and on the right in others | Listen to the first 30 seconds of each file against its metadata |
| Offset or drift | Replies land early or late by the same amount every time, or the gap changes through the file | Compare turn timing near the start and the end of a long file |
| Unequal gain or codec | One side much quieter, or narrower in bandwidth | Compare per-channel levels and spectrograms |
| Duplicated mono | The same mix on both channels | Subtract one channel from the other |
| Merged transcript timing | One turn list in which speakers never overlap | Find an interruption and check that both sides carry their own timestamps |
Offset and drift come from recording the two sides on separate devices and joining the files afterwards. Two sides captured by one recorder share a clock, though they can still be swapped.
Transcripts matter as much as audio. Ask whether each channel is transcribed on its own with its own timestamps, and look at a stretch where both people talk at once. If one speaker's words simply vanish there, the transcript was probably made from a mix.
A 10-minute check with ffmpeg
Open a few files in an audio editor that draws each channel as its own waveform, and solo each channel in turn. Then run these commands, tested with ffmpeg 7.1 on 16-bit PCM, mu-law, float and FLAC files:
# Codec, sample rate and channel count
ffprobe -v error -of default=nw=1 \
-show_entries stream=codec_name,sample_rate,channels call.wav
# RMS and peak level of each channel, in dB
ffmpeg -i call.wav -af \
"astats=measure_perchannel=RMS_level+Peak_level:measure_overall=none" \
-f null -
# Channel 1 minus channel 2: max_volume of -91 dB
# means the channels are identical
ffmpeg -i call.wav -af "pan=mono|c0=c0-c1,volumedetect" -f null -
# One file per channel, and a mono mix
ffmpeg -i call.wav \
-filter_complex "channelsplit=channel_layout=stereo[L][R]" \
-map "[L]" ch1.wav -map "[R]" ch2.wav
ffmpeg -i call.wav -ac 1 mix.wav
A real dual-channel call gives a difference signal about as loud as the speech itself. A duplicated mono file gives -91 dB, which is digital silence.
When mono is fine
- Single-speaker audio. Read speech, voice commands and TTS voice recordings have one voice, so there is nothing to keep apart.
- Far-field meetings. In a room, every microphone hears every speaker, so channels don't map to people. Microphone arrays and diarization handle that case, not a dual-channel spec.
- A product that only hears mono. If your model will only ever receive mixed audio, evaluate it on mono. You can still buy dual-channel data and mix it down with one command, keeping per-speaker labels for training. The reverse takes source separation, which is never as clean.
Where SpeechData.ai fits
We sell dual-channel conversational data, so weigh this section accordingly; the checks above work on any vendor's sample, ours included.
SpeechData.ai licenses 60 off-the-shelf datasets of spontaneous two-person conversations in 60 languages and dialects, recorded in-country with one channel per speaker. Each comes with time-aligned, human-verified transcripts, speaker metadata (age, gender, region and recording device), consent documentation for every speaker, and a commercial license for training and evaluating ASR, TTS and other voice AI models.
Each dataset holds 500 to 2,000 hours from 50 to 200 speakers, at published prices of $60 to $95 per hour of audio. The US English conversations, for example, are 1,500 hours from 150 speakers at $90 per hour. Each page in the dataset catalog takes requests for a free sample, so you can run the checks above before you buy.
The catalog is spontaneous conversation, not customer service calls. For contact-center work, we record role-played customer service calls with agent and customer on separate channels, captured as narrowband telephony or wideband audio as your brief specifies. Other languages, domains and recording conditions can be collected to your spec.