← Master Index
Vol. 16 Module 16.2 Lecture

PlayHT

Speech-to-Text (STT) & Voice Models (added)

How This Lesson Fits the Module & Volume

ElevenLabs set the generative-voice pattern. PlayHT (Play.ht) is the other TTS-first vendor students will see in RFPs: neural voices, instant cloning, streaming synthesis (Play 3 / PlayDialog-class engines), and conversational agents. It belongs in Module 16.2 so you can choose a voice vendor independently from an STT vendor.

Capability lectures: TTS, voice cloning. After PlayHT the module leaves vendors and teaches cross-cutting engineering: speaker diarization and real-time transcription. Hyperscaler TTS (Azure/Google) remains the compliance-default alternative.

Learning Objectives

By the end of this lesson, students should be able to:

  • Describe PlayHT as a cloud generative TTS / voice-cloning platform (STT not the flagship).
  • Call streaming or job-based TTS from Python (REST or pyht-style SDK).
  • Compare PlayHT vs ElevenLabs vs Azure TTS vs “STT specialists” on streaming, languages, pricing, on-prem.
  • Design STT+TTS split: Whisper/Deepgram/hyperscaler in, PlayHT out.
  • Apply the same consent, PII, and retention rules as any cloning vendor.
  • Know when PlayDialog-class conversational TTS matters vs batch narration.
Definition

PlayHT is a cloud text-to-speech and voice-cloning API. You authenticate with an API key plus user id, choose a voice (stock or cloned) and an engine generation (e.g. Play 2 / Play 3 / PlayDialog-class—names evolve), and receive audio as a file job or a stream. Any transcription features are secondary; for production ASR, pair PlayHT with a dedicated STT stack from lectures 1–6.

Why PlayHT Is in an STT Module

Speech products are duplex. Procurement often writes “voice AI” and receives one quote that mixes ASR minutes with TTS characters. Your job is to unbundle: WER, diarization, and PII live on the listen side; MOS-style listening tests, cloning quality, and time-to-first-byte audio live on the speak side. PlayHT competes on the speak side with ElevenLabs; it does not replace Deepgram.

Catalog Snapshot (Qualitative)

DimensionPlayHTElevenLabsAzure / Google TTSSTT specialists (DG / Whisper / hyperscaler ASR)
Accuracy postureTTS quality is subjective (listening tests); do not use PlayHT as your WER source of truthSame TTS-first story; STT exists (Scribe) but still evalConsistent neural TTS; mature STT siblingsThis is where WER belongs
StreamingFirst-class streaming TTS (gRPC/WS via SDK)First-class streaming TTSStreaming TTS available; STT streaming separateSTT streaming (Deepgram/Azure/Google/AWS)
LanguagesMultilingual TTS catalog—verify locale + engineMultilingual TTS (+ STT list)Very broadSTT locale lists
Pricing postureTypically character- or plan-based TTS; cloning tiersCharacters (TTS) + minutes (STT)Metered characters / hoursSTT per-minute / per-second / GPU
On-prem vs cloudCloudCloudCloud + some containersWhisper can be on-prem
DiarizationNot why you buy PlayHTSTT diarize optionalOn STT productsYes (vendor or pyannote)
PII / cloningConsent + audio retention; don’t log prompt text with secretsSameEnterprise DPARedaction on transcripts

Engines and Product Shapes

Batch TTS

  • Course narration, IVR prompts
  • Job URL → download audio
  • Highest quality settings OK

Streaming TTS

  • Voice agents, live replies
  • Time-to-first-byte matters
  • PlayDialog-class for dialogue

Instant clone

  • Short enrollment audio
  • Consent receipt required
  • Not speaker identification

Python: REST TTS Job (Stable Teaching Surface)

Header names (AUTHORIZATION, X-USER-ID) and engine strings have changed across API versions—verify against current PlayHT docs. Prefer streaming SDK for agents.

import os import time import requests API_KEY = os.environ["PLAYHT_API_KEY"] USER_ID = os.environ["PLAYHT_USER_ID"] HEADERS = { "AUTHORIZATION": API_KEY, "X-USER-ID": USER_ID, "Content-Type": "application/json", } create = requests.post( "https://api.play.ht/api/v2/tts", headers=HEADERS, json={ "text": "Shipping update: your package arrives Thursday.", "voice": os.environ["PLAYHT_VOICE_ID"], # stock or consented clone "output_format": "mp3", "voice_engine": "PlayDialog", # confirm current engine ids }, timeout=60, ) create.raise_for_status() job = create.json() print("job:", job.get("id") or job) # Poll or follow returned audio URL depending on API version. # For agents, use the streaming SDK (pyht) instead of job poll.

Python: Streaming TTS Sketch (pyht)

Streaming sends text (sometimes incrementally from an LLM) and yields audio frames. Pair with streaming STT from lecture 10. Do not wait for the full LLM answer before starting TTS if you need low latency—sentence-level flush is a common pattern.

import os from pyht import Client from pyht.protos import api_pb2 client = Client( user_id=os.environ["PLAYHT_USER_ID"], api_key=os.environ["PLAYHT_API_KEY"], ) # Engine / voice enums change — check pyht docs for Play 3 / PlayDialog. with open("reply.wav", "wb") as out: for chunk in client.tts( "I can help with that return. Do you have the order number?", voice=os.environ["PLAYHT_VOICE_ID"], format=api_pb2.FORMAT_WAV, ): out.write(chunk)

PlayHT vs ElevenLabs — How to Choose

Do not invent a winner. Run the same scripts (neutral IVR, emotional support, code-switched language, interruptible agent) through both, plus Azure neural TTS as a cost/compliance control. Score: time-to-first-byte, listening preference, cloning fidelity, locale coverage, DPA, price at your character volume, and streaming SDK quality. Whichever loses TTS can still win another region or brand voice.

Pick PlayHT when

  • Bake-off wins on your voices/locales.
  • Streaming conversational TTS is the product.
  • You already standardized on their agent tooling.
  • STT will come from Deepgram/Whisper/hyperscaler.

Pick something else when

  • ElevenLabs wins the same listening test.
  • Azure/Google TTS is mandatory on the estate.
  • You thought PlayHT would replace ASR—it will not.
  • No consent to clone; use a stock neural voice or skip cloning.
Common Misconception

“PlayHT is a speech-to-text vendor like Whisper or Amazon Transcribe.” It is a speak vendor. Listing it in an STT RFP without a separate ASR scorecard produces demos that sound great and mis-hear account numbers. Always budget WER work on the listen path.

Knowledge Check

  1. Short Answer: What is PlayHT’s primary role in Module 16.2? Answer: Generative TTS / voice cloning (the speak side), not flagship ASR.
  2. True/False: You should report PlayHT listening scores as if they were WER. Answer: False—WER is an STT metric.
  3. Multiple Choice: Streaming PlayHT is mainly for: (a) live TTS audio frames, (b) GCS Chirp batch, (c) FAISS upserts. Answer: (a).
  4. Short Answer: Name a typical hybrid pairing. Answer: Deepgram or Whisper/hyperscaler STT + PlayHT TTS (or ElevenLabs TTS).
  5. True/False: PlayHT is the preferred air-gap on-prem ASR engine. Answer: False—cloud TTS; Whisper for on-prem ASR.
  6. Multiple Choice: Pricing posture is closest to: (a) TTS characters/plans, (b) Transcribe Medical seconds only, (c) per-15s Chirp STT only. Answer: (a).
  7. Short Answer: What must you store alongside a cloned voice id? Answer: Documented consent (and retention/policy metadata).
  8. True/False: PlayHT vs ElevenLabs should be decided by one marketing latency number. Answer: False—run a listening + TTFB bake-off on your scripts.
  9. Multiple Choice: Next lecture after PlayHT is: (a) DALL·E, (b) Speaker Diarization, (c) Pinecone. Answer: (b).
  10. Short Answer: Why unbundle “voice AI” quotes? Answer: So STT WER/PII and TTS quality/cloning are evaluated and priced separately.

Key Takeaways

  • PlayHT is a cloud TTS/cloning vendor; keep dedicated STT for recognition SLOs.
  • Compare with ElevenLabs and hyperscaler TTS using listening tests, TTFB, locales, DPA, and price.
  • Streaming TTS engines serve agents; batch jobs serve narration.
  • Cloning requires consent; PlayHT is not on-prem ASR.
  • Next: Speaker Diarization.
Trainer’s Guide

Lab: Synthesize one IVR script and one empathetic support script with PlayHT and ElevenLabs (stock voices). Blind vote. Then transcribe a two-speaker clip with Whisper only—show that PlayHT never entered the WER path.

RFP exercise: Split a fake “voice AI” quote into STT minutes vs TTS characters. Tie cloning to responsible AI.

Recap: PlayHT is generative TTS; unbundle it from STT. Continue with Speaker Diarization.