whisper clib AI

whisper.cpp speech-to-text. Transcribe audio, timestamps, language detection, VAD, translation.

ppm install whisper

Overview

whisper.cpp is a C/C++ port of OpenAI's Whisper ASR model. Runs fully on CPU (optional GPU). Supports 99 languages, automatic language detection, and translation to English. No network required — the model file runs locally.

CLib package — model required

Download models from HuggingFace: ggerganov/whisper.cpp
Recommended: ggml-small.bin (~244 MB, best balance of speed/accuracy)

Simple Transcription

uses whisper;

{ load model once — keep handle for multiple calls }
var model := LoadModel('/models/ggml-small.bin');

{ transcribe a WAV file — returns plain text }
var text := TranscribeFile(model, '/audio/meeting.wav');
WriteLn(text);

FreeModel(model);

Transcription with Timestamps

uses whisper;

var model  := LoadModel('/models/ggml-small.bin');
var params := DefaultParams('');   { '' = auto-detect language }
params.WordTimestamps := True;

var result := TranscribeFileEx(model, '/audio/interview.wav', params);

WriteLn('Language: ', result.Language);
WriteLn('Duration: ', result.Duration, ' ms');
WriteLn;

{ iterate segments }
var i: Integer;
for i := 0 to Length(result.Segments) - 1 do begin
  var seg := result.Segments[i];
  WriteLn('[', seg.StartMs div 1000, 's - ', seg.EndMs div 1000, 's] ', seg.Text);
end;

FreeModel(model);

Subtitles (SRT / VTT)

uses whisper;

var model := LoadModel('/models/ggml-medium.bin');

{ generate SRT subtitle file }
var srt := TranscribeToSRT(model, '/video/lecture.wav');
WriteFile('/output/lecture.srt', srt);

{ or WebVTT for browser players }
var vtt := TranscribeToVTT(model, '/video/lecture.wav');
WriteFile('/output/lecture.vtt', vtt);

FreeModel(model);

Language Detection

uses whisper;

var model := LoadModel('/models/ggml-base.bin');

{ fast language detection (no full transcription) }
var lang := DetectLanguage(model, '/audio/unknown.wav');
WriteLn('Detected: ', lang);   { "es" }

{ with confidence scores for all languages }
var scores := DetectLanguageEx(model, '/audio/unknown.wav');
WriteLn(scores);
{ es:0.921
  pt:0.043
  it:0.018
  ... }

FreeModel(model);

Translation to English

uses whisper;

var model := LoadModel('/models/ggml-small.bin');

{ transcribe Spanish/French/etc. audio directly to English text }
var english := TranslateToEnglish(model, '/audio/spanish_meeting.wav');
WriteLn(english);

{ or use params for more control }
var params := DefaultParams('es');   { source: Spanish }
params.Translate := True;
var result := TranscribeFileEx(model, '/audio/speech.wav', params);

FreeModel(model);

Custom Params & Initial Prompt

uses whisper;

var model  := LoadModel('/models/ggml-small.bin');
var params := DefaultParams('en');
params.NumThreads      := 8;
params.MaxSegmentLen   := 100;    { max chars per subtitle line }
params.Temperature     := 0.0;   { greedy — most deterministic }
params.NoSpeechThreshold := 0.7;

{ initial prompt guides style and vocabulary }
params.InitialPrompt := 'Medical consultation transcript. Patient: John. Doctor: Smith.';

var result := TranscribeFileEx(model, '/audio/consult.wav', params);
WriteLn(result.Text);

Package Info

Version1.0.0
Typeclib
CategoryAI
Authorgustavo
Languages99

Model sizes

tiny39M — fastest
base74M — balanced
small244M — recommended
medium769M — high accuracy
large1.5B — best

API

  • LoadModel(path)
  • LoadModelGPU(path)
  • FreeModel(m)
  • TranscribeFile(m,path)
  • TranscribeFileEx(m,path,params)
  • TranscribeToSRT(m,path)
  • TranscribeToVTT(m,path)
  • TranscribePCM(m,samples)
  • TranscribeFloat(m,samples)
  • DetectLanguage(m,path)
  • DetectLanguageEx(m,path)
  • TranslateToEnglish(m,path)
  • LoadWAV(path)
  • GetAudioDuration(path)
  • DefaultParams(lang)
Audio format

Input must be WAV, 16 kHz mono, 16-bit PCM. Use ffmpeg to convert: ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav