Mac OS X - Szybka zmiana głosów w trybie zamiany tekstu na mowę

10

Uwielbiam funkcję zamiany tekstu na mowę w systemie Mac OS X. Ponieważ nie jestem rodzimym językiem angielskim, cieszę się z wszystkich dodatkowych języków dodanych od czasu premiery Lion. Jednak używam angielskiego, jak również mojego języka ojczystego (niemieckiego). Zmiana głosów jest trochę uciążliwa. To wymaga tylko zbyt wielu kroków, aby być wygodnym.

Czy jest jakiś sposób, aby to ułatwić? Szukałem skrótów, może rozwijanego menu gdzieś w prawym rogu, wszystko byłoby w porządku.

Ponieważ moje wyszukiwanie nie powiodło się, mam nadzieję znaleźć tutaj porady na temat SuperUser. Wielkie dzięki!

cu Roman


źródło
Jestem na komputerze Mac i stworzyłem Talkie: rozszerzenie przeglądarki syntezatora mowy z automatycznym wykrywaniem języka. To wszystko jest open source, ale niektóre funkcje są w komercyjnej dystrybucji Talkie Premium. Najłatwiejszy w użyciu w przeglądarce (za pomocą klawiszy skrótu), ale można go używać z dowolnej aplikacji za pomocą schowka (premium). Może ci pomóc! joelpurra.com/projects/talkie
Joel Purra

Odpowiedzi:

9

Użyłem FastScripts, aby przypisać skrót do tego skryptu:

try
    set old to the clipboard as record
end try
try
    tell application "System Events" to keystroke "c" using command down
    delay 0.05
    say (the clipboard) using "Kyoko"
end try
try
    set the clipboard to old
end try

Możesz także utworzyć usługę w Automatorze:

W wersjach 10.7 i 10.8 występuje błąd, w którym skróty do usług Automatora nie zawsze działają, dopóki nie najedziesz myszą na menu usług z paska menu. WorkflowServiceRunner może również używać ponad 100% procesora podczas mówienia tekstu.

Inną opcją byłoby użycie skryptu interfejsu użytkownika do zmiany między dwoma głosami:

tell application "System Preferences"
    reveal anchor "TTS" of pane "com.apple.preference.speech"
end tell
tell application "System Events" to tell process "System Preferences"
    tell pop up button 1 of tab group 1 of window 1
        click
        delay 0.1
        if value is "Alex" then
            click menu item "Victoria" of menu 1
        else
            click menu item "Alex" of menu 1
        end if
    end tell
end tell
quit application "System Preferences"

Zmiana klucza SelectedVoiceID w com.apple.speech.voice.prefs.plist również działa, ale nie wiem, jak zastosować zmiany natychmiast.

Lri
źródło
Wow, wielkie dzięki za tę bardzo szczegółową odpowiedź i za pokazanie mi tak wielu opcji. Usługa Automator działa dla mnie świetnie, a ponadto teraz wiem o tych usługach. Chciałbym też dodać kilka innych :)
1
Świetne rzeczy. Począwszy od OSX 10.10: Aby zastosować zmiany ~/Library/Preferences/com.apple.speech.voice.prefs.plistnatychmiast, uruchom pkill com.apple.speech.speechsynthesisd, co spowoduje, że system automatycznie zrestartuje proces, w którym momencie zmiany są odbierane.
mklement0
1
W moim systemie OS X 10.10.4 skrypty interfejsu użytkownika działają tylko wtedy, gdy wstawię wiersz „aktywuj” między wierszami 1 i 2. W przeciwnym razie pojawia się błąd: „grupa kart 1 okna 1 procesu \„ Preferencje systemowe ”nie może przeczytaj ... Jakieś sugestie, dlaczego dotyczy to mnie, ale nie innych?
Jens Wirth,
3

Dziękuję bardzo Lauryi.

Rozszerzyłem twoje podejście do skryptowania interfejsu użytkownika, aby działało poprawnie z głosami niemieckim i angielskim. Problem polega na tym, że gdy językiem systemu nie jest angielski, wszystkie języki niesystemowe są ukryte (jeśli nie są aktualnie wybrane). Musisz wybrać: pokaż więcej głosów .. najpierw, aby przejść do żądanego języka. W moim kodzie brakuje odrobiny elegancji, ale działa. Oto jest (zaktualizowany):

tell application "System Preferences"
    reveal anchor "TTS" of pane "com.apple.preference.speech"
end tell
set tom to 0
tell application "System Events" to tell process "System Preferences"
    tell pop up button 1 of tab group 1 of window 1
        click
        delay 0.2 -- without this the value was sometimes "Loading Voices…"

        if value is "Tom" then
            click menu item "Anna" of menu 1
        else
            click menu item "Mehr Stimmen anzeigen" of menu 1 -- show up all available voice
            set tom to 1
        end if
    end tell
end tell
if tom is 1 then
    delay 0.5
    tell application "System Events" to tell process "System Preferences"
        tell pop up button 1 of tab group 1 of window 1
            click
            delay 0.2 -- without this the value was sometimes "Loading Voices…"
            click menu item "Tom" of menu 1
        end tell
    end tell
end if
quit application "System Preferences"
kantorde
źródło
0

Bezpośrednie zmiany ~/Library/Preferences/com.apple.speech.voice.prefs.plistnie są tak naprawdę potrzebne, jeśli otrzymasz głosy skryptu bash, które naprawdę dodają wszystkie potrzebne funkcje wiersza poleceń.

Skrypt Apple, aby zmienić standardowy głos na Alex za pomocą głosów, wyglądałby tak:

on run
    do shell script "voices -d Alex"
end run

Wolę terminal i zamiast testować wtargnięcie paska menu w poliglocie, stworzyłem ten (co prawda głupi) skrypt powłoki (który używa głosów) na moje potrzeby zmiany języka. Dzięki temu wszystko, co robię, aby zmienić domyślny język, to wejść do terminala, aby wpisać speak swedishlub speak french. To doskonale pasuje do mojego przepływu pracy. Mam nadzieję, że znajdziesz rozwiązanie, które pasuje do twojego.

# Choose a voice in one of some selected languages
# Use "voices" from https://github.com/mklement0/voices#manual-installation

if [[ $1 = "" ]]
then
    echo "ERROR. No language specified. Type a language as in 'speak hebrew'"
fi
if [[ $1 = "swedish" || $1 = "Swedish" ]]
then
    voices -d Klara
fi
if [[ $1 = "english" || $1 = "English" ]]
then
    voices -d Daniel
fi
if [[ $1 = "american" || $1 = "American" ]]
then
    voices -d Alex
fi
if [[ $1 = "french" || $1 = "French" ]]
then
    voices -d Aurelie
fi
if [[ $1 = "spanish" || $1 = "Spanish" ]]
then
    voices -d Jorge
fi

Zapisuję go w moich skryptach jako „speak.command”, chmod it + x i dodam odpowiedni alias do mojego .bash_profile, aby wywołać go, wpisując speak.

Josef Lilljegren
źródło