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