Explainer
Whisper gets the words. Emotion needs another model.
OpenAI’s Whisper is excellent at what it was built for: turning speech into text. But teams searching for “Whisper emotion detection” usually want something Whisper does not output at all. Here is what actually works, with measured numbers.
Whisper outputs text, not affect
Whisper is an ASR model: audio in, transcript out (with timestamps and language identification). There is no emotion head. Everything about how something was said — tone, tension, sarcasm, fatigue — is discarded at the moment the audio becomes text. That is not a flaw; it is the task definition.
The three workarounds, measured
All numbers are seven-class accuracy on speech-emotion-bench — 64,384 held-out clips, one identical scoring pipeline for 64 systems.
- 1. Sentiment analysis on the transcript — 37.9–41.2% measured
- Feed Whisper’s text to an LLM. Even frontier models top out around 41% because the signal isn’t in the words: a flat “great, thanks” and a delighted one produce the same transcript.
- 2. Whisper-encoder emotion checkpoints — 32.5% measured
- Community models bolt a classifier onto Whisper’s encoder. The strongest one measured scored mid-field among open models — usable for experiments, far from state-of-the-art, and you own serving and calibration.
- 3. A dedicated acoustic emotion model — up to 77.6% measured
- Purpose-built SER systems read prosody, energy, and voice quality directly. The best open model (emotion2vec+) measured 68.7%; oruk Spectra measured 77.6% (trained in-distribution — the caveat and protocol are on the methodology page).
Keep Whisper, add emotion — or use one call
If Whisper already works in your stack, keep it: send the same audio file to POST /v1/audio/emotions and join on timestamps. If you are starting fresh, POST /v1/audio/analysis returns the English transcript, 15 calibrated emotion labels, 16 speaking-style labels, and time-local segments from one request — no second pipeline to operate.
curl https://speech-api.oruk.ai/v1/audio/analysis \
-H "Authorization: Bearer $ORUK_API_KEY" \
-F file=@call.wav -F model=oruk-resonanceFAQ
- Can OpenAI Whisper detect emotion?
- No. Whisper is an automatic speech recognition model — its output is text (plus timestamps and language ID). It has no emotion head and returns no affect information. Any emotion in a Whisper pipeline has to come from a second model.
- What about fine-tuned Whisper emotion models?
- Community models that repurpose Whisper’s encoder for emotion classification exist. Measured on speech-emotion-bench (one identical pipeline, held-out clips), the strongest Whisper-based SER checkpoint scored 32.5% seven-class accuracy — mid-field among open models, and well below purpose-built systems like emotion2vec+ (68.7%).
- Can I run sentiment analysis on the Whisper transcript instead?
- You can, but text-only analysis misses the acoustic channel: measured on the same benchmark, frontier text-only LLMs reading transcripts scored 37–41% — because "great, thanks" transcribes identically whether sincere or sarcastic. Tone lives in the audio, not the words.
- How do I add emotion to an existing Whisper pipeline?
- Keep Whisper (or any ASR) for the transcript and send the same audio file to an acoustic emotion API. oruk’s /v1/audio/emotions returns 15 calibrated multilabel scores; or replace both steps with /v1/audio/analysis, which returns transcript, emotion, and speaking style from one request.
Python tutorial What transcripts throw away Full benchmark results
