Audio features
Low-level acoustic features
Per-frame low-level acoustic descriptors (loudness/RMS, F0/pitch, spectral centroid/rolloff/flux, MFCCs, chroma, onsets, tempo/beat, harmonicity, roughness, voice-quality jitter/shimmer/HNR) are produced by a mature, mostly open-source ecosystem. The core trio is librosa (most flexible general MIR/DSP in pure Python), openSMILE (the standardized affective-computing feature sets eGeMAPS/ComParE used heavily in speech/emotion neuroscience), and Praat via Parselmouth (the reference for voice-quality and F0). Essentia adds a fast C++ engine with a richer set of music/psychoacoustic descriptors (dissonance/roughness, beat tracking) and torchaudio provides GPU-batched, differentiable versions of standard transforms. For pitch specifically, neural CREPE and probabilistic pYIN exceed classic autocorrelation/cepstral trackers in accuracy. All are CPU-friendly and trivially deployable in a small lab; only CREPE benefits from (but does not require) a GPU. For a movie/audio-timeline pipeline, a small overlapping set (librosa + openSMILE eGeMAPS + Parselmouth, optionally Essentia for music-rich roughness/beat and CREPE for high-accuracy F0) covers the entire subclass with minimal redundancy.
| Tool | Measures | Per-timepoint output | Modality | Granularity | Local | Rating | Rec |
|---|---|---|---|---|---|---|---|
| librosa (0.10.x / 1.0, 2024) | General-purpose DSP/MIR feature extraction: spectral shape, energy, pitch, harmony, rhythm. The default Swiss-army-knife for time-aligned low-level audio descriptors. | Per-frame (hop-based) numeric vectors: RMS energy; spectral_centroid, spectral_bandwidth, spectral_rolloff, spectral_flatness, spectral_contrast (7-band), zero_crossing_rate; MFCC (n_mfcc, default 20) + delta/delta2; mel-spectrogram; chroma_stft/chroma_cqt/chroma_cens (12-dim); tonnetz (6-dim); onset_strength envelope and onset event times; tempo (global + dynamic) and beat frame times via beat_track; F0 contour + voiced flags + voiced probabilities via pyin (probabilistic YIN); harmonic/percussive separation. | audio | frame (configurable hop, e.g. 512 samples ~= 23 ms at 22.05 kHz; resampleable to per-second) plus per-clip globals (tempo) | yes-cpu | best-in-class | include |
| openSMILE 3.0 + opensmile-python (audEERING, 2023-2024) | Standardized, paper-citable acoustic feature sets for speech/affective computing (eGeMAPS, GeMAPS, ComParE 2016, emobase). The lingua franca for emotion/voice modeling. | Two levels. Low-Level Descriptors (LLDs) per frame (~10 ms): F0 (semitone/Hz), loudness, jitter (local), shimmer (local dB), HNR/log-HNR, spectral flux, alpha-ratio, Hammarberg index, spectral slope (0-500/500-1500 Hz), MFCC 1-4, formant 1-3 frequencies/bandwidths/amplitudes, harmonic ratios (H1-H2, H1-A3). Functionals: eGeMAPSv02 = 88 summary features over a window; ComParE_2016 = 6373 features (65 LLD + deltas x statistical functionals). Configurable to emit per-frame LLD CSV aligned to timeline. | audio | frame (~10 ms LLDs) for time-resolved use; per-segment/per-window for functionals | yes-cpu | best-in-class | include |
| Parselmouth (Praat 6.x in Python, 2023-2024) | Reference-grade voice-quality and phonetic acoustic analysis — the gold standard for F0, formants, and perturbation measures in speech science. | Per-frame time series: F0/pitch contour (Praat autocorrelation/cc, with voiced/unvoiced), intensity (dB) contour, formant tracks F1-F4 (frequency + bandwidth) via Burg. Per-segment voice-quality: jitter (local, localabsolute, rap, ppq5, ddp), shimmer (local, localdB, apq3, apq5, apq11, dda), HNR, glottal pulses, voice breaks, fraction unvoiced. Spectral moments (centroid, sd, skew, kurtosis) and cepstral peak prominence available via Praat objects. | audio | frame (pitch/intensity/formant, ~6.25-10 ms step) for contours; per-utterance/per-segment for jitter/shimmer/HNR | yes-cpu | best-in-class | include |
| Essentia 2.1 (MTG-UPF, 2023-2024) | Fast C++ MIR/audio-analysis engine with the broadest low-level descriptor set, including psychoacoustic descriptors (roughness/dissonance) and robust rhythm analysis not in librosa. | Per-frame: spectral centroid, rolloff, flux, spread, skewness, kurtosis, flatness, decrease, energy bands, MFCC, GFCC, HPCP/chroma, spectral contrast, spectral complexity, HFC, dissonance (sensory roughness), inharmonicity, pitch (PitchYin, PitchYinFFT, PitchMelodia, PredominantPitchMelodia + confidence), tristimulus, odd-to-even harmonic ratio, dynamic complexity, loudness/replay-gain. Rhythm: onset detection, BPM/tempo, beat positions (multifeature/degara/loudness beat tracking), beat loudness, danceability. | audio | frame (configurable) for descriptors; per-event for onsets/beats; per-clip for tempo | yes-cpu | strong | include-if-resources |
| torchaudio 2.x (PyTorch, 2024-2025) | GPU-accelerated, batched, differentiable implementations of standard spectral/cepstral transforms for ML pipelines (not a high-level MIR toolkit). | Per-frame tensors: Spectrogram/MelSpectrogram, MFCC (librosa-consistent), LFCC, spectral_centroid, amplitude/power, deltas (compute_deltas); pitch via detect_pitch_frequency (autocorrelation F0). Resampling, time/frequency masking. No native chroma/beat/roughness/jitter. | audio | frame (configurable hop) | yes-gpu | usable | alternative |
| CREPE (marl/crepe, ICASSP 2018; maintained) | State-of-the-art monophonic fundamental-frequency (F0) estimation via a deep CNN on the raw waveform; higher accuracy and noise-robustness than DSP trackers. | Per-frame F0 in Hz, voicing confidence (0-1), and a 360-bin pitch salience activation matrix. Default 10 ms hop; outputs a time/frequency/confidence CSV directly alignable to a timeline. | audio | frame (default 10 ms; configurable) | yes-gpu | strong | include-if-resources |
| MIRtoolbox / mosqito (psychoacoustic roughness & loudness) | Psychoacoustic descriptors aligned to perception — Zwicker loudness, sharpness, and sensory roughness — that general MIR libraries do not compute by standard. | Per-frame/time-varying: loudness in sones (Zwicker/ISO 532-1), specific loudness per Bark band, sharpness (acum), roughness (asper), fluctuation strength, tonality. (mosqito = maintained Python; MIRtoolbox = MATLAB equivalent for roughness/loudness/centroid/F0.) | audio | frame / per-second time-varying | yes-cpu | usable | include-if-resources |
Recommended (best-in-class): librosa (primary general spectral/MFCC/chroma/onset/tempo + pyin F0); openSMILE eGeMAPS/ComParE via opensmile-python (standardized speech/affect LLDs, timeline-indexed); Parselmouth/Praat (gold-standard F0, formants, jitter/shimmer/HNR voice quality); Essentia (add for music-rich roughness/dissonance, inharmonicity, robust beat tracking); CREPE/torchcrepe (add for high-accuracy monophonic F0 on speech/vocals)
Likely redundant:
- torchaudio — spectral/MFCC fully superseded by librosa for a small lab; keep only if GPU-batched or differentiable front-ends are needed
- torchaudio.detect_pitch_frequency and librosa.pyin F0 — superseded by CREPE/torchcrepe (accuracy) or Praat (voice science) for the F0 feature
- openSMILE jitter/shimmer/HNR/formant LLDs overlap Parselmouth — run both only for cross-validation; otherwise Parselmouth is canonical and openSMILE provides the standardized 88-dim summary
- Essentia spectral/MFCC/chroma/onset overlap librosa — choose one as the primary MIR engine (librosa for ease, Essentia for speed/roughness), not both for the same descriptors
- Essentia ‘dissonance’ vs mosqito roughness — overlapping roughness measures; mosqito is the standards-based (asper) choice if perceptual fidelity matters
Open questions:
- Will the pipeline analyze the full mixed soundtrack (speech+music+SFX) or source-separated stems? Monophonic F0 tools (CREPE, Praat) and voice-quality measures degrade badly on mixes — may need Demucs/source separation upstream.
- Target output rate: true per-frame (~10-23 ms) vs aggregated per-second for fMRI/timeline alignment? This sets hop sizes and whether to keep LLDs or functionals.
- Is openSMILE’s source-available (non-OSI) license and Essentia’s AGPL acceptable for the project’s distribution/sharing model?
- Are standardized perceptual units (sones/asper for loudness/roughness via mosqito) required, or are relative librosa/Essentia descriptors sufficient?
- Sample rate harmonization: openSMILE/Praat expect specific rates; movie audio is often 48 kHz — confirm resampling strategy to keep features comparable across tools.
References
- librosa (0.10.x / 1.0, 2024) — github.com/librosa/librosa; librosa.org; McFee et al. 2015 SciPy
- openSMILE 3.0 + opensmile-python (audEERING, 2023-2024) — github.com/audeering/opensmile-python; Eyben et al. 2016 (eGeMAPS, IEEE TAC); audeering.github.io/opensmile-python
- Parselmouth (Praat 6.x in Python, 2023-2024) — github.com/YannickJadoul/Parselmouth; Jadoul et al. 2018 J. Phonetics; parselmouth.readthedocs.io
- Essentia 2.1 (MTG-UPF, 2023-2024) — github.com/MTG/essentia; essentia.upf.edu; Bogdanov et al. 2013 ISMIR
- torchaudio 2.x (PyTorch, 2024-2025) — docs.pytorch.org/audio; Yang et al. 2021 (TorchAudio) arXiv:2110.15018
- CREPE (marl/crepe, ICASSP 2018; maintained) — github.com/marl/crepe; github.com/maxrmorrison/torchcrepe; Kim et al. 2018 arXiv:1802.06182
- MIRtoolbox / mosqito (psychoacoustic roughness & loudness) — github.com/Eomys/MoSQITo; MIRtoolbox (Lartillot & Toiviainen 2007 ISMIR)
High-level audio: events, scenes, music, speech/non-speech
This subclass covers time-resolved semantic audio annotation: (1) audio tagging / sound event detection over the 527-class AudioSet ontology, (2) acoustic scene classification, (3) speech vs music vs noise segmentation, and (4) music information retrieval (tempo, key/mode, beat/downbeat, instrumentation, mood/emotion). The field is mature and largely open-source. For a movie/audio-story timeline, the recommended stack is a transformer audio tagger (BEATs or PaSST/AST) run on a sliding window for AudioSet event posteriors, CLAP for open-vocabulary/zero-shot event labels and audio-text similarity, inaSpeechSegmenter or pyannote VAD for speech/music/noise segmentation, and Essentia + madmom (or Beat This!) for MIR descriptors. Most tools run comfortably on a single consumer GPU or even CPU; nothing here requires heavy multi-GPU compute. Key design choice: window size sets temporal granularity (AudioSet models are trained on ~10 s clips but can be run on ~1 s hops for per-second annotation, with the caveat that very short windows degrade accuracy on slow-onset events).
| Tool | Measures | Per-timepoint output | Modality | Granularity | Local | Rating | Rec |
|---|---|---|---|---|---|---|---|
| BEATs (Microsoft, iter3+ / AS2M checkpoint, 2022-2023) | Audio tagging over the 527-class AudioSet ontology via a self-supervised acoustic-tokenizer ViT encoder fine-tuned on AudioSet-2M; also a strong general-purpose audio embedding backbone. | 527-dim AudioSet class probability vector per analysis window (e.g. speech, music, vehicle, dog, laughter, gunshot, applause, etc.); 768-dim frame/patch embeddings usable for downstream probing or as features. | audio | per-clip on ~10 s windows; sliding-window to per-second or sub-second (degrades for short windows) | yes-gpu | best-in-class | include |
| PaSST (Patchout faSt Spectrogram Transformer, kkoutini, 2022) | AudioSet audio tagging and acoustic scene classification using a DeiT-style spectrogram transformer with patchout regularization; designed to train/infer efficiently on a single GPU. | 527-dim AudioSet class logits/probabilities per window; intermediate transformer embeddings (used widely as audio features, e.g. in CLAP-like and captioning systems). | audio | per-clip on ~10 s windows; sliding-window to per-second | yes-gpu | strong | include |
| AST (Audio Spectrogram Transformer, MIT, 2021) | AudioSet audio tagging with a pure ViT over log-mel spectrograms; the canonical HF-native transformer tagger. | 527-dim AudioSet class probabilities per ~10 s window; CLS/patch embeddings. | audio | per-clip on ~10 s windows; sliding-window to per-second | yes-gpu | strong | alternative |
| PANNs (CNN14, Kong et al., 2020) | CNN-based AudioSet audio tagging and sound event detection; long-standing reference baseline with framewise SED variants. | 527-dim AudioSet clipwise probabilities; CNN14 also exposes framewise (segment-level) predictions enabling onset/offset localization; 2048-dim embedding. | audio | clipwise plus framewise SED (~tens of ms frames) | yes-gpu | usable | alternative |
| YAMNet (Google, MobileNet-v1) | Lightweight AudioSet audio event tagging over a 521-class subset; classic fast/edge baseline. | 521-dim AudioSet-class scores per 0.96 s frame (hop 0.48 s); 1024-dim embedding per frame. | audio | per-frame (~0.48 s hop, 0.96 s window) | yes-cpu | usable | alternative |
| CLAP (LAION clap-htsat-fused / larger_clap_general / larger_clap_music_and_speech, 2022-2023) | Contrastive language-audio embedding enabling OPEN-VOCABULARY zero-shot audio classification and audio-text similarity beyond the fixed AudioSet ontology; also Microsoft CLAP variant. | 512-dim joint audio and text embeddings; per-window cosine similarity to arbitrary text prompts (e.g. ‘a crowd cheering’, ‘tense orchestral music’, ‘rain on a window’) yielding a custom per-prompt time series; softmax over a prompt set for zero-shot labels. | multimodal | per-clip on the windowed segment (sliding-window to per-second); music-domain variant for MIR-style tags | yes-gpu | best-in-class | include |
| inaSpeechSegmenter (INA, smn engine) | Segments a continuous audio stream into speech / music / noise homogeneous zones, with speech further split by speaker gender (male/female); purpose-built for broadcast media. | Time-stamped segment labels {speech, music, noise} with start/end; optional male/female tag on speech segments (singing voice -> music, speech-over-music/noise -> speech). | audio | per-segment with onset/offset boundaries (frame-level decisions ~0.1 s) | yes-cpu | best-in-class | include |
| pyannote.audio (segmentation 3.x / VAD pipeline) | Voice activity detection, speech segmentation, overlapped-speech detection and speaker diarization; the strongest open VAD/diarization stack for foreground speech. | Per-frame speech-activity probability (~16-20 ms resolution) and time-stamped speech/non-speech and per-speaker turn segments; overlap flags. | audio | per-frame (~16-20 ms) and per-segment | yes-gpu | strong | include-if-resources |
| Essentia + TensorFlow models (MTG-UPF) | Full classical + deep MIR: tempo, key/scale (mode), tonal features, plus pretrained TF models for music tagging, genre, mood/emotion (valence-arousal), danceability, instrumentation, voice/instrumental, and reusable embeddings (MusiCNN, VGGish, Discogs-EffNet, MSD). | Scalar/categorical descriptors: BPM/tempo, key+scale (major/minor) with strength, loudness; and per-tag probabilities for genre (MTG-Jamendo/Discogs taxonomies), mood/theme, valence and arousal regressors, danceability, acoustic/electronic, instrument tags; 200-1280-dim embeddings. | audio | whole-track or windowed (frame-level low-level features; segment/window for ML tags) | yes-cpu | best-in-class | include |
| madmom (beat/downbeat/tempo/chords) and ‘Beat This!’ (2024) | Rhythm/meter MIR: onset detection, beat and downbeat tracking, tempo estimation, meter, and chord recognition. ‘Beat This!’ is a current transformer-based beat/downbeat tracker. | Beat timestamps, downbeat timestamps (bar positions), per-beat tempo (BPM) curve, time signature/meter, and (madmom) chord labels with timing; yields a per-beat or per-second rhythmic feature track. | audio | per-beat / per-event timestamps (continuous tempo curve) | yes-cpu | strong | include-if-resources |
Recommended (best-in-class): BEATs (or PaSST) for AudioSet event/scene tagging on a sliding window; CLAP (laion/larger_clap_general + music_and_speech) for open-vocabulary zero-shot audio dimensions and audio-text similarity time series; inaSpeechSegmenter for clean speech/music/noise segmentation (add pyannote VAD/diarization if speaker turns needed); Essentia + TF models for MIR scalars and music mood/genre/instrument tags; madmom or Beat This! for beat/downbeat/tempo structure
Likely redundant:
- AST is largely superseded by BEATs/PaSST on AudioSet mAP (keep only for its trivial HF deployment)
- PANNs CNN14 superseded by transformer taggers, but retain for framewise SED and panns_inference simplicity
- YAMNet superseded on accuracy by all transformer taggers; keep only for CPU/real-time/edge constraints
- Choose ONE primary AudioSet tagger (BEATs or PaSST) rather than running AST+PANNs+YAMNet+BEATs together, since their 527-class outputs are highly correlated
- Essentia tempo estimator is redundant with madmom/Beat This! beat tracking (prefer the latter when precise beat/downbeat timing matters)
- CLAP music tags partially overlap Essentia genre/mood models; use CLAP for novel/custom prompts and Essentia for calibrated valence-arousal/tempo/key
References
- BEATs (Microsoft, iter3+ / AS2M checkpoint, 2022-2023) — arXiv:2212.09058; github.com/microsoft/unilm/tree/master/beats
- PaSST (Patchout faSt Spectrogram Transformer, kkoutini, 2022) — arXiv:2110.05069; github.com/kkoutini/PaSST
- AST (Audio Spectrogram Transformer, MIT, 2021) — arXiv:2104.01778; huggingface.co/MIT/ast-finetuned-audioset-10-10-0.4593
- PANNs (CNN14, Kong et al., 2020) — arXiv:1912.10211; github.com/qiuqiangkong/audioset_tagging_cnn
- YAMNet (Google, MobileNet-v1) — tfhub.dev/google/yamnet; github.com/tensorflow/models/tree/master/research/audioset/yamnet
- CLAP (LAION clap-htsat-fused / larger_clap_general / larger_clap_music_and_speech, 2022-2023) — arXiv:2211.06687; huggingface.co/laion/clap-htsat-fused; github.com/microsoft/CLAP
- inaSpeechSegmenter (INA, smn engine) — github.com/ina-foss/inaSpeechSegmenter; Doukhan et al. ICASSP 2018
- pyannote.audio (segmentation 3.x / VAD pipeline) — github.com/pyannote/pyannote-audio; Bredin et al. (Interspeech)
- Essentia + TensorFlow models (MTG-UPF) — essentia.upf.edu; mtg.github.io/essentia-labs; Alonso-Jimenez et al.
- madmom (beat/downbeat/tempo/chords) and ‘Beat This!’ (2024) — github.com/CPJKU/madmom; arXiv:1605.07008; github.com/CPJKU/beat_this (Foscarin et al. 2024)
Speech: ASR, diarization, prosody, vocal affect
This subclass converts the speech audio of movies/stories into a time-aligned linguistic and paralinguistic layer: word/segment-level transcripts with timestamps (ASR + forced alignment), who-spoke-when (diarization + VAD), low-level prosody (pitch/intensity/voice-quality contours), and emotion-from-voice (categorical and dimensional A/V/D). The open ecosystem is mature and almost entirely locally deployable on a single consumer GPU. A practical pipeline is faster-whisper/WhisperX for ASR+word timestamps, pyannote (community-1) for diarization, Parselmouth/openSMILE for prosody, and an audEERING wav2vec2-dim or emotion2vec model for vocal affect; most other tools are redundant variants of these. Key design choice is per-word vs per-second resampling, since ASR/SER are utterance-level while prosody is natively frame-level (10 ms).
| Tool | Measures | Per-timepoint output | Modality | Granularity | Local | Rating | Rec |
|---|---|---|---|---|---|---|---|
| faster-whisper (CTranslate2 Whisper large-v3 / distil-large-v3) | Automatic speech recognition: speech-to-text with segment- and word-level timestamps and language ID; backbone for most pipelines. | Per-segment text + start/end times; optional per-word start/end + token confidence/avg_logprob; no_speech_prob per segment; detected language posterior; 99 languages. Speaking-rate derivable (words or syllables per second from word timestamps). | audio | per-utterance/segment, optional per-word | yes-gpu | best-in-class | include |
| WhisperX (faster-whisper + wav2vec2 forced alignment + pyannote) | End-to-end pipeline: ASR with accurate word-level timestamps via phoneme forced alignment, plus optional speaker assignment per word. The most direct path to a word-aligned, speaker-attributed transcript. | Per-word text + tightened start/end times (wav2vec2 CTC alignment, far better than Whisper’s internal DTW timestamps); per-segment text; speaker label per segment/word (when diarization enabled); VAD-based chunking removes Whisper hallucination on silence. Enables precise speaking-rate and per-second word-presence binning. | audio | per-word, per-segment | yes-gpu | best-in-class | include |
| pyannote.audio speaker-diarization-community-1 (pyannote 4.x) | Speaker diarization (who spoke when) plus the underlying VAD and overlapped-speech detection; assigns speaker identities across the whole timeline. | Time-stamped speaker-turn segments with speaker labels (SPEAKER_00..N); per-frame speech-activity and overlapped-speech probabilities; estimated number of speakers; speaker embeddings for cross-segment/cross-file identity. Yields per-second active-speaker and speaker-change features. | audio | per-segment / per-frame (segmentation at ~16-60 ms) | yes-gpu | best-in-class | include |
| Silero VAD v5 | Standalone voice activity detection: frame-level probability of speech vs non-speech (music/noise/silence), for gating and speech-presence timelines. | Per-chunk (~30 ms) speech probability 0-1; derived speech/non-speech segment boundaries; total speech time. Useful as a lightweight per-second ‘speech present’ regressor and to mask non-speech before ASR/SER. | audio | sub-second (~30 ms frames) | yes-cpu | strong | include |
| Parselmouth (Praat) / praat-parselmouth | Classic low-level prosody and voice-quality acoustics computed directly from the waveform: pitch, loudness, and perturbation measures. The reference for interpretable prosodic contours. | Per-frame F0/pitch contour (Hz, with voiced/unvoiced flag), intensity/loudness (dB), formants F1-F4, harmonics-to-noise ratio (HNR); jitter (local/rap/ppq5) and shimmer (local/apq); spectral tilt; pause/silence structure. Speaking/articulation rate via syllable-nuclei scripts. All resamplable to per-second. | audio | frame (default ~10 ms hop, configurable) | yes-cpu | best-in-class | include |
| openSMILE (eGeMAPSv02 / ComParE feature sets) | Standardized affective-computing acoustic feature extraction: large banks of low-level descriptors (LLDs) and functionals used as inputs to emotion/paralinguistic models and as direct features. | Per-frame LLDs: F0, loudness, jitter, shimmer, HNR, MFCC 1-13, spectral flux/slope/centroid, alpha-ratio, Hammarberg index, formant freq/bandwidth/amplitude (eGeMAPS = 25 LLDs). Also utterance-level functionals (means, percentiles, slopes). Frame LLDs give per-second prosody/spectral vectors. | audio | frame (10 ms LLDs) or per-utterance functionals | yes-cpu | strong | include-if-resources |
| audEERING wav2vec2-large-robust-12-ft-emotion-msp-dim (dimensional SER) | Dimensional speech emotion recognition from voice: continuous arousal, dominance, valence regressed directly from waveform (no transcript needed). | Three scalars per utterance/window: arousal, dominance, valence each ~0-1; plus 1024-dim pooled wav2vec2 embedding. Sliding-window application (e.g. 1-4 s hop) yields per-second A/D/V trajectories aligned to the movie timeline. | audio | per-utterance or per-window (user-chosen, can approach per-second) | yes-gpu | best-in-class | include |
| emotion2vec+ (seed / base / large) and emotion2vec foundation model | Self-supervised speech-emotion foundation model: universal emotion representation plus categorical SER, robust across 10+ languages and recording conditions. | 9-class categorical emotion posteriors (angry, happy, sad, neutral, fear, disgust, surprise, etc.) per utterance; frame-level and utterance-level emotion embeddings (feature extraction mode) usable for custom regressors (e.g. to dimensional A/V). Sliding window gives per-second categorical-emotion probability trajectories. | audio | per-utterance (frame-level embeddings available) | yes-gpu | strong | alternative |
| NVIDIA NeMo ASR (Parakeet-TDT / Canary) + Sortformer diarization | Alternative high-accuracy ASR (with timestamps) and end-to-end neural diarization; relevant if Whisper accuracy or throughput is insufficient, or for joint ASR+diarization. | ASR: word/segment text + timestamps, token confidences (Parakeet-TDT-1.1B/0.6B leads English Open ASR leaderboard; Canary multilingual). Sortformer/MSDD: per-frame speaker-activity probabilities and speaker-attributed segments. Same downstream features as Whisper+pyannote (word timing, speaker turns, speaking rate). | audio | per-word / per-segment (ASR); per-frame (diarization) | yes-gpu | strong | alternative |
| CREPE / torchcrepe (deep pitch tracker) | Data-driven monophonic fundamental-frequency (F0) estimation; a more robust alternative to Praat autocorrelation pitch under noise/expressive speech. | Per-frame F0 (Hz) and voicing confidence at configurable hop (e.g. 10 ms); cleaner pitch contours than Praat on noisy/creaky speech. Feeds per-second pitch mean/range/slope features. | audio | frame (10 ms typical) | yes-gpu | usable | include-if-resources |
Recommended (best-in-class): faster-whisper (large-v3) for ASR; WhisperX for word-level forced alignment + speaker-attributed transcript; pyannote speaker-diarization-community-1 for diarization/VAD/overlap; Parselmouth (Praat) for prosody and voice-quality contours; audEERING wav2vec2-large-robust-12-ft-emotion-msp-dim for dimensional vocal affect (arousal/valence/dominance)
Likely redundant:
- openai/whisper, insanely-fast-whisper, whisper.cpp -> superseded by faster-whisper (same weights, faster CTranslate2 runtime)
- pyannote speaker-diarization-3.1 -> superseded by community-1 (better speaker counting, same segmentation)
- WebRTC VAD / audiotok -> superseded by Silero VAD and pyannote VAD
- librosa pitch (pyin/piptrack) and standalone MFCC extraction -> superseded by Parselmouth (F0/voice-quality) + openSMILE (spectral LLDs)
- Generic HF wav2vec2/HuBERT IEMOCAP categorical SER checkpoints -> superseded by emotion2vec+ (categorical) and audEERING wav2vec2-dim (dimensional)
- NeMo ASR/diarization and emotion2vec+ -> overlap with the Whisper/pyannote/audEERING defaults; keep only as accuracy or multilingual/cross-domain alternatives
Open questions:
- Target temporal grid: per-word (event-locked) vs fixed per-second resampling - ASR/SER are utterance-level and need windowing/interpolation, whereas Parselmouth/openSMILE are natively 10 ms.
- Movie audio is mixed with music/SFX/overlapping speakers; do we need source separation (e.g. Demucs/Bandit) or a music-VAD gate before ASR/SER to avoid contaminating pitch/jitter/shimmer and emotion estimates?
- Vocal affect should be computed per diarized speaker segment, not on mixed audio - confirm diarization-first ordering and how to handle overlapped speech for SER/prosody.
- Licensing: openSMILE eGeMAPS and audEERING wav2vec2-dim are research-only; confirm acceptable for the study or substitute emotion2vec+/Parselmouth-only features.
- Whether to add a paralinguistics/laughter-cry/non-verbal-vocalization detector (e.g. emotion2vec vocal events or a dedicated laughter model) as a separate feature stream.
References
- faster-whisper (CTranslate2 Whisper large-v3 / distil-large-v3) — github.com/SYSTRAN/faster-whisper; huggingface.co/openai/whisper-large-v3
- WhisperX (faster-whisper + wav2vec2 forced alignment + pyannote) — github.com/m-bain/whisperX; Bain et al. Interspeech 2023
- pyannote.audio speaker-diarization-community-1 (pyannote 4.x) — huggingface.co/pyannote/speaker-diarization-community-1; pyannote.ai/blog/community-1
- Silero VAD v5 — github.com/snakers4/silero-vad
- Parselmouth (Praat) / praat-parselmouth — github.com/YannickJadoul/Parselmouth; Praat (Boersma & Weenink)
- openSMILE (eGeMAPSv02 / ComParE feature sets) — github.com/audeering/opensmile; Eyben et al. eGeMAPS 2016
- audEERING wav2vec2-large-robust-12-ft-emotion-msp-dim (dimensional SER) — huggingface.co/audeering/wav2vec2-large-robust-12-ft-emotion-msp-dim; Wagner et al. IEEE TPAMI 2023
- emotion2vec+ (seed / base / large) and emotion2vec foundation model — github.com/ddlBoJack/emotion2vec; Ma et al. ACL Findings 2024; arXiv:2312.15185
- NVIDIA NeMo ASR (Parakeet-TDT / Canary) + Sortformer diarization — github.com/NVIDIA/NeMo; huggingface.co/nvidia/parakeet-tdt-1.1b; HF Open ASR Leaderboard
- CREPE / torchcrepe (deep pitch tracker) — Kim et al. ICASSP 2018; github.com/maxrmorrison/torchcrepe