Diarization
Who spoke when, down to the millisecond.
Speaker segments for recorded audio, overlapping speech included. It finds the number of speakers itself and works from voices, not words, so there is no language to set.
Two or more people at once
Reference annotation of a NOTSOFAR-1 meeting (CC BY 4.0).
Segments you can build on.
A clean timeline of speakers, ready for analytics, editing or your own speech recognition.
Finds the speakers
No speaker count to guess. The model works out how many people are talking.
Overlap included
Segments can overlap, so two people talking at once both appear on the timeline.
Speaking time
Each speaker's total speaking time comes with the segments, ready for talk-time analytics.
JSON or RTTM
Millisecond segments as JSON, or as RTTM for scoring tools and existing pipelines.
No language setting
Works from voices, not words. Evaluated on meetings, phone calls, video and broadcast conversations.
Long recordings
Files up to 6 hours and 5 GB, by URL or upload, with a webhook when the job is done.
The lowest error of 11.
average diarization error rate over AISHELL-4, AliMeeting, AMI, NOTSOFAR-1, RAMC, DIHARD III and CALLHOME.
Where it fits.
Meeting and call analytics
Talk time, turn-taking and interruptions for every participant, from the timeline alone.
Speakers for any transcript
Pair the segments with your own speech recognition to put every word with its speaker.
Editing and archives
Find each voice in interviews, podcasts and broadcasts, and cut or index by speaker.
Who spoke when, in one request.
audio_urlorfile_id, up to 6 hours- Segments with speaker, start and end
- Speaking time for each speaker
- The same segments as RTTM
import os, time, requests
API = "https://api.aircaps.com/v1"
H = {"Authorization": f"Bearer {os.environ['AIRCAPS_API_KEY']}"}
job = requests.post(f"{API}/diarizations", headers=H, json={
"model": "aircaps-diarization-v1",
"audio_url": "https://example.com/meeting.mp3",
}).json()
while job["status"] in ("queued", "processing"):
time.sleep(3)
job = requests.get(f"{API}/diarizations/{job['id']}", headers=H).json()
for s in job["segments"]:
print(f"{s['start']:8.2f} {s['end']:8.2f} {s['speaker']}")# start a diarization
curl https://api.aircaps.com/v1/diarizations \
-H "Authorization: Bearer $AIRCAPS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "aircaps-diarization-v1", "audio_url": "https://example.com/meeting.mp3"}'
# the same segments as RTTM, once it has completed
curl https://api.aircaps.com/v1/diarizations/dia_01k72.../rttm \
-H "Authorization: Bearer $AIRCAPS_API_KEY"
Specifications.
Everything else is in the model reference and limits.
- Model ID
aircaps-diarization-v1- Interface
- REST, asynchronous jobs, webhooks
- Input
- Any common audio or video format, by URL or upload
- Length
- 0.1 s to 6 hours, up to 5 GB per file
- Output
- Speaker segments with millisecond times, overlap included, and speaking time per speaker
- Formats
- JSON or RTTM
- Language
- None to set: it works from the voices
- Price
- $0.08 per audio hour; enabled per account on request
Questions.
How do I get access?
Diarization is enabled per account. Talk to sales and we will turn it on.
Do I need to say how many speakers there are?
No. The model finds the number of speakers itself.
Which languages does it work with?
It works from the voices, not the words, so there is no language to set. Our evaluation covers English and Mandarin meetings, phone calls and broadcast audio.
Do I need it if I use A5S Async?
No. A5S Async transcripts already include speaker labels. Use Diarization-v1 when you only need who spoke when, or to pair with your own speech recognition.
Can I get RTTM?
Yes. GET /v1/diarizations/{id}/rttm returns the same segments as an RTTM file.
More models.
Who spoke when.
Diarization is enabled per account. Tell us about your audio and we will turn it on.