{"id":22,"date":"2026-05-15T00:48:52","date_gmt":"2026-05-15T00:48:52","guid":{"rendered":"https:\/\/dynoic.online\/?p=22"},"modified":"2026-05-15T03:57:11","modified_gmt":"2026-05-15T03:57:11","slug":"text-to-speech-free","status":"publish","type":"post","link":"https:\/\/dynoic.online\/?p=22","title":{"rendered":"Text To Speech Free"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\"\/>\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\"\/>\n<title>DYNOIC \u2014 Free Text to Speech Online | 20 Premium AI Voices<\/title>\n<meta name=\"description\" content=\"DYNOIC is the best free text to speech tool online. Convert text to speech instantly with 20 premium AI voices \u2014 male and female. Studio-grade controls. No signup needed. Try free now.\"\/>\n<meta name=\"keywords\" content=\"text to speech free, free text to speech online, tts free, ai voice generator, text to speech tool, online tts, dynoic text to speech\"\/>\n<link rel=\"canonical\" href=\"https:\/\/dynoic.com\/\"\/>\n<meta property=\"og:type\" content=\"website\"\/>\n<meta property=\"og:title\" content=\"DYNOIC \u2014 Free Text to Speech | 20 Premium AI Voices\"\/>\n<meta property=\"og:description\" content=\"Convert any text to speech free with 20 premium voices. Studio-grade controls. No signup required.\"\/>\n<meta name=\"twitter:card\" content=\"summary_large_image\"\/>\n<meta name=\"twitter:title\" content=\"DYNOIC \u2014 Free Text to Speech Online\"\/>\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\":\"https:\/\/schema.org\",\n  \"@type\":\"SoftwareApplication\",\n  \"name\":\"DYNOIC \u2014 Free Text to Speech\",\n  \"url\":\"https:\/\/dynoic.com\",\n  \"operatingSystem\":\"Web\",\n  \"applicationCategory\":\"UtilityApplication\",\n  \"description\":\"DYNOIC is a free text to speech generator with 20 premium AI voices. Convert any text to speech online instantly \u2014 no signup required.\",\n  \"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"USD\"},\n  \"aggregateRating\":{\"@type\":\"AggregateRating\",\"ratingValue\":\"4.9\",\"reviewCount\":\"4217\"}\n}\n<\/script>\n<script type=\"application\/ld+json\">\n{\n  \"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\n  \"mainEntity\":[\n    {\"@type\":\"Question\",\"name\":\"Is DYNOIC text to speech really free?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes. DYNOIC provides free text to speech with 10,000 credits per month \u2014 no signup or credit card required.\"}},\n    {\"@type\":\"Question\",\"name\":\"How many AI voices does DYNOIC have?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"DYNOIC has 20 premium AI voices \u2014 10 male and 10 female \u2014 each with a unique style, accent, and personality.\"}},\n    {\"@type\":\"Question\",\"name\":\"What voice controls does DYNOIC offer?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"DYNOIC offers Exaggeration, Speed, and Pitch controls so you can fine-tune every voice to match your exact content style.\"}},\n    {\"@type\":\"Question\",\"name\":\"Can I use DYNOIC for YouTube or podcast content?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes. Every DYNOIC voice is designed for professional content creation \u2014 YouTube, podcasts, ads, explainers, e-learning, and more.\"}}\n  ]\n}\n<\/script>\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"\/>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@300;400;500;600;700;800&#038;display=swap\" rel=\"stylesheet\"\/>\n\n<style>\n\/* ============================================================\n   DYNOIC \u2014 WORDPRESS-SAFE SCOPED STYLES\n   All selectors start with #dynoic-app to avoid theme conflicts\n   ============================================================ *\/\n\n#dynoic-app {\n  all: initial;\n  display: block;\n  background: #F8FAFF !important;\n  color: #111827 !important;\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif !important;\n  font-size: 14px;\n  line-height: 1.5;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n#dynoic-app *, #dynoic-app *::before, #dynoic-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#dynoic-app ::-webkit-scrollbar { width: 4px; }\n#dynoic-app ::-webkit-scrollbar-track { background: #F3F4F6; }\n#dynoic-app ::-webkit-scrollbar-thumb { background: #C7D2FE; border-radius: 2px; }\n\n\/* ---- CSS Variables ---- *\/\n#dynoic-app {\n  --primary: #6366F1;\n  --primary-dark: #4F46E5;\n  --primary-light: #EEF2FF;\n  --primary-border: #C7D2FE;\n  --bg: #FFFFFF;\n  --bg2: #F8FAFF;\n  --bg3: #F3F4F6;\n  --border: #E5E7EB;\n  --border2: #D1D5DB;\n  --text: #111827;\n  --text2: #374151;\n  --muted: #6B7280;\n  --faint: #9CA3AF;\n  --success: #10B981;\n  --radius: 12px;\n  --radius-sm: 8px;\n  --shadow-sm: 0 1px 3px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.04);\n  --shadow: 0 4px 16px rgba(0,0,0,0.08), 0 1px 4px rgba(0,0,0,0.04);\n  --shadow-lg: 0 12px 40px rgba(99,102,241,0.12), 0 4px 12px rgba(0,0,0,0.06);\n}\n\n\/* ---- Keyframes ---- *\/\n@keyframes dynoic-wv0 { from{height:3px} to{height:14px} }\n@keyframes dynoic-wv1 { from{height:5px} to{height:26px} }\n@keyframes dynoic-wv2 { from{height:4px} to{height:20px} }\n@keyframes dynoic-wv3 { from{height:6px} to{height:32px} }\n@keyframes dynoic-wv4 { from{height:5px} to{height:22px} }\n@keyframes dynoic-fade { from{opacity:0;transform:translateY(12px)} to{opacity:1;transform:translateY(0)} }\n@keyframes dynoic-pulse { 0%,100%{transform:scale(1);opacity:1} 50%{transform:scale(1.15);opacity:.7} }\n@keyframes dynoic-spin { to{transform:rotate(360deg)} }\n@keyframes dynoic-shimmer { 0%,100%{opacity:.5} 50%{opacity:1} }\n\n\/* ---- NAVBAR ---- *\/\n#dynoic-app .d-nav {\n  background: #FFFFFF;\n  border-bottom: 1px solid var(--border);\n  position: sticky;\n  top: 0;\n  z-index: 100;\n  padding: 0 32px;\n  height: 60px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  box-shadow: 0 1px 0 var(--border);\n}\n#dynoic-app .d-logo {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  text-decoration: none;\n}\n#dynoic-app .d-logo-icon {\n  width: 32px;\n  height: 32px;\n  background: linear-gradient(135deg, #6366F1, #8B5CF6);\n  border-radius: 8px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n#dynoic-app .d-logo-bars {\n  display: flex;\n  align-items: center;\n  gap: 2px;\n  height: 16px;\n}\n#dynoic-app .d-logo-bar {\n  width: 2px;\n  border-radius: 1px;\n  background: #fff;\n  animation: dynoic-shimmer 1s ease-in-out infinite alternate;\n}\n#dynoic-app .d-logo-text {\n  font-size: 18px;\n  font-weight: 800;\n  color: var(--text);\n  letter-spacing: -0.5px;\n}\n#dynoic-app .d-logo-badge {\n  font-size: 10px;\n  font-weight: 600;\n  background: var(--primary-light);\n  color: var(--primary);\n  border-radius: 4px;\n  padding: 2px 6px;\n  letter-spacing: 0.5px;\n}\n#dynoic-app .d-nav-links {\n  display: flex;\n  align-items: center;\n  gap: 4px;\n}\n#dynoic-app .d-nav-link {\n  font-size: 13px;\n  font-weight: 500;\n  color: var(--muted);\n  background: none;\n  border: none;\n  padding: 6px 12px;\n  border-radius: 6px;\n  cursor: pointer;\n  transition: all .15s;\n  font-family: inherit;\n}\n#dynoic-app .d-nav-link:hover,\n#dynoic-app .d-nav-link.active { color: var(--text); background: var(--bg3); }\n#dynoic-app .d-nav-cta {\n  background: var(--primary);\n  color: #fff;\n  font-size: 13px;\n  font-weight: 600;\n  border: none;\n  border-radius: 8px;\n  padding: 8px 18px;\n  cursor: pointer;\n  transition: all .15s;\n  font-family: inherit;\n  margin-left: 8px;\n}\n#dynoic-app .d-nav-cta:hover { background: var(--primary-dark); transform: translateY(-1px); box-shadow: 0 4px 12px rgba(99,102,241,.3); }\n\n\/* ---- SECTIONS ---- *\/\n#dynoic-app .d-section { display: none; }\n#dynoic-app .d-section.active { display: block; animation: dynoic-fade .3s ease; }\n\n\/* ---- HERO ---- *\/\n#dynoic-app .d-hero {\n  background: linear-gradient(135deg, #FAFAFF 0%, #EEF2FF 50%, #F5F3FF 100%);\n  border-bottom: 1px solid var(--border);\n  padding: 64px 32px 52px;\n  text-align: center;\n  position: relative;\n  overflow: hidden;\n}\n#dynoic-app .d-hero::before {\n  content: '';\n  position: absolute;\n  top: -80px; left: 50%; transform: translateX(-50%);\n  width: 800px; height: 400px;\n  background: radial-gradient(ellipse, rgba(99,102,241,0.08) 0%, transparent 70%);\n  pointer-events: none;\n}\n#dynoic-app .d-hero-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  background: var(--primary-light);\n  color: var(--primary);\n  font-size: 12px;\n  font-weight: 600;\n  border-radius: 20px;\n  padding: 5px 14px;\n  margin-bottom: 20px;\n  border: 1px solid var(--primary-border);\n  letter-spacing: 0.3px;\n}\n#dynoic-app .d-hero-badge-dot {\n  width: 6px; height: 6px;\n  border-radius: 50%;\n  background: var(--primary);\n  animation: dynoic-pulse 2s ease-in-out infinite;\n}\n#dynoic-app .d-hero h1 {\n  font-size: clamp(32px, 4.5vw, 52px);\n  font-weight: 800;\n  letter-spacing: -1.5px;\n  line-height: 1.1;\n  color: var(--text);\n  margin-bottom: 16px;\n}\n#dynoic-app .d-hero h1 span {\n  background: linear-gradient(135deg, #6366F1, #8B5CF6);\n  -webkit-background-clip: text;\n  -webkit-text-fill-color: transparent;\n  background-clip: text;\n}\n#dynoic-app .d-hero-sub {\n  font-size: 17px;\n  color: var(--muted);\n  max-width: 540px;\n  margin: 0 auto 32px;\n  line-height: 1.7;\n  font-weight: 400;\n}\n#dynoic-app .d-hero-sub strong { color: var(--text2); font-weight: 600; }\n#dynoic-app .d-hero-stats {\n  display: flex;\n  justify-content: center;\n  gap: 40px;\n  flex-wrap: wrap;\n}\n#dynoic-app .d-stat {\n  text-align: center;\n}\n#dynoic-app .d-stat-num {\n  font-size: 28px;\n  font-weight: 800;\n  color: var(--primary);\n  letter-spacing: -1px;\n  line-height: 1;\n}\n#dynoic-app .d-stat-label {\n  font-size: 11px;\n  color: var(--faint);\n  margin-top: 3px;\n  font-weight: 500;\n  letter-spacing: 0.5px;\n  text-transform: uppercase;\n}\n\n\/* ---- STUDIO WRAPPER ---- *\/\n#dynoic-app .d-studio {\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 40px 24px 80px;\n}\n#dynoic-app .d-studio-grid {\n  display: grid;\n  grid-template-columns: 1fr 360px;\n  gap: 24px;\n  align-items: start;\n}\n\n\/* ---- VOICE PANEL (LEFT) ---- *\/\n#dynoic-app .d-voice-panel {}\n#dynoic-app .d-panel-title {\n  font-size: 16px;\n  font-weight: 700;\n  color: var(--text);\n  margin-bottom: 4px;\n  letter-spacing: -0.3px;\n}\n#dynoic-app .d-panel-sub {\n  font-size: 13px;\n  color: var(--muted);\n  margin-bottom: 16px;\n}\n\n\/* ---- TABS ---- *\/\n#dynoic-app .d-tabs {\n  display: flex;\n  background: var(--bg3);\n  border-radius: 10px;\n  padding: 4px;\n  gap: 4px;\n  margin-bottom: 20px;\n  width: fit-content;\n}\n#dynoic-app .d-tab {\n  font-size: 13px;\n  font-weight: 600;\n  color: var(--muted);\n  background: transparent;\n  border: none;\n  border-radius: 7px;\n  padding: 7px 20px;\n  cursor: pointer;\n  transition: all .18s;\n  font-family: inherit;\n  white-space: nowrap;\n}\n#dynoic-app .d-tab.active {\n  background: #fff;\n  color: var(--text);\n  box-shadow: var(--shadow-sm);\n}\n\n\/* ---- VOICE GRID ---- *\/\n#dynoic-app .d-voice-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n  gap: 12px;\n  margin-bottom: 28px;\n}\n#dynoic-app .d-voice-card {\n  background: #fff;\n  border: 1.5px solid var(--border);\n  border-radius: var(--radius);\n  padding: 16px;\n  cursor: pointer;\n  transition: all .2s ease;\n  position: relative;\n  overflow: hidden;\n  user-select: none;\n}\n#dynoic-app .d-voice-card::after {\n  content: '';\n  position: absolute;\n  bottom: 0; left: 0; right: 0;\n  height: 3px;\n  background: linear-gradient(90deg, #6366F1, #8B5CF6);\n  transform: scaleX(0);\n  transform-origin: left;\n  transition: transform .2s ease;\n}\n#dynoic-app .d-voice-card:hover {\n  border-color: var(--primary-border);\n  box-shadow: var(--shadow);\n  transform: translateY(-2px);\n}\n#dynoic-app .d-voice-card:hover::after { transform: scaleX(1); }\n#dynoic-app .d-voice-card.active {\n  border-color: var(--primary);\n  background: var(--primary-light);\n  box-shadow: var(--shadow-lg);\n}\n#dynoic-app .d-voice-card.active::after { transform: scaleX(1); }\n#dynoic-app .d-voice-avatar {\n  width: 40px;\n  height: 40px;\n  border-radius: 10px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 18px;\n  margin-bottom: 10px;\n  font-weight: 700;\n  letter-spacing: -0.5px;\n}\n#dynoic-app .d-voice-name {\n  font-size: 14px;\n  font-weight: 700;\n  color: var(--text);\n  margin-bottom: 4px;\n  letter-spacing: -0.3px;\n  line-height: 1.2;\n}\n#dynoic-app .d-voice-card.active .d-voice-name { color: var(--primary-dark); }\n#dynoic-app .d-voice-style {\n  font-size: 11px;\n  font-weight: 500;\n  color: var(--muted);\n  line-height: 1.4;\n  margin-bottom: 8px;\n}\n#dynoic-app .d-voice-tag {\n  display: inline-block;\n  font-size: 10px;\n  font-weight: 600;\n  border-radius: 4px;\n  padding: 2px 7px;\n  letter-spacing: 0.3px;\n}\n#dynoic-app .d-voice-wave {\n  display: flex;\n  gap: 2px;\n  align-items: flex-end;\n  height: 20px;\n  margin-top: 10px;\n}\n#dynoic-app .d-wbar {\n  width: 3px;\n  border-radius: 1px;\n  background: rgba(99,102,241,0.2);\n  height: 3px;\n  transition: all .4s;\n  flex-shrink: 0;\n}\n#dynoic-app .d-wbar.live {\n  background: var(--primary);\n  transition: none;\n}\n#dynoic-app .d-preview-playing {\n  display: flex;\n  align-items: center;\n  gap: 4px;\n  font-size: 10px;\n  color: var(--primary);\n  font-weight: 600;\n  margin-top: 8px;\n}\n#dynoic-app .d-preview-dot {\n  width: 6px; height: 6px; border-radius: 50%;\n  background: var(--primary);\n  animation: dynoic-pulse 1s ease-in-out infinite;\n}\n\n\/* ---- FAQ (SEO) ---- *\/\n#dynoic-app .d-faq-wrap {\n  background: #fff;\n  border: 1px solid var(--border);\n  border-radius: var(--radius);\n  overflow: hidden;\n  box-shadow: var(--shadow-sm);\n}\n#dynoic-app .d-faq-item {\n  border-bottom: 1px solid var(--border);\n  padding: 16px 20px;\n}\n#dynoic-app .d-faq-item:last-child { border-bottom: none; }\n#dynoic-app .d-faq-q {\n  font-size: 14px;\n  font-weight: 600;\n  color: var(--text);\n  margin-bottom: 6px;\n}\n#dynoic-app .d-faq-a {\n  font-size: 13px;\n  color: var(--muted);\n  line-height: 1.65;\n}\n\n\/* ---- RIGHT PANEL ---- *\/\n#dynoic-app .d-control-panel {\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n  position: sticky;\n  top: 76px;\n}\n#dynoic-app .d-cbox {\n  background: #fff;\n  border: 1px solid var(--border);\n  border-radius: var(--radius);\n  padding: 20px;\n  box-shadow: var(--shadow-sm);\n}\n#dynoic-app .d-cbox-label {\n  font-size: 11px;\n  font-weight: 600;\n  color: var(--faint);\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  margin-bottom: 14px;\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n#dynoic-app .d-cbox-label::after {\n  content: '';\n  flex: 1;\n  height: 1px;\n  background: var(--border);\n}\n\n\/* Selected voice display *\/\n#dynoic-app .d-sel-voice {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  margin-bottom: 0;\n}\n#dynoic-app .d-sel-avatar {\n  width: 44px;\n  height: 44px;\n  border-radius: 10px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 20px;\n  font-weight: 700;\n  flex-shrink: 0;\n}\n#dynoic-app .d-sel-info {}\n#dynoic-app .d-sel-name {\n  font-size: 16px;\n  font-weight: 700;\n  color: var(--text);\n  letter-spacing: -0.3px;\n}\n#dynoic-app .d-sel-style {\n  font-size: 12px;\n  color: var(--muted);\n  margin-top: 2px;\n}\n#dynoic-app .d-sel-gender {\n  display: inline-block;\n  font-size: 10px;\n  font-weight: 600;\n  border-radius: 4px;\n  padding: 2px 7px;\n  margin-top: 6px;\n}\n\n\/* Textarea *\/\n#dynoic-app .d-textarea {\n  width: 100%;\n  min-height: 110px;\n  background: var(--bg2);\n  border: 1.5px solid var(--border);\n  border-radius: 10px;\n  padding: 12px 14px;\n  font-size: 13.5px;\n  font-family: inherit;\n  color: var(--text);\n  line-height: 1.65;\n  resize: vertical;\n  transition: border-color .15s;\n  outline: none;\n}\n#dynoic-app .d-textarea:focus { border-color: var(--primary); }\n#dynoic-app .d-textarea-footer {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-top: 6px;\n}\n#dynoic-app .d-char-count {\n  font-size: 11px;\n  color: var(--faint);\n}\n#dynoic-app .d-sample-btn {\n  font-size: 11px;\n  color: var(--primary);\n  background: none;\n  border: none;\n  cursor: pointer;\n  font-family: inherit;\n  font-weight: 500;\n  padding: 0;\n}\n#dynoic-app .d-sample-btn:hover { text-decoration: underline; }\n\n\/* Sliders *\/\n#dynoic-app .d-slider-row {\n  margin-bottom: 16px;\n}\n#dynoic-app .d-slider-row:last-child { margin-bottom: 0; }\n#dynoic-app .d-slider-top {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-bottom: 8px;\n}\n#dynoic-app .d-slider-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: var(--text2);\n}\n#dynoic-app .d-slider-hint {\n  font-size: 11px;\n  color: var(--faint);\n  margin-top: 1px;\n}\n#dynoic-app .d-slider-val {\n  font-size: 12px;\n  font-weight: 700;\n  color: var(--primary);\n  background: var(--primary-light);\n  border-radius: 5px;\n  padding: 2px 8px;\n  min-width: 40px;\n  text-align: center;\n}\n#dynoic-app input[type=range] {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 100%;\n  height: 5px;\n  border-radius: 3px;\n  background: var(--border);\n  outline: none;\n  cursor: pointer;\n}\n#dynoic-app input[type=range]::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  width: 16px;\n  height: 16px;\n  border-radius: 50%;\n  background: var(--primary);\n  cursor: pointer;\n  box-shadow: 0 0 0 3px rgba(99,102,241,0.2);\n  transition: box-shadow .15s;\n}\n#dynoic-app input[type=range]::-webkit-slider-thumb:hover {\n  box-shadow: 0 0 0 5px rgba(99,102,241,0.25);\n}\n#dynoic-app input[type=range]::-moz-range-thumb {\n  width: 16px; height: 16px; border-radius: 50%;\n  background: var(--primary); border: none; cursor: pointer;\n}\n\n\/* Playback *\/\n#dynoic-app .d-play-row {\n  display: flex;\n  gap: 10px;\n  align-items: center;\n}\n#dynoic-app .d-play-btn {\n  min-width: 52px;\n  height: 52px;\n  background: linear-gradient(135deg, #6366F1, #8B5CF6);\n  border: none;\n  border-radius: 12px;\n  cursor: pointer;\n  font-size: 18px;\n  color: #fff;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  transition: all .15s;\n  box-shadow: 0 4px 16px rgba(99,102,241,.35);\n  flex-shrink: 0;\n}\n#dynoic-app .d-play-btn:hover { transform: scale(1.05); box-shadow: 0 6px 20px rgba(99,102,241,.45); }\n#dynoic-app .d-stop-btn {\n  width: 44px; height: 44px;\n  background: #fff;\n  border: 1.5px solid var(--border);\n  border-radius: 10px;\n  cursor: pointer;\n  font-size: 14px;\n  color: var(--muted);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  transition: all .15s;\n  flex-shrink: 0;\n}\n#dynoic-app .d-stop-btn:hover { border-color: var(--border2); color: var(--text); }\n#dynoic-app .d-play-info { flex: 1; min-width: 0; }\n#dynoic-app .d-play-status {\n  font-size: 12px;\n  font-weight: 600;\n  color: var(--muted);\n  margin-bottom: 6px;\n}\n#dynoic-app .d-play-status.speaking { color: var(--primary); }\n#dynoic-app .d-play-wave {\n  display: flex;\n  gap: 3px;\n  align-items: flex-end;\n  height: 24px;\n}\n#dynoic-app .d-play-note {\n  font-size: 11px;\n  color: var(--faint);\n  text-align: center;\n  margin-top: 8px;\n  line-height: 1.5;\n}\n\n\/* ---- SECTION: VOICES PAGE ---- *\/\n#dynoic-app .d-voices-page { max-width: 1100px; margin: 0 auto; padding: 48px 24px 80px; }\n#dynoic-app .d-page-header { margin-bottom: 36px; }\n#dynoic-app .d-page-eyebrow { font-size: 12px; font-weight: 600; color: var(--primary); text-transform: uppercase; letter-spacing: 1px; margin-bottom: 8px; }\n#dynoic-app .d-page-title { font-size: 36px; font-weight: 800; color: var(--text); letter-spacing: -1px; margin-bottom: 8px; }\n#dynoic-app .d-page-desc { font-size: 15px; color: var(--muted); }\n#dynoic-app .d-vcat-label {\n  font-size: 11px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase;\n  color: var(--faint); margin: 32px 0 14px; padding-bottom: 10px;\n  border-bottom: 1px solid var(--border);\n}\n#dynoic-app .d-vlist-item {\n  display: flex; align-items: center; gap: 16px;\n  padding: 16px 20px; background: #fff;\n  border: 1px solid var(--border); border-radius: var(--radius);\n  margin-bottom: 8px; cursor: pointer;\n  transition: all .15s; border-left: 3px solid transparent;\n  box-shadow: var(--shadow-sm);\n}\n#dynoic-app .d-vlist-item:hover {\n  border-left-color: var(--primary);\n  box-shadow: var(--shadow);\n  transform: translateX(3px);\n}\n#dynoic-app .d-vlist-av {\n  width: 48px; height: 48px; border-radius: 10px;\n  display: flex; align-items: center; justify-content: center;\n  font-size: 20px; font-weight: 700; flex-shrink: 0;\n}\n#dynoic-app .d-vlist-name { font-size: 15px; font-weight: 700; color: var(--text); margin-bottom: 3px; }\n#dynoic-app .d-vlist-desc { font-size: 12px; color: var(--muted); }\n\n\/* ---- PRICING ---- *\/\n#dynoic-app .d-pricing-page { max-width: 1000px; margin: 0 auto; padding: 48px 24px 80px; text-align: center; }\n#dynoic-app .d-pricing-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; margin-top: 40px; text-align: left; }\n#dynoic-app .d-pc {\n  background: #fff; border: 1.5px solid var(--border);\n  border-radius: 16px; padding: 28px 24px;\n  position: relative; transition: all .2s; box-shadow: var(--shadow-sm);\n}\n#dynoic-app .d-pc:hover { transform: translateY(-4px); box-shadow: var(--shadow); }\n#dynoic-app .d-pc.featured { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(99,102,241,.1), var(--shadow-lg); }\n#dynoic-app .d-pc-badge {\n  position: absolute; top: -12px; left: 50%; transform: translateX(-50%);\n  font-size: 10px; font-weight: 700; letter-spacing: 1px;\n  background: linear-gradient(135deg, #6366F1, #8B5CF6);\n  color: #fff; border-radius: 20px; padding: 3px 14px; white-space: nowrap;\n}\n#dynoic-app .d-pc-plan { font-size: 11px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; color: var(--faint); margin-bottom: 8px; }\n#dynoic-app .d-pc-price { font-size: 48px; font-weight: 800; letter-spacing: -2px; line-height: 1; margin-bottom: 4px; }\n#dynoic-app .d-pc-period { font-size: 13px; color: var(--muted); margin-bottom: 12px; }\n#dynoic-app .d-pc-credits {\n  font-size: 12px; font-weight: 600; border-radius: 6px; padding: 8px 12px;\n  margin-bottom: 20px;\n}\n#dynoic-app .d-pc-feats { display: flex; flex-direction: column; gap: 9px; margin-bottom: 20px; }\n#dynoic-app .d-pc-feat { font-size: 13px; color: var(--text2); display: flex; gap: 8px; align-items: flex-start; }\n#dynoic-app .d-pc-check { flex-shrink: 0; font-weight: 700; }\n#dynoic-app .d-pc-btn {\n  width: 100%; border-radius: 10px; padding: 12px 0;\n  font-size: 14px; font-weight: 700; cursor: pointer;\n  transition: all .15s; font-family: inherit; border: none;\n}\n#dynoic-app .d-pc-btn:hover { filter: brightness(1.05); transform: translateY(-1px); }\n\n\/* ---- ABOUT ---- *\/\n#dynoic-app .d-about-page { max-width: 780px; margin: 0 auto; padding: 48px 24px 80px; }\n#dynoic-app .d-about-body { display: flex; flex-direction: column; gap: 20px; }\n#dynoic-app .d-about-p { font-size: 15px; color: var(--text2); line-height: 1.82; }\n#dynoic-app .d-about-card {\n  background: #fff; border: 1px solid var(--border);\n  border-radius: var(--radius); padding: 22px 24px;\n  border-left: 4px solid var(--primary); box-shadow: var(--shadow-sm);\n}\n#dynoic-app .d-about-card h3 { font-size: 15px; font-weight: 700; color: var(--text); margin-bottom: 8px; letter-spacing: -0.2px; }\n#dynoic-app .d-about-card p { font-size: 13.5px; color: var(--muted); line-height: 1.75; }\n\n\/* ---- FOOTER ---- *\/\n#dynoic-app .d-footer {\n  background: var(--text);\n  color: rgba(255,255,255,0.6);\n  padding: 32px;\n  text-align: center;\n  font-size: 13px;\n}\n#dynoic-app .d-footer strong { color: #fff; }\n\n\/* ---- SECTION LABELS ---- *\/\n#dynoic-app .d-sec-eyebrow { font-size: 12px; font-weight: 600; color: var(--primary); text-transform: uppercase; letter-spacing: 1px; margin-bottom: 6px; }\n#dynoic-app .d-sec-title { font-size: 22px; font-weight: 700; color: var(--text); letter-spacing: -0.5px; margin-bottom: 4px; }\n#dynoic-app .d-sec-sub { font-size: 13px; color: var(--muted); margin-bottom: 18px; }\n\n\/* ---- SAMPLES PILLS ---- *\/\n#dynoic-app .d-samples-row { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }\n#dynoic-app .d-sample-pill {\n  font-size: 11px; font-weight: 500; background: var(--bg3);\n  border: 1px solid var(--border); border-radius: 6px;\n  padding: 4px 10px; cursor: pointer; color: var(--muted);\n  transition: all .12s; font-family: inherit;\n}\n#dynoic-app .d-sample-pill:hover { background: var(--primary-light); border-color: var(--primary-border); color: var(--primary); }\n\n\/* ---- RESPONSIVE ---- *\/\n@media(max-width: 960px) {\n  #dynoic-app .d-studio-grid { grid-template-columns: 1fr; }\n  #dynoic-app .d-control-panel { position: static; }\n  #dynoic-app .d-pricing-grid { grid-template-columns: 1fr; max-width: 420px; margin-left: auto; margin-right: auto; }\n}\n@media(max-width: 768px) {\n  #dynoic-app .d-nav { padding: 0 16px; }\n  #dynoic-app .d-nav-links { display: none; }\n  #dynoic-app .d-hero { padding: 48px 16px 40px; }\n  #dynoic-app .d-studio { padding: 24px 16px 60px; }\n  #dynoic-app .d-voice-grid { grid-template-columns: repeat(2, 1fr); }\n  #dynoic-app .d-hero h1 { font-size: 28px; }\n  #dynoic-app .d-hero-stats { gap: 24px; }\n}\n@media(max-width: 420px) {\n  #dynoic-app .d-voice-grid { grid-template-columns: 1fr 1fr; }\n}\n<\/style>\n<\/head>\n<body style=\"margin:0;padding:0;background:#F8FAFF;\">\n<div id=\"dynoic-app\">\n\n<!-- ===== NAV ===== -->\n<nav class=\"d-nav\" role=\"navigation\" aria-label=\"Main navigation\">\n  <div class=\"d-logo\">\n    <div class=\"d-logo-icon\" aria-hidden=\"true\">\n      <div class=\"d-logo-bars\">\n        <div class=\"d-logo-bar\" style=\"height:6px;animation-delay:0s\"><\/div>\n        <div class=\"d-logo-bar\" style=\"height:10px;animation-delay:.15s\"><\/div>\n        <div class=\"d-logo-bar\" style=\"height:14px;animation-delay:.3s\"><\/div>\n        <div class=\"d-logo-bar\" style=\"height:10px;animation-delay:.45s\"><\/div>\n        <div class=\"d-logo-bar\" style=\"height:6px;animation-delay:.6s\"><\/div>\n      <\/div>\n    <\/div>\n    <span class=\"d-logo-text\">DYNOIC<\/span>\n    <span class=\"d-logo-badge\">FREE TTS<\/span>\n  <\/div>\n  <div class=\"d-nav-links\">\n    <button class=\"d-nav-link active\" onclick=\"dynoicGo('studio')\">Studio<\/button>\n    <button class=\"d-nav-link\" onclick=\"dynoicGo('voices')\">Voices<\/button>\n    <button class=\"d-nav-link\" onclick=\"dynoicGo('pricing')\">Pricing<\/button>\n    <button class=\"d-nav-link\" onclick=\"dynoicGo('about')\">About<\/button>\n  <\/div>\n  <button class=\"d-nav-cta\" onclick=\"dynoicGo('studio')\">Try Free \u2192<\/button>\n<\/nav>\n\n<!-- ===== STUDIO SECTION ===== -->\n<div id=\"d-sec-studio\" class=\"d-section active\">\n\n  <!-- Hero -->\n  <header class=\"d-hero\" role=\"banner\">\n    <div class=\"d-hero-badge\">\n      <div class=\"d-hero-badge-dot\" aria-hidden=\"true\"><\/div>\n      Free Text to Speech \u2014 No Signup Required\n    <\/div>\n    <h1>Convert Text to Speech Free<br\/><span>with 20 Premium AI Voices<\/span><\/h1>\n    <p class=\"d-hero-sub\">\n      <strong>DYNOIC<\/strong> is the best free text to speech tool online. Get <strong>20 premium voices<\/strong> with studio-grade controls \u2014 no signup, no cost, no limits on the free plan.\n    <\/p>\n    <div class=\"d-hero-stats\">\n      <div class=\"d-stat\"><div class=\"d-stat-num\">20<\/div><div class=\"d-stat-label\">Premium Voices<\/div><\/div>\n      <div class=\"d-stat\"><div class=\"d-stat-num\">10K<\/div><div class=\"d-stat-label\">Free Credits\/mo<\/div><\/div>\n      <div class=\"d-stat\"><div class=\"d-stat-num\">$0<\/div><div class=\"d-stat-label\">To Get Started<\/div><\/div>\n      <div class=\"d-stat\"><div class=\"d-stat-num\">4.9\u2605<\/div><div class=\"d-stat-label\">User Rating<\/div><\/div>\n    <\/div>\n  <\/header>\n\n  <!-- Studio -->\n  <main class=\"d-studio\" role=\"main\">\n    <div class=\"d-studio-grid\">\n\n      <!-- LEFT: Voice Picker -->\n      <section aria-label=\"Voice selection\">\n        <div class=\"d-sec-eyebrow\">Free Text to Speech Voices<\/div>\n        <div class=\"d-sec-title\">Choose Your Voice<\/div>\n        <p class=\"d-sec-sub\">Click any voice to hear a preview. Then type your script and hit play.<\/p>\n\n        <div class=\"d-tabs\" role=\"tablist\" aria-label=\"Voice gender tabs\">\n          <button class=\"d-tab active\" role=\"tab\" aria-selected=\"true\" onclick=\"dynoicTab('male',this)\">\ud83d\udc68 Male \u2014 10<\/button>\n          <button class=\"d-tab\" role=\"tab\" aria-selected=\"false\" onclick=\"dynoicTab('female',this)\">\ud83d\udc69 Female \u2014 10<\/button>\n        <\/div>\n\n        <div class=\"d-voice-grid\" id=\"d-voice-grid\" aria-label=\"Available voices\"><\/div>\n\n        <!-- Sample scripts -->\n        <div style=\"margin-bottom:28px\">\n          <div class=\"d-sec-eyebrow\" style=\"margin-bottom:6px\">Sample Scripts<\/div>\n          <div class=\"d-samples-row\" id=\"d-samples\"><\/div>\n        <\/div>\n\n        <!-- SEO FAQ -->\n        <section aria-labelledby=\"faq-heading\">\n          <div class=\"d-sec-eyebrow\" style=\"margin-bottom:6px\">Free Text to Speech \u2014 FAQ<\/div>\n          <h2 id=\"faq-heading\" style=\"font-size:20px;font-weight:700;color:#111827;letter-spacing:-0.5px;margin-bottom:14px;\">Common Questions<\/h2>\n          <div class=\"d-faq-wrap\">\n            <div class=\"d-faq-item\">\n              <div class=\"d-faq-q\">Is DYNOIC text to speech really free?<\/div>\n              <div class=\"d-faq-a\">Yes \u2014 100% free with no credit card or account needed. You get 10,000 credits per month on the free plan. DYNOIC is the most generous free text to speech tool online, giving you full access to all voice controls without a subscription.<\/div>\n            <\/div>\n            <div class=\"d-faq-item\">\n              <div class=\"d-faq-q\">What makes DYNOIC different from other free TTS tools?<\/div>\n              <div class=\"d-faq-a\">Most free text to speech tools give you one flat, robotic voice with no controls. DYNOIC gives you 20 premium AI voices with Exaggeration, Speed, and Pitch controls \u2014 so you can fine-tune exactly how each voice sounds for your specific content type.<\/div>\n            <\/div>\n            <div class=\"d-faq-item\">\n              <div class=\"d-faq-q\">Can I use DYNOIC for YouTube, podcasts, and ads?<\/div>\n              <div class=\"d-faq-a\">Absolutely. Every DYNOIC voice is designed for real content creation. From warm and natural voices perfect for podcasts, to deep authoritative voices for ads, to upbeat energetic voices for YouTube \u2014 DYNOIC has the right voice for every use case.<\/div>\n            <\/div>\n            <div class=\"d-faq-item\">\n              <div class=\"d-faq-q\">What does the Exaggeration slider do?<\/div>\n              <div class=\"d-faq-a\">The Exaggeration slider controls how expressive and dramatic the voice sounds. Low exaggeration gives you a calm, neutral delivery. High exaggeration makes the voice more animated and emotionally expressive \u2014 perfect for storytelling, ads, and engaging content.<\/div>\n            <\/div>\n          <\/div>\n        <\/section>\n      <\/section>\n\n      <!-- RIGHT: Controls -->\n      <aside aria-label=\"Voice controls and playback\">\n        <div class=\"d-control-panel\">\n\n          <!-- Selected Voice -->\n          <div class=\"d-cbox\" id=\"d-sel-box\">\n            <div class=\"d-cbox-label\">Active Voice<\/div>\n            <div class=\"d-sel-voice\">\n              <div class=\"d-sel-avatar\" id=\"d-sel-avatar\">C<\/div>\n              <div class=\"d-sel-info\">\n                <div class=\"d-sel-name\" id=\"d-sel-name\">Callum<\/div>\n                <div class=\"d-sel-style\" id=\"d-sel-style\">Husky Trickster<\/div>\n                <div class=\"d-sel-gender\" id=\"d-sel-gender\">Male<\/div>\n              <\/div>\n            <\/div>\n          <\/div>\n\n          <!-- Script Input -->\n          <div class=\"d-cbox\">\n            <div class=\"d-cbox-label\">Your Script<\/div>\n            <textarea class=\"d-textarea\" id=\"d-script\" rows=\"5\"\n              placeholder=\"Type or paste any text here to convert to speech for free...\">Welcome to DYNOIC \u2014 the best free text to speech tool online. Choose from 20 premium voices, adjust the controls, and create professional audio in seconds.<\/textarea>\n            <div class=\"d-textarea-footer\">\n              <span class=\"d-char-count\" id=\"d-chars\">159 chars<\/span>\n              <button class=\"d-sample-btn\" onclick=\"dynoicRandomSample()\">\u21bb Load sample<\/button>\n            <\/div>\n          <\/div>\n\n          <!-- Voice Controls -->\n          <div class=\"d-cbox\">\n            <div class=\"d-cbox-label\">Voice Controls<\/div>\n\n            <div class=\"d-slider-row\">\n              <div class=\"d-slider-top\">\n                <div>\n                  <div class=\"d-slider-label\">Exaggeration<\/div>\n                  <div class=\"d-slider-hint\">Low = calm \u00b7 High = expressive<\/div>\n                <\/div>\n                <div class=\"d-slider-val\" id=\"d-exag-val\">50%<\/div>\n              <\/div>\n              <input type=\"range\" id=\"d-exag\" min=\"0\" max=\"1\" step=\"0.01\" value=\"0.5\" oninput=\"dynoicSlider('exag')\"\/>\n            <\/div>\n\n            <div class=\"d-slider-row\">\n              <div class=\"d-slider-top\">\n                <div>\n                  <div class=\"d-slider-label\">Speed<\/div>\n                  <div class=\"d-slider-hint\">Pace of speech delivery<\/div>\n                <\/div>\n                <div class=\"d-slider-val\" id=\"d-speed-val\">1.00\u00d7<\/div>\n              <\/div>\n              <input type=\"range\" id=\"d-speed\" min=\"0.5\" max=\"1.8\" step=\"0.01\" value=\"1.0\" oninput=\"dynoicSlider('speed')\"\/>\n            <\/div>\n\n            <div class=\"d-slider-row\">\n              <div class=\"d-slider-top\">\n                <div>\n                  <div class=\"d-slider-label\">Pitch<\/div>\n                  <div class=\"d-slider-hint\">Tone of the voice<\/div>\n                <\/div>\n                <div class=\"d-slider-val\" id=\"d-pitch-val\">1.00\u00d7<\/div>\n              <\/div>\n              <input type=\"range\" id=\"d-pitch\" min=\"0.6\" max=\"1.8\" step=\"0.01\" value=\"1.0\" oninput=\"dynoicSlider('pitch')\"\/>\n            <\/div>\n          <\/div>\n\n          <!-- Playback -->\n          <div class=\"d-cbox\">\n            <div class=\"d-cbox-label\">Playback<\/div>\n            <div class=\"d-play-row\">\n              <button class=\"d-play-btn\" id=\"d-play-btn\" onclick=\"dynoicPlay()\" aria-label=\"Play text to speech\">\u25b6<\/button>\n              <button class=\"d-stop-btn\" id=\"d-stop-btn\" onclick=\"dynoicStop()\" style=\"display:none\" aria-label=\"Stop playback\">\u23f9<\/button>\n              <div class=\"d-play-info\">\n                <div class=\"d-play-status\" id=\"d-play-status\">Ready to speak<\/div>\n                <div class=\"d-play-wave\" id=\"d-play-wave\"><\/div>\n              <\/div>\n            <\/div>\n            <p class=\"d-play-note\">Best results in Chrome on Mac or Windows. Voice quality varies by browser.<\/p>\n          <\/div>\n\n        <\/div>\n      <\/aside>\n    <\/div>\n  <\/main>\n<\/div>\n\n<!-- ===== VOICES SECTION ===== -->\n<div id=\"d-sec-voices\" class=\"d-section\">\n  <div class=\"d-voices-page\">\n    <div class=\"d-page-header\">\n      <div class=\"d-page-eyebrow\">Premium AI Voices<\/div>\n      <h1 class=\"d-page-title\">All 20 Free Text to Speech Voices<\/h1>\n      <p class=\"d-page-desc\">Click any voice to open it in the studio and hear a preview.<\/p>\n    <\/div>\n    <div id=\"d-voices-list\"><\/div>\n  <\/div>\n<\/div>\n\n<!-- ===== PRICING SECTION ===== -->\n<div id=\"d-sec-pricing\" class=\"d-section\">\n  <div class=\"d-pricing-page\">\n    <div class=\"d-page-eyebrow\">Free Text to Speech Pricing<\/div>\n    <h1 class=\"d-page-title\" style=\"font-size:38px;font-weight:800;letter-spacing:-1px;color:#111827;margin-bottom:8px\">Simple, Honest Pricing<\/h1>\n    <p style=\"font-size:16px;color:#6B7280;max-width:480px;margin:0 auto\">Start free with 10,000 credits every month. Upgrade when you need more. No tricks.<\/p>\n    <div class=\"d-pricing-grid\">\n\n      <div class=\"d-pc\">\n        <div class=\"d-pc-plan\">Free Plan<\/div>\n        <div class=\"d-pc-price\" style=\"color:#374151\">$0<\/div>\n        <div class=\"d-pc-period\">\/forever<\/div>\n        <div class=\"d-pc-credits\" style=\"background:#F3F4F6;border:1px solid #E5E7EB;color:#374151\">\ud83c\udf81 <strong>10,000 credits<\/strong>\/month<\/div>\n        <div class=\"d-pc-feats\">\n          <div class=\"d-pc-feat\"><span class=\"d-pc-check\" style=\"color:#6366F1\">\u2713<\/span>10,000 credits\/month<\/div>\n          <div class=\"d-pc-feat\"><span class=\"d-pc-check\" style=\"color:#6366F1\">\u2713<\/span>All 20 premium voices<\/div>\n          <div class=\"d-pc-feat\"><span class=\"d-pc-check\" style=\"color:#6366F1\">\u2713<\/span>All 3 voice controls<\/div>\n          <div class=\"d-pc-feat\"><span class=\"d-pc-check\" style=\"color:#6366F1\">\u2713<\/span>Browser playback<\/div>\n          <div class=\"d-pc-feat\"><span class=\"d-pc-check\" style=\"color:#6366F1\">\u2713<\/span>No signup required<\/div>\n        <\/div>\n        <button class=\"d-pc-btn\" style=\"background:#F3F4F6;color:#374151;border:1.5px solid #E5E7EB\" onclick=\"dynoicGo('studio')\">Start Free<\/button>\n      <\/div>\n\n      <div class=\"d-pc featured\">\n        <div class=\"d-pc-badge\">Most Popular<\/div>\n        <div class=\"d-pc-plan\" style=\"color:#6366F1\">Basic Plan<\/div>\n        <div class=\"d-pc-price\" style=\"color:#6366F1\">$2<\/div>\n        <div class=\"d-pc-period\">\/month<\/div>\n        <div class=\"d-pc-credits\" style=\"background:#EEF2FF;border:1px solid #C7D2FE;color:#6366F1\">\u26a1 <strong>50,000 credits<\/strong>\/month<\/div>\n        <div class=\"d-pc-feats\">\n          <div class=\"d-pc-feat\"><span class=\"d-pc-check\" style=\"color:#6366F1\">\u2713<\/span>50,000 credits\/month<\/div>\n          <div class=\"d-pc-feat\"><span class=\"d-pc-check\" style=\"color:#6366F1\">\u2713<\/span>All 20 premium voices<\/div>\n          <div class=\"d-pc-feat\"><span class=\"d-pc-check\" style=\"color:#6366F1\">\u2713<\/span>HD audio export<\/div>\n          <div class=\"d-pc-feat\"><span class=\"d-pc-check\" style=\"color:#6366F1\">\u2713<\/span>All voice controls<\/div>\n          <div class=\"d-pc-feat\"><span class=\"d-pc-check\" style=\"color:#6366F1\">\u2713<\/span>Priority playback speed<\/div>\n          <div class=\"d-pc-feat\"><span class=\"d-pc-check\" style=\"color:#6366F1\">\u2713<\/span>Email support<\/div>\n        <\/div>\n        <button class=\"d-pc-btn\" style=\"background:linear-gradient(135deg,#6366F1,#8B5CF6);color:#fff\">Get Basic \u2014 $2\/mo<\/button>\n      <\/div>\n\n      <div class=\"d-pc\">\n        <div class=\"d-pc-plan\" style=\"color:#7C3AED\">Premium Plan<\/div>\n        <div class=\"d-pc-price\" style=\"color:#7C3AED\">$5<\/div>\n        <div class=\"d-pc-period\">\/month<\/div>\n        <div class=\"d-pc-credits\" style=\"background:#F5F3FF;border:1px solid #DDD6FE;color:#7C3AED\">\ud83d\udc51 <strong>1,00,000 credits<\/strong>\/month<\/div>\n        <div class=\"d-pc-feats\">\n          <div class=\"d-pc-feat\"><span class=\"d-pc-check\" style=\"color:#7C3AED\">\u2713<\/span>1,00,000 credits\/month<\/div>\n          <div class=\"d-pc-feat\"><span class=\"d-pc-check\" style=\"color:#7C3AED\">\u2713<\/span>All 20 premium voices<\/div>\n          <div class=\"d-pc-feat\"><span class=\"d-pc-check\" style=\"color:#7C3AED\">\u2713<\/span>4K audio export<\/div>\n          <div class=\"d-pc-feat\"><span class=\"d-pc-check\" style=\"color:#7C3AED\">\u2713<\/span>API access<\/div>\n          <div class=\"d-pc-feat\"><span class=\"d-pc-check\" style=\"color:#7C3AED\">\u2713<\/span>Custom voice fine-tuning<\/div>\n          <div class=\"d-pc-feat\"><span class=\"d-pc-check\" style=\"color:#7C3AED\">\u2713<\/span>24\/7 priority support<\/div>\n        <\/div>\n        <button class=\"d-pc-btn\" style=\"background:linear-gradient(135deg,#7C3AED,#6366F1);color:#fff\">Get Premium \u2014 $5\/mo<\/button>\n      <\/div>\n\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- ===== ABOUT SECTION ===== -->\n<div id=\"d-sec-about\" class=\"d-section\">\n  <div class=\"d-about-page\">\n    <div class=\"d-page-header\">\n      <div class=\"d-page-eyebrow\">The Story Behind DYNOIC<\/div>\n      <h1 class=\"d-page-title\">About DYNOIC<\/h1>\n    <\/div>\n    <div class=\"d-about-body\">\n      <p class=\"d-about-p\">DYNOIC \u2014 <strong>Dynamic Voice Intelligence for Content<\/strong> \u2014 is a free text to speech generator built for content creators, marketers, educators, and social media professionals who need professional-quality audio without expensive software or technical knowledge.<\/p>\n      <p class=\"d-about-p\">Most free text to speech tools give you one robotic voice with no controls. DYNOIC was built to change that. We believe every creator deserves studio-quality audio, for free \u2014 with real voices and real controls.<\/p>\n      <div class=\"d-about-card\">\n        <h3>20 Premium AI Voices<\/h3>\n        <p>Every DYNOIC voice is a carefully designed AI persona \u2014 10 male and 10 female \u2014 each with a distinct name, style, and personality. From Callum&#8217;s husky energy to Priya&#8217;s calm authority, from Vanessa&#8217;s warmth to Bella&#8217;s crisp professionalism, every voice is built for specific content types and audiences.<\/p>\n      <\/div>\n      <div class=\"d-about-card\">\n        <h3>The Three Voice Controls<\/h3>\n        <p>Exaggeration controls how expressive and dramatic the voice sounds. Speed controls the pace of delivery. Pitch controls the tonal quality. Together, these three controls give you more creative freedom than most paid text to speech tools \u2014 and they&#8217;re completely free to use.<\/p>\n      <\/div>\n      <div class=\"d-about-card\">\n        <h3>Voice Preview on Click<\/h3>\n        <p>Every voice in DYNOIC plays a short auto-preview when you click it \u2014 so you hear exactly what the voice sounds like before you type a single word. This feature saves time and helps you pick the perfect voice for your content instantly.<\/p>\n      <\/div>\n      <div class=\"d-about-card\">\n        <h3>The Credit System<\/h3>\n        <p>1 credit = 1 character of text converted to speech. The free plan gives you 10,000 credits per month \u2014 enough for 10 full YouTube video scripts, or 50 TikTok hooks, or 100 podcast ad reads, every month, for free. Basic plan: $2\/month for 50,000 credits. Premium plan: $5\/month for 1,00,000 credits.<\/p>\n      <\/div>\n      <div class=\"d-about-card\" style=\"border-left-color:#8B5CF6\">\n        <h3>Built with Claude AI by Anthropic<\/h3>\n        <p>Every part of DYNOIC was designed and built using Claude by Anthropic \u2014 the voices, the design, the controls, and this content. To add more voices, change the design, or add new features, simply share the full HTML code back to Claude with your instructions.<\/p>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- Footer -->\n<footer class=\"d-footer\" role=\"contentinfo\">\n  <strong>DYNOIC<\/strong> \u2014 Free Text to Speech Online &nbsp;\u00b7&nbsp;\n  20 Premium AI Voices &nbsp;\u00b7&nbsp; No Signup Required &nbsp;\u00b7&nbsp;\n  10,000 Free Credits Monthly\n  <br\/><br\/>\n  <span>\u00a9 2025 DYNOIC. The best free text to speech tool online.<\/span>\n<\/footer>\n\n<\/div><!-- end #dynoic-app -->\n\n<!-- ===== JAVASCRIPT ===== -->\n<script>\n(function() {\n'use strict';\n\n\/* ============================================================\n   VOICE DATA \u2014 20 Premium Voices\n   ============================================================ *\/\nconst VOICES = {\n  male: [\n    {\n      id:'callum', name:'Callum', style:'Husky Trickster',\n      desc:'Deep, magnetic, slightly unpredictable. A voice that commands attention the moment it speaks.',\n      tag:'HUSKY', emoji:'\ud83c\udfad',\n      color:'#6366F1', bg:'#EEF2FF',\n      pitch:0.85, rate:0.92, exagBase:0.65, hint:'male',\n      preview:'Hi, I\\'m Callum. I can help you create voiceovers that people actually remember.'\n    },\n    {\n      id:'mark', name:'Mark', style:'Natural Conversation',\n      desc:'Clean, warm, and relatable. Sounds like a trusted friend explaining something important.',\n      tag:'NATURAL', emoji:'\ud83d\udcac',\n      color:'#0891B2', bg:'#ECFEFF',\n      pitch:1.0, rate:1.0, exagBase:0.5, hint:'male',\n      preview:'Hey there, I\\'m Mark. I can help you create professional voiceovers that feel real.'\n    },\n    {\n      id:'spoods', name:'Spoods Oxley', style:'Wise Authority',\n      desc:'Measured, deliberate, and deeply credible. The voice of someone who has seen it all.',\n      tag:'WISE', emoji:'\ud83c\udf93',\n      color:'#7C3AED', bg:'#F5F3FF',\n      pitch:0.78, rate:0.82, exagBase:0.4, hint:'male',\n      preview:'I\\'m Spoods Oxley. Allow me to help you craft voiceovers that carry genuine authority.'\n    },\n    {\n      id:'atom', name:'Atom', style:'American Dark',\n      desc:'Low, intense, cinematic. Built for trailers, dramatic narration, and high-stakes content.',\n      tag:'DARK', emoji:'\u26a1',\n      color:'#1E293B', bg:'#F1F5F9',\n      pitch:0.68, rate:0.78, exagBase:0.75, hint:'male',\n      preview:'I\\'m Atom. I can help you create voiceovers that strike with real impact.'\n    },\n    {\n      id:'james', name:'James', style:'Husky Engaging',\n      desc:'Warm but gripping. Pulls listeners in and keeps them there. Perfect for long-form content.',\n      tag:'ENGAGING', emoji:'\ud83c\udf99\ufe0f',\n      color:'#B45309', bg:'#FFFBEB',\n      pitch:0.88, rate:0.94, exagBase:0.6, hint:'male',\n      preview:'Hey, I\\'m James. Let me help you make voiceovers your audience will genuinely connect with.'\n    },\n    {\n      id:'johndoe', name:'John Doe', style:'Deep',\n      desc:'The deepest voice in the room. Serious, grounded, and impossible to ignore.',\n      tag:'DEEP', emoji:'\ud83d\udd35',\n      color:'#1D4ED8', bg:'#EFF6FF',\n      pitch:0.62, rate:0.85, exagBase:0.45, hint:'male',\n      preview:'I\\'m John Doe. I can help you create voiceovers with real depth and presence.'\n    },\n    {\n      id:'michael', name:'Michael C. Vincent', style:'Confident',\n      desc:'Sharp, assured, professional. The kind of voice that closes deals and wins rooms.',\n      tag:'CONFIDENT', emoji:'\ud83d\udcbc',\n      color:'#0F766E', bg:'#F0FDFA',\n      pitch:0.92, rate:0.98, exagBase:0.55, hint:'male',\n      preview:'I\\'m Michael C. Vincent. Together we\\'ll build voiceovers that project real confidence.'\n    },\n    {\n      id:'adam', name:'Adam Stone', style:'Smooth Deep',\n      desc:'Silky, unhurried, and rich. Like velvet poured through a speaker \u2014 smooth on every word.',\n      tag:'SMOOTH', emoji:'\ud83c\udfb5',\n      color:'#9333EA', bg:'#FAF5FF',\n      pitch:0.80, rate:0.88, exagBase:0.5, hint:'male',\n      preview:'I\\'m Adam Stone. Let me help you create voiceovers that are smooth and effortlessly professional.'\n    },\n    {\n      id:'christopher', name:'Christopher', style:'Gentle Tone',\n      desc:'Soft, clear, and kind. The voice audiences trust immediately \u2014 great for e-learning and guides.',\n      tag:'GENTLE', emoji:'\ud83d\udd4a\ufe0f',\n      color:'#059669', bg:'#ECFDF5',\n      pitch:0.96, rate:0.90, exagBase:0.38, hint:'male',\n      preview:'Hi, I\\'m Christopher. I can help you create voiceovers that feel warm and trustworthy.'\n    },\n    {\n      id:'alex', name:'Alex', style:'Upbeat Energetic',\n      desc:'Fast, bright, and energetic. Wakes up any script. Perfect for ads, hooks, and highlights.',\n      tag:'UPBEAT', emoji:'\ud83d\ude80',\n      color:'#DC2626', bg:'#FEF2F2',\n      pitch:1.08, rate:1.18, exagBase:0.8, hint:'male',\n      preview:'Hey! I\\'m Alex, and I\\'m ready to help you create voiceovers packed with real energy!'\n    },\n  ],\n  female: [\n    {\n      id:'alice', name:'Alice', style:'Warm Natural',\n      desc:'Genuine, inviting, and crystal clear. The voice that feels like a real conversation.',\n      tag:'WARM', emoji:'\u2600\ufe0f',\n      color:'#E11D48', bg:'#FFF1F2',\n      pitch:1.08, rate:0.92, exagBase:0.55, hint:'female',\n      preview:'Hi, I\\'m Alice. I can help you create voiceovers that feel warm, natural, and totally genuine.'\n    },\n    {\n      id:'vanessa', name:'Vanessa', style:'Peach Girl',\n      desc:'Bright, sweet, and full of personality. The voice your audience smiles when they hear.',\n      tag:'BRIGHT', emoji:'\ud83c\udf51',\n      color:'#EA580C', bg:'#FFF7ED',\n      pitch:1.18, rate:1.02, exagBase:0.65, hint:'female',\n      preview:'Hey there! I\\'m Vanessa, and I\\'m excited to help you create voiceovers people will love.'\n    },\n    {\n      id:'jessica', name:'Jessica', style:'Pocket Voice',\n      desc:'Compact, clear, and endlessly versatile. Works perfectly for short-form and social content.',\n      tag:'VERSATILE', emoji:'\ud83d\udc8e',\n      color:'#7C3AED', bg:'#F5F3FF',\n      pitch:1.12, rate:1.06, exagBase:0.58, hint:'female',\n      preview:'I\\'m Jessica. Let me help you create voiceovers that punch well above their weight.'\n    },\n    {\n      id:'lauren', name:'Lauren', style:'Friendly Comfort',\n      desc:'Easy to listen to, reassuring, and naturally likeable. The voice of a trusted advisor.',\n      tag:'FRIENDLY', emoji:'\ud83c\udf38',\n      color:'#BE185D', bg:'#FDF2F8',\n      pitch:1.06, rate:0.94, exagBase:0.48, hint:'female',\n      preview:'Hi, I\\'m Lauren. I\\'m here to help you create voiceovers that make people feel right at home.'\n    },\n    {\n      id:'bella', name:'Bella', style:'Professional Bright',\n      desc:'Crisp, articulate, and polished. Commands respect from the first syllable. Great for business.',\n      tag:'PROFESSIONAL', emoji:'\ud83d\udca1',\n      color:'#0369A1', bg:'#F0F9FF',\n      pitch:1.10, rate:1.04, exagBase:0.52, hint:'female',\n      preview:'I\\'m Bella. I can help you craft voiceovers that are professional, clear, and powerfully delivered.'\n    },\n    {\n      id:'armajor', name:'AR Major', style:'Reassuring Confident',\n      desc:'Calm authority meets genuine warmth. Ideal for healthcare, finance, and trust-driven brands.',\n      tag:'REASSURING', emoji:'\ud83d\udee1\ufe0f',\n      color:'#0F766E', bg:'#F0FDFA',\n      pitch:1.02, rate:0.90, exagBase:0.42, hint:'female',\n      preview:'I\\'m AR Major. I can help you create voiceovers that build real confidence and trust.'\n    },\n    {\n      id:'l2hd', name:'L2HD', style:'High Definition Quality',\n      desc:'Studio-precision clarity with a modern, forward-facing tone. For brands that demand the best.',\n      tag:'HD QUALITY', emoji:'\ud83d\udd2c',\n      color:'#6366F1', bg:'#EEF2FF',\n      pitch:1.05, rate:0.96, exagBase:0.46, hint:'female',\n      preview:'I\\'m L2HD. I deliver high-definition voiceovers with studio-grade clarity and presence.'\n    },\n    {\n      id:'river', name:'River', style:'Relaxed Natural Form',\n      desc:'Flowing, unhurried, and completely natural. Like a story told by firelight.',\n      tag:'RELAXED', emoji:'\ud83c\udf0a',\n      color:'#0891B2', bg:'#ECFEFF',\n      pitch:1.00, rate:0.86, exagBase:0.40, hint:'female',\n      preview:'Hey, I\\'m River. I\\'m here to help you create voiceovers that flow naturally and connect deeply.'\n    },\n    {\n      id:'escar', name:'Escar', style:'Craft Form',\n      desc:'Distinctive, artisanal, and carefully considered. A voice that sounds unlike any other.',\n      tag:'UNIQUE', emoji:'\u2726',\n      color:'#92400E', bg:'#FFFBEB',\n      pitch:1.15, rate:0.98, exagBase:0.62, hint:'female',\n      preview:'I\\'m Escar. I can help you craft voiceovers with a style that is entirely your own.'\n    },\n    {\n      id:'elise', name:'Elise', style:'Clear Engaging Educator',\n      desc:'Precise, engaging, and perfectly paced. Makes complex ideas simple and compelling.',\n      tag:'EDUCATOR', emoji:'\ud83d\udcda',\n      color:'#15803D', bg:'#F0FDF4',\n      pitch:1.08, rate:0.94, exagBase:0.50, hint:'female',\n      preview:'Hi, I\\'m Elise. I can help you create voiceovers that teach, engage, and inspire your audience.'\n    },\n  ]\n};\n\nconst SAMPLES = [\n  {l:'YouTube Intro', t:'What\\'s up everyone, welcome back. Today I\\'m sharing something I\\'ve been building for months \u2014 and it might just change the way you think about audio content.'},\n  {l:'Podcast Open', t:'Welcome to another episode. Today we\\'re sitting down with someone who has completely redefined how we think about creativity, technology, and the human voice.'},\n  {l:'Product Demo', t:'Introducing DYNOIC \u2014 the fastest free text to speech tool online. Twenty premium voices, three studio controls, zero signup required. Your content deserves better audio.'},\n  {l:'Ad Script', t:'Great content deserves a great voice. Stop settling for robotic audio. Try DYNOIC free \u2014 twenty premium voices, no credit card, no signup. Start right now.'},\n  {l:'Storytelling', t:'There was a moment \u2014 quiet, unremarkable to anyone watching \u2014 when everything changed. No fanfare, no announcement. Just a decision that would alter the course of what came next.'},\n  {l:'E-Learning', t:'In this module, we\\'ll cover the three principles that separate average communicators from truly exceptional ones. Take notes \u2014 these techniques work immediately.'},\n  {l:'Movie Trailer', t:'In a world where silence was safety, one voice dared to speak the truth. This is the story they didn\\'t want you to hear. Coming this fall.'},\n  {l:'News Anchor', t:'Good evening. We begin tonight with a major development \u2014 one that sources say will have lasting implications for the industry and the millions of people it touches.'},\n  {l:'Meditation', t:'Take a breath. Feel the ground beneath you. You are exactly where you need to be right now. Let everything else fall away for just these next few moments.'},\n  {l:'TikTok Hook', t:'I tried every free text to speech tool online. Then I found DYNOIC and everything changed. Here\\'s what makes it actually different from everything else out there.'},\n];\n\n\/* ============================================================\n   STATE\n   ============================================================ *\/\nlet curTab = 'male';\nlet selVoice = VOICES.male[0];\nlet isSpeaking = false;\nlet isPaused = false;\nlet sysVoices = [];\nlet previewPlaying = null;\nconst WH = [4,8,14,20,28,36,28,20,36,14,28,8,20,28,14,36,8,20,14,28,36,20,8,14,28,20,36,14,8,28,20,14];\n\n\/* ============================================================\n   BOOT\n   ============================================================ *\/\ndocument.addEventListener('DOMContentLoaded', function() {\n  loadSysVoices();\n  if (window.speechSynthesis) {\n    window.speechSynthesis.onvoiceschanged = loadSysVoices;\n  }\n  renderGrid('male');\n  renderSamples();\n  renderVoicesPage();\n  applyVoiceAccent(selVoice);\n  updatePanel(selVoice);\n  buildWave('d-play-wave', 28);\n  updateSliderStyles();\n\n  var ta = document.getElementById('d-script');\n  if (ta) {\n    ta.addEventListener('input', function() {\n      var cc = document.getElementById('d-chars');\n      if (cc) cc.textContent = ta.value.length + ' chars';\n    });\n  }\n});\n\nfunction loadSysVoices() {\n  if (window.speechSynthesis) {\n    sysVoices = window.speechSynthesis.getVoices();\n  }\n}\n\n\/* ============================================================\n   NAVIGATION\n   ============================================================ *\/\nvar secMap = { studio: 0, voices: 1, pricing: 2, about: 3 };\nwindow.dynoicGo = function(id) {\n  var secs = document.querySelectorAll('#dynoic-app .d-section');\n  secs.forEach(function(s) { s.classList.remove('active'); });\n  var sec = document.getElementById('d-sec-' + id);\n  if (sec) sec.classList.add('active');\n  var links = document.querySelectorAll('#dynoic-app .d-nav-link');\n  links.forEach(function(l) { l.classList.remove('active'); });\n  var idx = secMap[id];\n  if (links[idx]) links[idx].classList.add('active');\n  window.scrollTo(0, 0);\n};\n\n\/* ============================================================\n   TABS\n   ============================================================ *\/\nwindow.dynoicTab = function(tab, btn) {\n  curTab = tab;\n  document.querySelectorAll('#dynoic-app .d-tab').forEach(function(b) { b.classList.remove('active'); b.setAttribute('aria-selected','false'); });\n  btn.classList.add('active');\n  btn.setAttribute('aria-selected','true');\n  dynoicStop();\n  renderGrid(tab);\n};\n\n\/* ============================================================\n   RENDER VOICE GRID\n   ============================================================ *\/\nfunction renderGrid(tab) {\n  var grid = document.getElementById('d-voice-grid');\n  if (!grid) return;\n  grid.innerHTML = '';\n  VOICES[tab].forEach(function(v) {\n    var isSel = v.id === selVoice.id;\n    var card = document.createElement('div');\n    card.className = 'd-voice-card' + (isSel ? ' active' : '');\n    card.setAttribute('role', 'button');\n    card.setAttribute('aria-label', v.name + ' \u2014 ' + v.style);\n    card.setAttribute('tabindex', '0');\n\n    card.innerHTML =\n      '<div class=\"d-voice-avatar\" style=\"background:' + v.bg + ';color:' + v.color + '\">' + v.emoji + '<\/div>' +\n      '<div class=\"d-voice-name\">' + v.name + '<\/div>' +\n      '<div class=\"d-voice-style\">' + v.style + '<\/div>' +\n      '<span class=\"d-voice-tag\" style=\"background:' + v.bg + ';color:' + v.color + ';border:1px solid ' + hexA(v.color, 0.25) + '\">' + v.tag + '<\/span>' +\n      (isSel ? '<div class=\"d-voice-wave\" id=\"card-wave-' + v.id + '\"><\/div>' : '') +\n      (isSel && previewPlaying === v.id ? '<div class=\"d-preview-playing\"><div class=\"d-preview-dot\"><\/div>Playing preview\u2026<\/div>' : '');\n\n    card.addEventListener('click', function() { pickVoice(v); });\n    card.addEventListener('keydown', function(e) { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); pickVoice(v); } });\n    grid.appendChild(card);\n  });\n\n  buildWave('card-wave-' + selVoice.id, 18);\n  buildWave('d-play-wave', 28);\n  if (isSpeaking && !isPaused) {\n    liveWave('card-wave-' + selVoice.id);\n    liveWave('d-play-wave');\n  }\n}\n\n\/* ============================================================\n   PICK VOICE\n   ============================================================ *\/\nfunction pickVoice(v) {\n  dynoicStop();\n  selVoice = v;\n  applyVoiceAccent(v);\n  updatePanel(v);\n  renderGrid(curTab);\n  var pbStatus = document.getElementById('d-play-status');\n  if (pbStatus) { pbStatus.textContent = 'Ready to speak'; pbStatus.classList.remove('speaking'); }\n  playPreview(v);\n}\n\nfunction applyVoiceAccent(v) {\n  var sliders = ['d-exag', 'd-speed', 'd-pitch'];\n  sliders.forEach(function(id) { updateSliderTrack(id, v.color); });\n  var playBtn = document.getElementById('d-play-btn');\n  if (playBtn) {\n    playBtn.style.background = 'linear-gradient(135deg, ' + v.color + ', ' + lightenHex(v.color) + ')';\n    playBtn.style.boxShadow = '0 4px 16px ' + hexA(v.color, 0.35);\n  }\n}\n\nfunction updatePanel(v) {\n  var el = function(id) { return document.getElementById(id); };\n  if (el('d-sel-name')) el('d-sel-name').textContent = v.name;\n  if (el('d-sel-style')) el('d-sel-style').textContent = v.style;\n  if (el('d-sel-avatar')) {\n    el('d-sel-avatar').textContent = v.emoji;\n    el('d-sel-avatar').style.background = v.bg;\n    el('d-sel-avatar').style.color = v.color;\n  }\n  if (el('d-sel-gender')) {\n    var isM = curTab === 'male' || VOICES.male.find(function(x){return x.id===v.id;});\n    el('d-sel-gender').textContent = isM ? 'Male Voice' : 'Female Voice';\n    el('d-sel-gender').style.background = v.bg;\n    el('d-sel-gender').style.color = v.color;\n  }\n  if (el('d-sel-box')) {\n    el('d-sel-box').style.borderColor = hexA(v.color, 0.3);\n    el('d-sel-box').style.background = '#fff';\n  }\n  \/\/ Update slider defaults\n  if (el('d-exag')) { el('d-exag').value = v.exagBase; dynoicSlider('exag'); }\n  if (el('d-speed')) { el('d-speed').value = v.rate; dynoicSlider('speed'); }\n  if (el('d-pitch')) { el('d-pitch').value = v.pitch; dynoicSlider('pitch'); }\n}\n\n\/* ============================================================\n   VOICE PREVIEW (auto-play on click)\n   ============================================================ *\/\nfunction playPreview(v) {\n  if (!window.speechSynthesis) return;\n  window.speechSynthesis.cancel();\n  previewPlaying = v.id;\n  renderGrid(curTab);\n\n  var u = new SpeechSynthesisUtterance(v.preview);\n  var sv = getBestSysVoice(v.hint);\n  if (sv) u.voice = sv;\n  u.pitch = v.pitch;\n  u.rate = v.rate;\n  u.volume = 1;\n\n  u.onstart = function() {\n    previewPlaying = v.id;\n    liveWave('card-wave-' + v.id);\n  };\n  u.onend = u.onerror = function() {\n    previewPlaying = null;\n    deadWave('card-wave-' + v.id);\n    renderGrid(curTab);\n  };\n  window.speechSynthesis.speak(u);\n}\n\n\/* ============================================================\n   MAIN SPEECH PLAYBACK\n   ============================================================ *\/\nwindow.dynoicPlay = function() {\n  if (isSpeaking && !isPaused) { dynoicPause(); return; }\n  if (isPaused) { dynoicResume(); return; }\n  dynoicSpeak();\n};\n\nfunction dynoicSpeak() {\n  var txt = (document.getElementById('d-script') || {}).value;\n  if (!txt || !txt.trim()) return;\n  if (!window.speechSynthesis) return;\n  window.speechSynthesis.cancel();\n  previewPlaying = null;\n\n  var u = new SpeechSynthesisUtterance(txt.trim());\n  var sv = getBestSysVoice(selVoice.hint);\n  if (sv) u.voice = sv;\n  var mod = getModulated();\n  u.pitch = mod.pitch;\n  u.rate = mod.rate;\n  u.volume = 1;\n\n  u.onstart = function() {\n    isSpeaking = true; isPaused = false;\n    var pb = document.getElementById('d-play-btn');\n    if (pb) pb.textContent = '\u23f8';\n    var sb = document.getElementById('d-stop-btn');\n    if (sb) sb.style.display = 'flex';\n    var ps = document.getElementById('d-play-status');\n    if (ps) { ps.textContent = selVoice.name + ' is speaking\u2026'; ps.classList.add('speaking'); ps.style.color = selVoice.color; }\n    liveWave('card-wave-' + selVoice.id);\n    liveWave('d-play-wave');\n  };\n  u.onend = u.onerror = function() { onSpeakEnd(); };\n  window.speechSynthesis.speak(u);\n}\n\nfunction dynoicPause() {\n  if (window.speechSynthesis) window.speechSynthesis.pause();\n  isPaused = true;\n  var pb = document.getElementById('d-play-btn');\n  if (pb) pb.textContent = '\u25b6';\n  var ps = document.getElementById('d-play-status');\n  if (ps) { ps.textContent = 'Paused'; ps.style.color = '#6B7280'; ps.classList.remove('speaking'); }\n  deadWave('card-wave-' + selVoice.id);\n  deadWave('d-play-wave');\n}\n\nfunction dynoicResume() {\n  if (window.speechSynthesis) window.speechSynthesis.resume();\n  isPaused = false;\n  var pb = document.getElementById('d-play-btn');\n  if (pb) pb.textContent = '\u23f8';\n  var ps = document.getElementById('d-play-status');\n  if (ps) { ps.textContent = selVoice.name + ' is speaking\u2026'; ps.classList.add('speaking'); ps.style.color = selVoice.color; }\n  liveWave('card-wave-' + selVoice.id);\n  liveWave('d-play-wave');\n}\n\nwindow.dynoicStop = function() {\n  if (window.speechSynthesis) window.speechSynthesis.cancel();\n  onSpeakEnd();\n  previewPlaying = null;\n};\n\nfunction onSpeakEnd() {\n  isSpeaking = false; isPaused = false;\n  var pb = document.getElementById('d-play-btn');\n  if (pb) pb.textContent = '\u25b6';\n  var sb = document.getElementById('d-stop-btn');\n  if (sb) sb.style.display = 'none';\n  var ps = document.getElementById('d-play-status');\n  if (ps) { ps.textContent = 'Ready to speak'; ps.style.color = ''; ps.classList.remove('speaking'); }\n  deadWave('card-wave-' + selVoice.id);\n  deadWave('d-play-wave');\n}\n\nfunction getModulated() {\n  var exag = parseFloat((document.getElementById('d-exag') || {}).value || selVoice.exagBase);\n  var speed = parseFloat((document.getElementById('d-speed') || {}).value || selVoice.rate);\n  var pitch = parseFloat((document.getElementById('d-pitch') || {}).value || selVoice.pitch);\n  var exagEffect = (exag - 0.5) * 0.3;\n  return {\n    rate: Math.min(1.9, Math.max(0.4, speed + exagEffect * 0.4)),\n    pitch: Math.min(2.0, Math.max(0.5, pitch + exagEffect * 0.25)),\n  };\n}\n\n\/* ============================================================\n   SYSTEM VOICE PICKER\n   ============================================================ *\/\nfunction getBestSysVoice(hint) {\n  var en = sysVoices.filter(function(v) { return v.lang.startsWith('en'); });\n  if (!en.length) return null;\n  if (hint === 'female') {\n    return en.find(function(v) { return \/samantha|karen|victoria|moira|tessa|fiona|zira|hazel|google uk english female|ava|allison|susan\/i.test(v.name); })\n      || en.find(function(v) { return \/female|woman|girl\/i.test(v.name); })\n      || en[0];\n  }\n  return en.find(function(v) { return \/daniel|david|alex|tom|fred|ralph|google us english|mark|guy|aaron|fred\/i.test(v.name); })\n    || en.find(function(v) { return \/male|man\/i.test(v.name); })\n    || en[1] || en[0];\n}\n\n\/* ============================================================\n   SLIDERS\n   ============================================================ *\/\nwindow.dynoicSlider = function(type) {\n  var map = {\n    exag: { s:'d-exag', v:'d-exag-val', f: function(x){ return Math.round(x*100)+'%'; } },\n    speed:{ s:'d-speed', v:'d-speed-val', f: function(x){ return parseFloat(x).toFixed(2)+'\u00d7'; } },\n    pitch:{ s:'d-pitch', v:'d-pitch-val', f: function(x){ return parseFloat(x).toFixed(2)+'\u00d7'; } },\n  };\n  var m = map[type];\n  var el = document.getElementById(m.s);\n  var ve = document.getElementById(m.v);\n  if (!el || !ve) return;\n  ve.textContent = m.f(el.value);\n  updateSliderTrack(m.s, selVoice.color);\n};\n\nfunction updateSliderTrack(id, color) {\n  var el = document.getElementById(id);\n  if (!el) return;\n  var mn = parseFloat(el.min), mx = parseFloat(el.max), v = parseFloat(el.value);\n  var pct = ((v - mn) \/ (mx - mn)) * 100;\n  el.style.background = 'linear-gradient(to right, ' + color + ' 0%, ' + color + ' ' + pct + '%, #E5E7EB ' + pct + '%, #E5E7EB 100%)';\n}\n\nfunction updateSliderStyles() {\n  ['exag','speed','pitch'].forEach(function(t) { dynoicSlider(t); });\n}\n\n\/* ============================================================\n   WAVE BARS\n   ============================================================ *\/\nfunction buildWave(id, count) {\n  var el = document.getElementById(id);\n  if (!el) return;\n  el.innerHTML = '';\n  for (var i = 0; i < count; i++) {\n    var b = document.createElement('div');\n    b.className = 'd-wbar';\n    el.appendChild(b);\n  }\n}\n\nfunction liveWave(id) {\n  var el = document.getElementById(id);\n  if (!el) return;\n  var bars = el.querySelectorAll('.d-wbar');\n  var c = selVoice.color;\n  bars.forEach(function(b, i) {\n    b.classList.add('live');\n    b.style.background = c;\n    b.style.height = WH[i % WH.length] + 'px';\n    b.style.animation = 'dynoic-wv' + (i % 5) + ' ' + (0.35 + (i % 5) * 0.1) + 's ease-in-out infinite alternate';\n    b.style.transition = 'none';\n  });\n}\n\nfunction deadWave(id) {\n  var el = document.getElementById(id);\n  if (!el) return;\n  el.querySelectorAll('.d-wbar').forEach(function(b) {\n    b.classList.remove('live');\n    b.style.background = 'rgba(99,102,241,0.15)';\n    b.style.height = '3px';\n    b.style.animation = 'none';\n    b.style.transition = 'all .5s';\n  });\n}\n\n\/* ============================================================\n   SAMPLES\n   ============================================================ *\/\nfunction renderSamples() {\n  var c = document.getElementById('d-samples');\n  if (!c) return;\n  c.innerHTML = '';\n  SAMPLES.forEach(function(s) {\n    var b = document.createElement('button');\n    b.className = 'd-sample-pill';\n    b.textContent = s.l;\n    b.addEventListener('click', function() {\n      var ta = document.getElementById('d-script');\n      if (ta) { ta.value = s.t; document.getElementById('d-chars').textContent = s.t.length + ' chars'; }\n    });\n    c.appendChild(b);\n  });\n}\n\nwindow.dynoicRandomSample = function() {\n  var s = SAMPLES[Math.floor(Math.random() * SAMPLES.length)];\n  var ta = document.getElementById('d-script');\n  if (ta) { ta.value = s.t; document.getElementById('d-chars').textContent = s.t.length + ' chars'; }\n};\n\n\/* ============================================================\n   VOICES PAGE\n   ============================================================ *\/\nfunction renderVoicesPage() {\n  var list = document.getElementById('d-voices-list');\n  if (!list) return;\n  list.innerHTML = '';\n  var cats = [\n    { key:'male', label:'\ud83d\udc68 Male Voices \u2014 10 Premium Men' },\n    { key:'female', label:'\ud83d\udc69 Female Voices \u2014 10 Premium Women' },\n  ];\n  cats.forEach(function(cat) {\n    var h = document.createElement('div');\n    h.className = 'd-vcat-label';\n    h.textContent = cat.label;\n    list.appendChild(h);\n    VOICES[cat.key].forEach(function(v) {\n      var item = document.createElement('div');\n      item.className = 'd-vlist-item';\n      item.innerHTML =\n        '<div class=\"d-vlist-av\" style=\"background:' + v.bg + ';color:' + v.color + '\">' + v.emoji + '<\/div>' +\n        '<div style=\"flex:1\">' +\n          '<div class=\"d-vlist-name\" style=\"color:' + v.color + '\">' + v.name + ' <span style=\"font-size:11px;color:#9CA3AF;font-weight:400\">\u00b7 ' + v.style + '<\/span><\/div>' +\n          '<div class=\"d-vlist-desc\">' + v.desc + '<\/div>' +\n        '<\/div>' +\n        '<span class=\"d-voice-tag\" style=\"background:' + v.bg + ';color:' + v.color + ';border:1px solid ' + hexA(v.color, 0.2) + ';font-size:10px;font-weight:600;border-radius:4px;padding:2px 8px\">' + v.tag + '<\/span>';\n      item.addEventListener('click', function() {\n        curTab = cat.key;\n        pickVoice(v);\n        dynoicGo('studio');\n      });\n      list.appendChild(item);\n    });\n  });\n}\n\n\/* ============================================================\n   UTILITIES\n   ============================================================ *\/\nfunction hexA(hex, a) {\n  var r = parseInt(hex.slice(1,3), 16);\n  var g = parseInt(hex.slice(3,5), 16);\n  var b = parseInt(hex.slice(5,7), 16);\n  return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n}\n\nfunction lightenHex(hex) {\n  var r = Math.min(255, parseInt(hex.slice(1,3), 16) + 40);\n  var g = Math.min(255, parseInt(hex.slice(3,5), 16) + 30);\n  var b = Math.min(255, parseInt(hex.slice(5,7), 16) + 20);\n  return '#' + r.toString(16).padStart(2,'0') + g.toString(16).padStart(2,'0') + b.toString(16).padStart(2,'0');\n}\n\n})(); \/\/ end IIFE\n<\/script>\n\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>DYNOIC \u2014 Free Text to Speech Online | 20 Premium AI Voices DYNOIC FREE TTS Studio Voices Pricing About Try Free \u2192 Free Text to Speech \u2014 No Signup Required Convert Text to Speech Freewith 20 Premium AI Voices DYNOIC is the best free text to speech tool online. Get 20 premium voices with studio-grade &#8230; <a title=\"Text To Speech Free\" class=\"read-more\" href=\"https:\/\/dynoic.online\/?p=22\" aria-label=\"Read more about Text To Speech Free\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,3,1],"tags":[6,9,5,10,8],"class_list":["post-22","post","type-post","status-publish","format-standard","hentry","category-ai-voices","category-text-to-speech","category-uncategorized","tag-ai-voices","tag-premium-ai-voices","tag-text-to-speech","tag-text-to-speech-free","tag-text-to-voice"],"_links":{"self":[{"href":"https:\/\/dynoic.online\/index.php?rest_route=\/wp\/v2\/posts\/22","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dynoic.online\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dynoic.online\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dynoic.online\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dynoic.online\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=22"}],"version-history":[{"count":2,"href":"https:\/\/dynoic.online\/index.php?rest_route=\/wp\/v2\/posts\/22\/revisions"}],"predecessor-version":[{"id":29,"href":"https:\/\/dynoic.online\/index.php?rest_route=\/wp\/v2\/posts\/22\/revisions\/29"}],"wp:attachment":[{"href":"https:\/\/dynoic.online\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=22"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dynoic.online\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=22"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dynoic.online\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=22"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}