3 session plan for spasmodic dysphonia type w MTD voice therapy exercise
spasmodic dysphonia voice therapy
spasmodic dysphonia with muscle tension dysphonia voice therapy exercise session plan
PMID: 34389220
Create a printable patient handout for the 3-session home program
mkdir -p /tmp/workspace/voice-therapy-handout && ls -la /tmp/workspace/
~/voice-therapy-handout/build_handout.py
from docx import Document
from docx.shared import Pt, Inches, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
doc = Document()
# ---- default styles ----
style = doc.styles["Normal"]
style.font.name = "Arial"
style.font.size = Pt(11)
for section in doc.sections:
section.left_margin = Inches(0.7)
section.right_margin = Inches(0.7)
section.top_margin = Inches(0.6)
section.bottom_margin = Inches(0.6)
NAVY = RGBColor(0x1F, 0x3A, 0x5F)
TEAL = RGBColor(0x0E, 0x6E, 0x6E)
GRAY = RGBColor(0x55, 0x55, 0x55)
def add_hr(paragraph):
p = paragraph._p
pPr = p.get_or_add_pPr()
pBdr = OxmlElement('w:pBdr')
bottom = OxmlElement('w:bottom')
bottom.set(qn('w:val'), 'single')
bottom.set(qn('w:sz'), '8')
bottom.set(qn('w:space'), '1')
bottom.set(qn('w:color'), '1F3A5F')
pBdr.append(bottom)
pPr.append(pBdr)
def shade_cell(cell, hex_color):
tcPr = cell._tc.get_or_add_tcPr()
shd = OxmlElement('w:shd')
shd.set(qn('w:val'), 'clear')
shd.set(qn('w:color'), 'auto')
shd.set(qn('w:fill'), hex_color)
tcPr.append(shd)
def set_cell_text(cell, text, bold=False, size=10.5, color=None, align=None):
cell.text = ""
p = cell.paragraphs[0]
if align:
p.alignment = align
run = p.add_run(text)
run.font.size = Pt(size)
run.font.bold = bold
run.font.name = "Arial"
if color:
run.font.color.rgb = color
# ================= TITLE BLOCK =================
title = doc.add_paragraph()
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = title.add_run("Voice Therapy Home Program")
r.font.size = Pt(22)
r.font.bold = True
r.font.color.rgb = NAVY
sub = doc.add_paragraph()
sub.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = sub.add_run("For Spasmodic Dysphonia with Muscle Tension Dysphonia (MTD)")
r.font.size = Pt(13)
r.font.bold = True
r.font.color.rgb = TEAL
sub2 = doc.add_paragraph()
sub2.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = sub2.add_run("A 3-Session Voice Therapy Companion Guide")
r.font.size = Pt(10.5)
r.font.italic = True
r.font.color.rgb = GRAY
add_hr(sub2)
# Patient info line
pinfo = doc.add_paragraph()
pinfo.paragraph_format.space_before = Pt(10)
pinfo.paragraph_format.space_after = Pt(10)
r = pinfo.add_run("Patient Name: ______________________________ Start Date: _____________")
r.font.size = Pt(10.5)
# ================= UNDERSTANDING YOUR VOICE =================
h = doc.add_heading("Understanding Your Voice Condition", level=1)
h.runs[0].font.color.rgb = NAVY
p = doc.add_paragraph(
"Your voice difficulty has two parts working together. Spasmodic dysphonia (SD) causes "
"involuntary spasms in your voice box that you cannot control with exercise alone; this part "
"is usually managed by your ENT/laryngologist with treatments such as botulinum toxin injections. "
"Muscle tension dysphonia (MTD) is the extra muscle bracing your body has built up around your "
"larynx, neck, and jaw in reaction to the spasms; this part responds very well to voice therapy."
)
p2 = doc.add_paragraph()
r = p2.add_run("Realistic goal of this program: ")
r.bold = True
r2 = p2.add_run(
"reduce strain and tension so your voice is easier and less effortful to produce. Voice breaks "
"from the spasms themselves may not fully go away with exercises alone; keep your ENT follow-up "
"appointments for the medical (dystonic) side of treatment."
)
# ================= HOW TO USE =================
h = doc.add_heading("How to Use This Guide", level=1)
h.runs[0].font.color.rgb = NAVY
bullets = [
"Practice in a quiet space, seated or standing tall, both morning and evening.",
"Go slowly and gently. If an exercise increases strain or triggers spasms, stop and rest, then try again more softly.",
"Use the tracking log at the end of each session to note effort level and any triggers.",
"This handout supports, but does not replace, your one-on-one sessions with your speech-language pathologist (SLP).",
]
for b in bullets:
bp = doc.add_paragraph(b, style="List Bullet")
# ================= SESSION 1 =================
def session_heading(num, title_text, focus):
h = doc.add_heading(f"Session {num}: {title_text}", level=1)
h.runs[0].font.color.rgb = NAVY
fp = doc.add_paragraph()
r = fp.add_run(f"Focus: {focus}")
r.italic = True
r.font.color.rgb = TEAL
r.font.size = Pt(11)
def add_exercise_table(rows):
table = doc.add_table(rows=1, cols=3)
table.alignment = WD_TABLE_ALIGNMENT.CENTER
table.style = "Table Grid"
hdr = table.rows[0].cells
headers = ["Exercise", "How To Do It", "Dose"]
for i, htext in enumerate(headers):
set_cell_text(hdr[i], htext, bold=True, size=10.5, color=RGBColor(0xFF, 0xFF, 0xFF))
shade_cell(hdr[i], "1F3A5F")
widths = [Inches(1.6), Inches(3.6), Inches(1.3)]
for row_data in rows:
cells = table.add_row().cells
for i, val in enumerate(row_data):
set_cell_text(cells[i], val, size=10)
for row in table.rows:
for i, cell in enumerate(row.cells):
cell.width = widths[i]
doc.add_paragraph()
return table
# --- Session 1 ---
session_heading(1, "Calm the Tension", "Lower muscle bracing around the voice box and build breath support.")
doc.add_paragraph("Home Practice Exercises (twice daily, ~10 minutes):")
add_exercise_table([
["Neck & shoulder stretch", "Slowly roll shoulders back 5 times; tilt ear to shoulder and hold 10 sec each side.", "1 set, 2x/day"],
["Jaw release", "Let jaw hang loose, gently massage the muscle under cheekbones in a circular motion.", "3 reps, 2x/day"],
["Yawn-sigh", "Start a yawn, then let the air fall out into a relaxed, sighing tone on 'ahh'.", "5 reps, 2x/day"],
["Belly breathing", "Lie down or sit; place a hand on your belly. Breathe in so the belly rises, out slowly and evenly.", "5 min, 2x/day"],
["Breath-voice pairing", "Take an easy belly breath, then start voice gently right as air begins to flow out (no breath-holding first).", "10 reps, 2x/day"],
])
box = doc.add_paragraph()
r = box.add_run("Vocal hygiene reminders: ")
r.bold = True
box.add_run("drink water throughout the day, avoid whispering or forceful throat clearing, limit caffeine/alcohol, and rest your voice if it feels fatigued.")
# --- Session 2 ---
session_heading(2, "Build an Easier Voice", "Shift toward forward, resonant, low-effort voicing.")
doc.add_paragraph("Home Practice Exercises (twice daily, ~10-12 minutes):")
add_exercise_table([
["Straw phonation", "Hum a steady or gliding tone through a straw (into water if provided by your SLP).", "5 min, 2x/day"],
["Lip trills", "'Motorboat' your lips together while gently gliding your pitch up and down.", "1 min, 3x/day"],
["Resonant humming", "Hum 'mmm' feeling a buzz on your lips/nose, then say mmm-words (e.g., mommy, many, moon).", "5 min, 2x/day"],
["Easy onset words", "Start words with a vowel or soft consonant (e.g., 'apple' not 'papple'); avoid hard, sudden starts.", "10 words, 2x/day"],
["Pitch glides", "Glide gently from low to high pitch on 'oo' or 'oh', keeping it soft and easy.", "5 reps, 2x/day"],
])
note = doc.add_paragraph()
r = note.add_run("Tip: ")
r.bold = True
note.add_run("if a word or sound reliably triggers a spasm, note it in your log below so you and your SLP can plan around it in Session 3.")
# --- Session 3 ---
session_heading(3, "Carry It Into Real Conversation", "Transfer the easier voice into everyday talking and plan for maintenance.")
doc.add_paragraph("Home Practice Exercises (daily):")
add_exercise_table([
["Warm-up combo", "Repeat yawn-sigh (5x) + straw phonation (3 min) + resonant humming (2 min) before talking-heavy days.", "1x/day"],
["Conversation carryover", "Pick 5 minutes of daily conversation (phone call, family chat) and consciously keep the easy, forward voice.", "5 min, 1x/day"],
["Pacing & pausing", "Before words that usually trigger a spasm, take a brief pause and a light breath before speaking.", "As needed"],
["Self-check", "Rate your vocal effort (0-10) after a conversation; if it's creeping up, return to Session 1-2 exercises that day.", "1x/day"],
])
maint = doc.add_paragraph()
r = maint.add_run("Maintenance plan: ")
r.bold = True
maint.add_run(
"Continue the warm-up combo daily even after therapy ends. Keep your scheduled ENT/laryngology visits "
"for botulinum toxin management of the spasm (dystonic) component - voice therapy works best together "
"with, not instead of, that medical treatment."
)
# ================= WHEN TO CONTACT =================
h = doc.add_heading("When to Contact Your Care Team", level=1)
h.runs[0].font.color.rgb = NAVY
contact_items = [
"Your voice effort or strain is increasing instead of improving.",
"Voice breaks/spasms are happening more often or feel more severe.",
"You notice new symptoms (pain, difficulty swallowing or breathing, significant weight/voice change).",
"It has been more than 3-4 months since your last botulinum toxin injection and symptoms are returning.",
]
for c in contact_items:
doc.add_paragraph(c, style="List Bullet")
# ================= TRACKING LOG =================
h = doc.add_heading("Daily Practice & Symptom Log", level=1)
h.runs[0].font.color.rgb = NAVY
doc.add_paragraph("Fill in briefly each day you practice. Bring this log to your next therapy session.")
log_table = doc.add_table(rows=1, cols=5)
log_table.style = "Table Grid"
log_table.alignment = WD_TABLE_ALIGNMENT.CENTER
headers = ["Date", "Session Exercises Done", "Vocal Effort (0-10)", "Triggers Noticed", "Notes"]
for i, htext in enumerate(headers):
cell = log_table.rows[0].cells[i]
set_cell_text(cell, htext, bold=True, size=10, color=RGBColor(0xFF, 0xFF, 0xFF))
shade_cell(cell, "0E6E6E")
widths = [Inches(0.8), Inches(1.6), Inches(1.1), Inches(1.3), Inches(1.7)]
for _ in range(8):
row = log_table.add_row().cells
for i in range(5):
set_cell_text(row[i], "", size=10)
for row in log_table.rows:
for i, cell in enumerate(row.cells):
cell.width = widths[i]
# ================= FOOTER =================
doc.add_paragraph()
foot = doc.add_paragraph()
foot.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = foot.add_run(
"This handout is an educational companion to your care and does not replace individualized "
"instruction from your speech-language pathologist or physician."
)
r.font.size = Pt(9)
r.font.italic = True
r.font.color.rgb = GRAY
foot2 = doc.add_paragraph()
foot2.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = foot2.add_run("Speech-Language Pathologist: ___________________________ Clinic Phone: ___________________")
r.font.size = Pt(9)
doc.save("/tmp/workspace/voice-therapy-handout/Voice_Therapy_Home_Program_SD_MTD.docx")
print("saved")
cd /tmp/workspace/voice-therapy-handout && python3 build_handout.py
cd /tmp/workspace/voice-therapy-handout && ls -la && python3 -c " from docx import Document doc = Document('Voice_Therapy_Home_Program_SD_MTD.docx') print('paragraphs:', len(doc.paragraphs)) print('tables:', len(doc.tables)) "
Voice Therapy Home Program SD MTD
Word Document · DOCX