Bagaimana saya bisa mengubah cara perintah 'katakan' OS X mengucapkan sebuah kata?

14

sayPerintah OS X berguna untuk beberapa tugas (seperti Skype 'beri tahu saya ketika ada kontak online), tetapi itu mengucapkan beberapa nama secara tidak benar. Apakah ada cara untuk mengajar saymengucapkan kata secara berbeda?

Misalnya, coba:

say "Hi, Joel Spolsky"

'Ol' terdengar seperti 'bola' dan bukan 'tua'. Saya ingin menambahkan pengecualian yang mengatakan "Ucapkan Spolsky seperti ini", daripada mencoba mengajarkan aturan linguistik baru. Saya yakin ada cara karena bisa mengucapkan "iphone" seperti yang diinginkan Apple.


Pembaruan - Setelah beberapa penelitian, inilah yang saya pelajari:

  1. Text-to-speech terbagi antara mengubah teks menjadi fonem, dan kemudian fonem diubah menjadi audio menggunakan suara. Mengubah suara tidak mempengaruhi fonem.
  2. The Speech Synthesis Manajer memiliki beberapa fungsi untuk mengubah teks ke fonem , dan metode untuk mendaftarkan kamus pidato yang akan menambahkan peta text-fonem baru. Namun, kamus pidato Apple harus dalam bentuk biner - Saya tidak menemukan XML plist.
  3. Menggunakan dtracesaat menjalankan say, saya menemukan beberapa file menarik dibuka di /System/Library/PrivateFrameworks/SpeechDictionary.framework/Resources. Ini mungkin adalah kamus ucapan, tetapi semuanya adalah biner, kecuali untuk Homofon, yang merupakan XML. Menambahkan entri ke Homophones tidak menghasilkan apa-apa - itu mungkin digunakan dalam ucapan-ke-teks. Mereka juga kode yang ditandatangani oleh Apple - mengubahnya bisa mencegah beberapa program bekerja.
    • PrefixDictionary
    • Nama Cart
    • CartLite
    • SymbolDictionary
    • Homofon
  4. Ada beberapa cara untuk menambahkan versi teks dari elemen antarmuka aplikasi agar VoiceOver berfungsi, banyak yang didapat pengembang secara gratis, tetapi ada bagian-bagian yang rumit . Standar di sini tampaknya menggunakan ejaan fonetis sesuai kebutuhan.

Dugaan saya adalah:

  1. sayadalah lapisan kode yang ringan di atas Manajer Sintesis Bicara. Akan mudah bagi para pengembang Apple untuk menambahkan opsi baris perintah untuk mengambil jalur ke daftar kamus ucapan untuk pemetaan fonem alternatif, tetapi mereka tidak. Mungkin proyek open source yang bermanfaat untuk menulis yang lebih baik say.
  2. Skype mungkin menggunakan Speech Synthesis Manager secara langsung, tidak meninggalkan kait untuk mengubah cara nama teman saya diucapkan, selain mengeja secara fonetis, yang konyol.
  3. Cara termudah untuk membuat versi baris perintah sayadalah seperti yang disarankan JRobert.

Inilah penerapan cepat saya, menggunakan saran ejaan Doug Harris:

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

Akhirnya, beberapa hal baris perintah yang menyenangkan:

# 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
jwhitlock
sumber
Apakah Anda mencoba mengubah suara sayyang digunakan -v?
Studer
2
Tidak berpengaruh pada pengucapan: say -v alex 'Spolsky' ; say -v vicki 'Spolsky'; say -v bad 'Spolsky Spolsky Spolsky Spolsky Spolsky Spols'. Daftar suara dapat ditemukan di System Preferences -> Speech -> Text to Speech. Masalahnya adalah pada terjemahan fonem, bukan pada sintesis suara. Jika Anda memanggil perpustakaan secara langsung, Anda dapat mengatur fonem khusus: developer.apple.com/mac/library/documentation/Carbon/Reference/... Mencari disk saya untuk melihat apakah Apple devs menggunakan
.plist

Jawaban:

8

Anda juga dapat memasukkan persis fonem yang ingin Anda sampaikan. Sintaksnya tidak begitu rumit.

Ex:

[[INPT PHON]] hAAIH.

Periksa tautan ini untuk mempelajari lebih lanjut: http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/SpeechSynthesisProgrammingGuide/Phonemes/Phonemes.html#//apple_ref/doc/uid/TP40004365-CH9-SW1

Bruno Carvalho
sumber
1
Anda dapat menggunakan Repeat After Me untuk menghasilkan sintaks fonetik. Ini tersedia dari developer.apple.com/downloads .
Lri
Ulangi Setelah Saya adalah bagian dari Alat Bantu untuk Xcode .
Daniel Beck
1
Ini bekerja untuk saya: katakan 'Hai, Joel [[inpt PHON]] spOWl skIY.' Saya ingin tahu apakah bidang fonetik plus ini di buku alamat akan melakukan trik: macdailynews.com/2011/10/10/…
jwhitlock
Di mana Anda akan memasukkan fonem-fonem ini?
Burhan Ali
6
  • Buat daftar pasangan kata [spolsky spowlsky; joel jole; ...].
  • Buat skrip dalam bahasa skrip favorit Anda yang menggantikan kata-kata dalam daftar parameternya sesuai dengan daftar pasangan kata Anda, dan meneruskan daftar parameter yang dimodifikasi ke "/ usr / bin / say".
  • Jadikan skrip tersebut dapat dieksekusi, sebut saja "katakan" dan letakkan di folder yang muncul lebih awal di $ PATH Anda daripada "/ usr / bin".
  • Tambahkan varian ejaan ke daftar pasangan kata Anda saat Anda menemukan lebih banyak kata yang ingin Anda ucapkan berbeda.

Ucapan baru Anda akan berfungsi seperti ucapan lama, tetapi dengan pengucapan pilihan Anda.

JRobert
sumber
3

@ bruno-carvalho menjawab pertanyaan ini untuk saya. Tapi, saya juga perlu memburu tag [[inpt TEXT]]untuk mendapatkan perintah say untuk kembali membaca teks (sintesis suara) secara normal. Sebagai contoh:
say [[inpt PHON]] hAAIH, [[inpt TEXT]] how are you?

Semoga, menambahkan ini ke jawabannya akan membantu pembaca selanjutnya dari pertanyaan ini.

D. Woods
sumber
2

Saya pikir Anda tidak bisa. Anda dapat mencoba mengatur suara default ke yang berbeda di preferensi sistem, atau Anda bisa mengetikkan bagaimana Anda ingin sesuatu diucapkan. Misalnya, "Hai, Jole Spole sky."

Nick McCurdy
sumber
1
bagaimana dengan "Spowlsky"?
Doug Harris
2

Ini adalah batasan yang disayangkan, mengingat bahwa Apple tampaknya sebagian besar jalan di sana. Pengguna VoiceOver dapat dengan mudah memasukkan pengucapan mereka sendiri menggunakan Utilitas VoiceOver (Ucapan-> Pengucapan). Tetapi, pengaturan VoiceOver tampaknya tidak berlaku untuk perintah "say" atau menu Edit-> Speech -> "Start Speech" di Safari dan aplikasi yang disediakan Apple lainnya.

Ken
sumber
0

Tidak ada cara untuk 'mengajarkan' sayprogram untuk mengucapkan kata-kata secara berbeda. Seperti yang disarankan di atas, cara termudah untuk mendapatkan pelafalan yang Anda inginkan adalah menyesuaikan ejaan kata-kata Anda hingga mengatakan pelafalan seperti yang Anda inginkan.

Mistiry
sumber