Speech to Text

Our advanced ASR technology is built on the robust foundation of OpenAI’s Whisper, known for its exceptional performance in multilingual speech recognition. However, we’ve significantly enhanced its capabilities with in-house innovations, including the implementation of phonetic time-stamps. These detailed markers provide an extra layer of precision by capturing the timing of specific phonetic elements within the audio, enabling more granular analysis and synchronization.

Our ASR component support’s for up to 4 languages and robust code-switching capabilities, it effortlessly transcribes audio that blends multiple languages. Its built-in automatic language detection ensures that users do not have to manually specify the language, streamlining the workflow, while precise time-stamps allow for easy navigation and review of audio content.

Benchmarks for top 4 supported languages for VoxPopuli

LanguageWhisper-Large-V3 (WER)Our’s (WER)Δ (WER↓)
English8.937.601.33
French11.1511.070.08
Spanish11.068.522.54
German17.7512.415.34

Evaluation benchmark for the transcription of code-switched speech data.

LanguageWhisper-Large-V2 (WER)Our’s (WER)Δ (WER↓)
English-Spanish37.1313.4523.68

Audio transcription without PHI reduction

Transcirption is by default applied for the task protect. To have the transcription without any reduction use the task parameter and set it to transcribe.

Transcribe multilingual audio data in 4 supported languages.

BASE_URL = "https://voiceharbor.ai"
usage_token = "USAGE_TOKEN"
# Create a new job on the server via the class method.
job_id = VoiceHarborClient.create_job(BASE_URL, usage_token)

client = VoiceHarborClient(
    base_url=BASE_URL,
    job_id=job_id,
    token=usage_token,
    inputs_dir="./inputs/tests"
)

If you expect code-switching in your data, set code-switch to True.

# Submit input files and the job file.and 
job_params = {"files": [], "task": "transcribe", "diar":True, "code-switch":True}
job_params = client.submit_files(job_params)
job_file = client.submit_job(job_params)
logger.info(f"Job file created: {job_file}")

Output example

{
  "speaker 1": {
    "transcription": [
      {
        "start": 0.02,
        "end": 4.54,
        "text": "Nunca hay, pues, violencia gratuita en sus tilmes.",
        "words": [
          {
            "word": " Nunca",
            "start": 0.02,
            "end": 1.04
          },
          {
            "word": " hay",
            "start": 1.04,
            "end": 1.36
          },
          {
            "word": ",",
            "start": 1.36,
            "end": 1.38
          },
          {
            "word": " pues",
            "start": 1.38,
            "end": 1.72
          },
          {
            "word": ",",
            "start": 1.72,
            "end": 2.44
          },
          {
            "word": " violencia",
            "start": 2.44,
            "end": 2.86
          },
          {
            "word": " gratuita",
            "start": 2.86,
            "end": 3.54
          },
          {
            "word": " en",
            "start": 3.54,
            "end": 3.64
          },
          {
            "word": " sus",
            "start": 3.64,
            "end": 3.94
          },
          {
            "word": " tilmes",
            "start": 3.94,
            "end": 4.5
          },
          {
            "word": ".",
            "start": 4.5,
            "end": 4.54
          }
        ]
      }
    ],
    "language": "es"
  },
  "speaker 2": {
    "transcription": [
      {
        "start": 4.14,
        "end": 9.16,
        "text": "He is considered a strategist in the process of transition towards Spanish democracy.",
        "words": [
          {
            "word": " He",
            "start": 4.14,
            "end": 4.64
          },
          {
            "word": " is",
            "start": 4.64,
            "end": 4.8
          },
          {
            "word": " considered",
            "start": 4.8,
            "end": 5.16
          },
          {
            "word": " a",
            "start": 5.16,
            "end": 5.4
          },
          {
            "word": " strategist",
            "start": 5.4,
            "end": 6.0
          },
          {
            "word": " in",
            "start": 6.0,
            "end": 6.14
          },
          {
            "word": " the",
            "start": 6.14,
            "end": 6.24
          },
          {
            "word": " process",
            "start": 6.24,
            "end": 6.62
          },
          {
            "word": " of",
            "start": 6.62,
            "end": 6.78
          },
          {
            "word": " transition",
            "start": 6.78,
            "end": 7.24
          },
          {
            "word": " towards",
            "start": 7.24,
            "end": 7.66
          },
          {
            "word": " Spanish",
            "start": 7.66,
            "end": 8.06
          },
          {
            "word": " democracy",
            "start": 8.06,
            "end": 8.7
          },
          {
            "word": ".",
            "start": 8.7,
            "end": 9.16
          }
        ]
      }
    ],
    "language": "en"
  }
}

Set target transcription language


supported_codes = [
    "en", "fr", "es", "de"
]

BASE_URL = "https://voiceharbor.ai"
usage_token = "USAGE_TOKEN"
# Create a new job on the server via the class method.
job_id = VoiceHarborClient.create_job(BASE_URL, usage_token)

client = VoiceHarborClient(
    base_url=BASE_URL,
    job_id=job_id,
    token=usage_token,
    inputs_dir="./inputs/tests"
)

# Submit input files and the job file.and 
job_params = {"files": [], "task": "transcribe", "language":"en"}  
job_params = client.submit_files(job_params)
job_file = client.submit_job(job_params)
logger.info(f"Job file created: {job_file}")

Good news to share with you!

2025-07-01 Upcoming Release
NextGen Medical ASR

Changelog

Looking ahead, we’re also pushing the envelope by refining our model with an extensive trove of medical data to eliminate hallucinations and boost reliability in even the most demanding environments. The Q2 realease will not only improve the recognition of complex medical terminology but also significantly mitigate transcirption errors, ensuring that results are both accurate and reliable. Whether you need rapid transcription for global communications or precise documentation in critical healthcare settings, our ASR component is designed to deliver excellence.