ฉันจะเปลี่ยนวิธีการที่คำสั่ง 'พูด' ของ OS X ออกเสียงคำได้อย่างไร


14

sayคำสั่งของ OS X มีประโยชน์สำหรับงานบางอย่าง (เช่น 'แจ้งเตือนฉันเมื่อมีผู้ติดต่อออนไลน์) ของ Skype แต่มีการออกเสียงชื่อบางชื่อไม่ถูกต้อง มีวิธีสอนsayให้ออกเสียงคำต่าง ๆ หรือไม่?

ตัวอย่างเช่นลอง:

say "Hi, Joel Spolsky"

เสียง 'ol' ดูเหมือน 'ball' มากกว่า 'old' ฉันต้องการเพิ่มข้อยกเว้นที่บอกว่า "ออกเสียง Spolsky เช่นนี้" แทนที่จะพยายามสอนกฎทางภาษาใหม่ ฉันพนันได้เลยว่ามันเป็นวิธีที่สามารถออกเสียง "iphone" ตามที่ Apple ต้องการ


อัพเดท - หลังการวิจัยบางอย่างนี่คือสิ่งที่ฉันได้เรียนรู้:

  1. ข้อความเป็นคำพูดจะแบ่งระหว่างการเปลี่ยนข้อความเป็นหน่วยเสียงจากนั้นหน่วยเสียงจะเปลี่ยนเป็นเสียงโดยใช้เสียง การเปลี่ยนเสียงจะไม่มีผลกับหน่วยเสียง
  2. สังเคราะห์เสียงพูดผู้จัดการมีฟังก์ชั่นบางอย่างสำหรับการเปลี่ยนข้อความให้เป็นหน่วยเสียงและวิธีการสำหรับ การลงทะเบียนพจนานุกรมคำพูดที่จะเพิ่มแผนที่ข้อความใหม่ฟอนิม อย่างไรก็ตามพจนานุกรมคำพูดของ Apple จะต้องอยู่ในรูปแบบไบนารี - ฉันไม่พบ XML ที่สมบูรณ์
  3. เมื่อใช้dtraceงานsayฉันพบไฟล์ที่น่าสนใจบางไฟล์ที่เปิดใน /System/Library/PrivateFrameworks/SpeechDictionary.framework/Resources นี่อาจเป็นพจนานุกรมคำพูด แต่เป็นไบนารีทั้งหมดยกเว้น Homophones ซึ่งเป็น XML การเพิ่มรายการใน Homophones ไม่ได้ทำอะไรเลย - มันอาจใช้ในการพูดเป็นข้อความ รหัสเหล่านี้เป็นรหัสที่ลงนามโดย Apple การเปลี่ยนแปลงอาจทำให้บางโปรแกรมไม่ทำงาน
    • PrefixDictionary
    • CartNames
    • CartLite
    • SymbolDictionary
    • คำพ้องเสียง
  4. มีวิธีการที่จะเพิ่มรูปแบบข้อความขององค์ประกอบอินเตอร์เฟซโปรแกรมเพื่อ VoiceOver ทำงานจำนวนมากซึ่งนักพัฒนาได้รับฟรีมี แต่บิตหากิน มาตรฐานที่นี่ดูเหมือนจะใช้การสะกดคำตามความจำเป็น

การเดาของฉันคือ:

  1. sayเป็นเลเยอร์แสงของโค้ดที่ด้านบนของ Speech Synthesis Manager มันจะง่ายสำหรับ Apple devs ที่จะเพิ่มตัวเลือกบรรทัดคำสั่งเพื่อนำพา ธ ไปยังพจนานุกรมคำพูดสำหรับการทำแผนที่ฟอนิมทางเลือก แต่พวกมันไม่ได้ทำ sayมันอาจจะเป็นโครงการโอเพนซอร์สประโยชน์ในการเขียนที่ดีกว่า
  2. Skype อาจใช้ Speech Synthesis Manager โดยตรงไม่ปล่อยให้ตะขอเปลี่ยนวิธีออกเสียงชื่อเพื่อนของฉันออกเสียงนอกเหนือจากการสะกดคำแบบออกเสียงซึ่งเป็นเรื่องโง่
  3. วิธีที่ง่ายที่สุดในการสร้างเวอร์ชันบรรทัดคำสั่งsayคือวิธีที่ JRobert แนะนำ

นี่คือการดำเนินการอย่างรวดเร็วของฉันโดยใช้คำแนะนำการสะกดคำของ Doug Harris:

#!/bin/sh
echo $@ | tr '[A-Z]' '[a-z]' |
sed "s/spolsky/spowlsky/g" |
/usr/bin/say

ในที่สุดสิ่งที่สนุกบรรทัดคำสั่ง:

# Apple is weird
sqlite3 /System/Library/PrivateFrameworks/SpeechDictionary.framework/Resources/Tuples .dump
# Get too much information about what files are being opened
sudo dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }'
# Just fun
say -v bad "Joel Spolsky Spolsky Spolsky Spolsky Spolsky, Joel Spolsky Spolsky Spolsky Spolsky Spolsky"
echo "scale=1000; 4*a(1)" | bc -l | say

คุณลองเปลี่ยนเสียงที่sayใช้ด้วย-vหรือไม่
Studer

2
say -v alex 'Spolsky' ; say -v vicki 'Spolsky'; say -v bad 'Spolsky Spolsky Spolsky Spolsky Spolsky Spols'ไม่มีผลกระทบต่อการออกเสียง: รายการเสียงสามารถดูได้ที่ System Preferences -> Speech -> Text to Speech ปัญหาอยู่ที่การแปลฟอนิมไม่ใช่การสังเคราะห์เสียง หากคุณกำลังเรียกห้องสมุดโดยตรงคุณสามารถตั้งค่าหน่วยความจำแบบกำหนดเอง: developer.apple.com/mac/library/documentation/Carbon/Reference/… ค้นหาดิสก์ของฉันเพื่อดูว่า Apple devs ใช้. plist ...
jwhitlock

คำตอบ:


8

คุณยังสามารถป้อนหน่วยเสียงที่คุณต้องการจะพูด ไวยากรณ์ไม่ซับซ้อนนัก

Ex:

[[inpt PHON]] hAAIH

ตรวจสอบลิงค์นี้เพื่อเรียนรู้เพิ่มเติม: http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/SpeechSynthesisProgrammingGuide/Phonemes/Phonemes.html#//apple_ref/doc/uid/TP40004365-CH9-SW1


1
คุณสามารถใช้ Repeat After Me เพื่อสร้างไวยากรณ์การออกเสียง มันมีอยู่จากdeveloper.apple.com/downloads
Lri

ทำซ้ำหลังจากที่ฉันเป็นส่วนหนึ่งของเครื่องมือเสริมสำหรับ Xcode
Daniel Beck

1
สิ่งนี้ใช้ได้กับฉัน: พูดว่า 'สวัสดี, โจเอล [[inpt PHON]] spowl skIY' ฉันสงสัยว่าฟิลด์บวกกับการออกเสียงในสมุดที่อยู่จะใช้เคล็ดลับนี้ได้หรือไม่: macdailynews.com/2011/10/20/…
jwhitlock

คุณจะป้อนหน่วยเสียงเหล่านี้ที่ไหน
Burhan Ali

6
  • สร้างรายการคู่คำ [spolsky spowlsky; โจเอล jole; ... ]
  • สร้างสคริปต์ในภาษาสคริปต์ที่คุณชื่นชอบที่จะแทนที่คำในรายการพารามิเตอร์ตามรายการคำคู่ของคุณและส่งรายการพารามิเตอร์ที่แก้ไขไปที่ "/ usr / bin / say"
  • สร้างสคริปต์ที่เรียกใช้งานได้เรียกมันว่า "พูด" และใส่ไว้ในโฟลเดอร์ที่ปรากฏขึ้นก่อนหน้านี้ใน $ PATH ของคุณมากกว่า "/ usr / bin"
  • เพิ่มชุดตัวสะกดในรายการคู่คำของคุณเมื่อคุณพบคำเพิ่มเติมที่คุณต้องการออกเสียงให้แตกต่างกัน

คำพูดใหม่ของคุณจะทำงานเหมือนคำพูดเดิม แต่ด้วยการออกเสียงที่คุณต้องการ


3

คำตอบของ @ bruno-carvalho ตอบคำถามนี้ให้ฉัน แต่ฉันยังต้องตามล่าแท็ก[[inpt TEXT]]เพื่อให้ได้รับคำสั่งพูดเพื่อกลับไปอ่านข้อความ (การสังเคราะห์เสียงพูด) ตามปกติ ตัวอย่างเช่น:
say [[inpt PHON]] hAAIH, [[inpt TEXT]] how are you?

หวังว่าการเพิ่มสิ่งนี้ลงในคำตอบจะช่วยให้ผู้อ่านคำถามนี้ต่อไป


2

ฉันไม่คิดว่าคุณจะทำได้ คุณสามารถลองตั้งค่าเสียงเริ่มต้นเป็นเสียงอื่นในการตั้งค่าระบบหรือคุณสามารถพิมพ์ว่าคุณต้องการให้สิ่งต่าง ๆ ออกเสียงอย่างไร ตัวอย่างเช่น "สวัสดีท้องฟ้า Jole Spole"


1
แล้ว Spowlsky ล่ะ?
Doug Harris

2

นี่เป็นข้อ จำกัด ที่โชคร้ายเนื่องจาก Apple ดูเหมือนจะเป็นวิธีที่ดีที่สุด ผู้ใช้ VoiceOver สามารถแทรกการออกเสียงของตนเองได้อย่างง่ายดายโดยใช้ยูทิลิตี้ VoiceOver (คำพูด -> การออกเสียง) แต่ดูเหมือนว่าการตั้งค่า VoiceOver จะไม่ใช้กับคำสั่ง "พูด" หรือเมนู Edit-> Speech -> "Start Speech" ใน Safari และแอปพลิเคชันอื่น ๆ ที่ Apple จัดเตรียมไว้ให้


0

ไม่มีทางที่จะ 'สอน' sayโปรแกรมให้ออกเสียงคำต่างกัน วิธีที่ง่ายที่สุดในการรับการออกเสียงที่คุณต้องการคือการปรับการสะกดคำของคุณจนกว่ามันจะบอกให้พวกเขาในแบบที่คุณต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.