Jak mogę zmienić sposób, w jaki polecenie „powiedz” w systemie OS X wymawia słowo?

14

sayPolecenie OS X jest przydatne do niektórych zadań (takich jak Skype „powiadamiaj mnie, gdy kontakt wejdzie w tryb online), ale niepoprawnie wymawia niektóre nazwy. Czy istnieje sposób nauczenia saywymawiania słowa w inny sposób?

Na przykład spróbuj:

say "Hi, Joel Spolsky"

„OL” brzmi bardziej jak „piłka” niż „stara”. Chciałbym dodać wyjątek, który mówi „wymawiaj Spolsky w ten sposób”, zamiast próbować uczyć nowych zasad językowych. Założę się, że istnieje sposób, ponieważ może wymówić „iPhone”, jak chce Apple.


Aktualizacja - po kilku badaniach dowiedziałem się:

  1. Funkcja zamiany tekstu na mowę jest dzielona między zamianę tekstu na fonemy, a następnie fonemy zamieniane są na dźwięk za pomocą głosu. Zmiana głosu nie wpływa na fonemy.
  2. Speech Synthesis Menedżer ma pewne funkcje dla toczenia tekst fonemów , oraz sposób rejestracji słownika mowy , które będą dodawać nowe mapy text-fonemy. Jednak słownik mowy Apple musi być w formie binarnej - nie znalazłem żadnego plist XML.
  3. Korzystanie dtracepodczas jazdy say, znalazłem kilka ciekawych plików otwartych w /System/Library/PrivateFrameworks/SpeechDictionary.framework/Resources. Jest to prawdopodobnie słownik mowy, ale wszystkie są binarne, z wyjątkiem homofonów, czyli XML. Dodanie wpisów do homofonów nic nie robi - prawdopodobnie jest używane w mowie i tekście. Są również podpisane przez Apple kodem - ich zmiana może uniemożliwić działanie niektórych programów.
    • PrefixDictionary
    • CartNames
    • CartLite
    • SymbolDictionary
    • Homofony
  4. Istnieją sposoby dodawania tekstowych wersji elementów interfejsu aplikacji, dzięki czemu VoiceOver działa, z których wiele deweloper otrzymuje za darmo, ale są trudne . Wydaje się, że w tym przypadku standardem jest pisownia fonetyczna.

Moje domysły to:

  1. sayto lekka warstwa kodu na szczycie Menedżera syntezy mowy. Deweloperom Apple byłoby łatwo dodać opcję wiersza poleceń, aby przejść ścieżkę do listy słownika mowy dla alternatywnego mapowania fonemów, ale nie zrobili tego. Pisanie lepszego może być użytecznym projektem typu open source say.
  2. Skype prawdopodobnie korzysta bezpośrednio z Menedżera syntezy mowy, nie pozostawiając żadnych haczyków, aby zmienić sposób wymawiania nazwisk mojego przyjaciela, poza pisaniem ich fonetycznie, co jest głupie.
  3. Najprostszym sposobem na wykonanie wersji wiersza poleceń sayjest zasugerowanie JRobert.

Oto moja szybka implementacja, używając sugestii pisowni Douga Harrisa:

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

Na koniec kilka fajnych rzeczy z wiersza poleceń:

# 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
źródło
Czy próbowałeś zmienić głos, którego sayużywasz -v?
Studer
2
Brak wpływu na wymowę: say -v alex 'Spolsky' ; say -v vicki 'Spolsky'; say -v bad 'Spolsky Spolsky Spolsky Spolsky Spolsky Spols'. Lista głosów znajduje się w Preferencjach systemowych -> Mowa -> Tekst na mowę. Problem polega na tłumaczeniu fonemów, a nie na syntezie głosu. Jeśli bezpośrednio wywołujesz bibliotekę, możesz ustawić niestandardowe fonemy: developer.apple.com/mac/library/documentation/Carbon/Reference/... Przeszukując mój dysk, aby sprawdzić, czy twórcy Apple użyli .plist ...
jwhitlock

Odpowiedzi:

8

Cóż, możesz również wprowadzić dokładnie fonemy, które chcesz wypowiedzieć. Składnia nie jest tak skomplikowana.

Dawny:

[[inpt PHON]] hAAIH.

Sprawdź ten link, aby dowiedzieć się więcej: http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/SpeechSynthesisProgrammingGuide/Phonemes/Phonemes.html#//apple_ref/doc/uid/TP40004365-CH9-SW1

Bruno Carvalho
źródło
1
Możesz użyć funkcji Powtórz po mnie, aby wygenerować składnię fonetyczną. Jest dostępny na stronie developer.apple.com/downloads .
Lri
Repeat After Me jest częścią Auxiliary Tools for Xcode .
Daniel Beck
1
To zadziałało dla mnie: powiedz „Cześć, Joel [[inpt PHON]] SPOWL SKIY”. Zastanawiam się, czy to plus pola fonetyczne w książce adresowej załatwi sprawę
jwhitlock
Gdzie wprowadziłbyś te fonemy?
Burhan Ali,
6
  • Utwórz listę par słów [spolsky spowlsky; joel jole; ...]
  • Utwórz skrypt w swoim ulubionym języku skryptowym, który zastępuje słowa na liście parametrów zgodnie z listą par słów i przekazuje zmodyfikowaną listę parametrów do „/ usr / bin / say”.
  • Spraw, by skrypt był wykonywalny, nazwij go „powiedz” i umieść go w folderze, który pojawia się wcześniej w $ PATH, niż „/ usr / bin”.
  • Dodaj warianty pisowni do listy par słów, gdy znajdziesz więcej słów, które chcesz wymawiać inaczej.

Twoje nowe powiedzenie będzie działało jak stare, ale z preferowaną wymową.

JRobert
źródło
3

Odpowiedź bruno-carvalho na mnie odpowiedziała na to pytanie. Ale musiałem również wyśledzić znacznik, [[inpt TEXT]]aby polecenie say powróciło do normalnego czytania (syntezowania mowy) tekstu. Na przykład:
say [[inpt PHON]] hAAIH, [[inpt TEXT]] how are you?

Mam nadzieję, że dodanie tego do odpowiedzi pomoże kolejnym czytelnikom tego pytania.

D. Woods
źródło
2

Nie sądzę, że możesz. Możesz spróbować ustawić domyślny głos na inny w preferencjach systemowych lub wpisać, jak chcesz, aby słowa były wymawiane. Na przykład „Cześć, Jole Spole sky”.

Nick McCurdy
źródło
1
co powiesz na „Spowlsky”?
Doug Harris
2

Jest to niefortunne ograniczenie, biorąc pod uwagę, że Apple wydaje się być w większości przypadków. Użytkownicy VoiceOver mogą łatwo wstawiać własne wymowy za pomocą Narzędzia VoiceOver (mowa-> wymowa). Jednak ustawienia VoiceOver nie wydają się mieć zastosowania do polecenia „powiedz” ani menu Edycja-> Mowa -> „Rozpocznij mowę” w przeglądarce Safari i innych aplikacjach Apple.

Rozpoznać
źródło
0

Nie ma sposobu, aby „nauczyć” sayprogram wymowy słów w inny sposób. Jak zasugerowano powyżej, najłatwiejszym sposobem na uzyskanie wymowy, którą chcesz, jest dostosowanie pisowni słów, tak aby były wymawiane tak, jak chcesz.

Mistiry
źródło