CoolFace
Datasetpublic

sarthwa8/indian-tts-emotion-60min

indian-tts-emotion-60min A small, carefully curated text-to-speech dataset: ~68 minutes of clean, single-speaker-per-clip audio in Indian English (en-IN) and Hindi (hi-IN), sourced from YouTube, with accurate transcriptions and per-clip emotion/style tags. Built as a data-quality exercise: clips were filtered conservatively and a sample was verified by listening rather than shipped straight from an automated pipeline. Summary Language Clips Duration (min)… See the full description on the dataset page: https://huggingface.co/datasets/sarthwa8/indian-tts-emotion-60min.

sourceHugging Facecc-by-4.0updated 3mo agoView on Hugging Face
1likes20downloads
Dataset Card

indian-tts-emotion-60min

A small, carefully curated text-to-speech dataset: ~68 minutes of clean, single-speaker-per-clip audio in Indian English (en-IN) and Hindi (hi-IN), sourced from YouTube, with accurate transcriptions and per-clip emotion/style tags.

Built as a data-quality exercise: clips were filtered conservatively and a sample was verified by listening rather than shipped straight from an automated pipeline.

Summary

LanguageClipsDuration (min)
Indian English (en-IN)6031.8
Hindi (hi-IN)7036.5
Total13068.3

Distinct speakers: 14. Audio: 24 kHz mono, 16-bit WAV, loudness-normalised (~-23 LUFS).

Emotion / style distribution

EmotionTotalen-INhi-IN
neutral422418
calm25322
formal22157
serious16115
sad14014
angry541
excited532
happy101

Fields

  • —audio — 24 kHz mono waveform
  • —text — transcription (Devanagari for Hindi, normalised for TTS)
  • —language — en-IN / hi-IN
  • —emotion — one of: neutral, calm, formal, serious, happy, excited, sad, angry, whisper
  • —emotion_confidence, acoustic_emotion — tagging provenance
  • —speaker_id — pseudonymous, stable per source speaker
  • —duration_seconds, snr_db
  • —source_url, source_title, creator, license, start_time, end_time

How it was built

  1. 1.Sourcing — hand-picked single-speaker, studio-clean YouTube videos covering a range of emotions; license recorded per source (see below).
  2. 2.ASR + diarization — Sarvam Saaras v3 Batch STT with speaker diarization and timestamps. Clips are cut only within a single diarized speaker's turn, at sentence/silence-snapped boundaries (target ~30 s).
  3. 3.Cleaning — silence-trim, loudness normalisation (~-23 LUFS), and conservative filtering on SNR, hard-clipping, and spectral flatness (a background-music heuristic). Marginal clips were dropped.
  4. 4.Emotion tagging — hybrid, two independent estimators: an acoustic SER model (superb/wav2vec2-base-superb-er) proposes an emotion from prosody, and Sarvam `sarvam-105b` independently infers the delivery style from the transcript + genre. The acoustic model is English-acted (IEMOCAP) and noisy on calm Indic narration, so the transcript-based label is taken as primary and the acoustic label kept as a cross-check; clips where the two disagree, or where the LLM was unsure, were flagged for human review.
  5. 5.Human review — clips were auditioned in a review tool; accept/reject/relabel applied. Human–model emotion agreement on reviewed clips: 111/138 (80%) (relabels: 19).

Source provenance & licensing

LicenseClips
CC-BY 3.0130

Per-clip source_url, creator, and license are in the metadata. The dataset is intended for research / educational use; all clips derive from their original creators (attribution retained). If you are a rights-holder and want a clip removed, please open an issue / contact the maintainer and it will be taken down.

Limitations

  • —Emotion labels are model-assisted and then human-verified by listening. The acoustic SER is English-acted and unreliable on calm/Indic narration, so final labels come from the transcript-based LLM plus the human review pass, with the acoustic label kept only as a reference signal.
  • —Source audio is lossy (YouTube); fidelity is capped at 24 kHz.
  • —Small scale — intended as a high-quality seed, not a large training corpus.

Usage

python
from datasets import load_dataset
ds = load_dataset("sarthwa8/indian-tts-emotion-60min")
print(ds["train"][0])