AirCaps Voice Lab

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.

aircaps-diarization-v1REST API$0.08 per audio hourEnabled on request

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.

12.03%

average diarization error rate over AISHELL-4, AliMeeting, AMI, NOTSOFAR-1, RAMC, DIHARD III and CALLHOME.

Read the full evaluation

Where it fits.

Analytics

Meeting and call analytics

Talk time, turn-taking and interruptions for every participant, from the timeline alone.

Your ASR

Speakers for any transcript

Pair the segments with your own speech recognition to put every word with its speaker.

Media

Editing and archives

Find each voice in interviews, podcasts and broadcasts, and cut or index by speaker.

Who spoke when, in one request.

  • audio_url or file_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']}")

Specifications.

Everything else is in the model reference and limits.

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.

Who spoke when.

Diarization is enabled per account. Tell us about your audio and we will turn it on.