say
Perintah 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 say
mengucapkan 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:
- Text-to-speech terbagi antara mengubah teks menjadi fonem, dan kemudian fonem diubah menjadi audio menggunakan suara. Mengubah suara tidak mempengaruhi fonem.
- 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.
- Menggunakan
dtrace
saat menjalankansay
, 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
- 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:
say
adalah 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 baiksay
.- Skype mungkin menggunakan Speech Synthesis Manager secara langsung, tidak meninggalkan kait untuk mengubah cara nama teman saya diucapkan, selain mengeja secara fonetis, yang konyol.
- Cara termudah untuk membuat versi baris perintah
say
adalah 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
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
say
yang digunakan-v
?