Come posso cambiare il modo in cui il comando "dire" di OS X pronuncia una parola?


14

Il saycomando di OS X è utile per alcune attività (come Skype 'avvisami quando un contatto diventa online), ma sta pronunciando alcuni nomi in modo errato. C'è un modo per insegnare saya pronunciare una parola in modo diverso?

Ad esempio, prova:

say "Hi, Joel Spolsky"

Il "vecchio" suona come "palla" piuttosto che "vecchio". Vorrei aggiungere un'eccezione che dice "Pronuncia Spolsky in questo modo", piuttosto che cercare di insegnare nuove regole linguistiche. Scommetto che esiste un modo poiché può pronunciare "iphone" come vuole Apple.


Aggiornamento - Dopo alcune ricerche, ecco cosa ho imparato:

  1. La sintesi vocale viene suddivisa tra la trasformazione del testo in fonemi e quindi i fonemi vengono trasformati in audio mediante una voce. La modifica della voce non influisce sui fonemi.
  2. Il Gestore sintesi vocale ha alcune funzioni per trasformare il testo in fonemi e un metodo per registrare un dizionario vocale che aggiungerà nuove mappe di testo-fonemi. Tuttavia, il dizionario vocale di Apple deve essere in forma binaria: non ho trovato alcun XML plist.
  3. Usando dtracedurante l'esecuzione say, ho trovato alcuni file interessanti aperti in /System/Library/PrivateFrameworks/SpeechDictionary.framework/Resources. Questo è probabilmente il dizionario vocale, ma sono tutti binari, ad eccezione di Homophones, che è XML. L'aggiunta di voci agli omofoni non fa nulla: è probabilmente usata nel discorso-testo. Inoltre, sono firmati da Apple e la loro modifica potrebbe impedire il funzionamento di alcuni programmi.
    • PrefixDictionary
    • CartNames
    • CartLite
    • SymbolDictionary
    • omofoni
  4. Esistono modi per aggiungere versioni di testo degli elementi dell'interfaccia dell'applicazione in modo che VoiceOver funzioni, molti dei quali uno sviluppatore ottiene gratuitamente, ma ci sono bit complicati . Lo standard qui sembra essere quello di utilizzare un'ortografia fonetica, se necessario.

Le mie ipotesi sono:

  1. sayè un leggero strato di codice in cima al Gestore sintesi vocale. Sarebbe facile per gli sviluppatori Apple aggiungere un'opzione della riga di comando per prendere il percorso di un pianificatore del dizionario vocale per la mappatura alternativa dei fonemi, ma non è così. Potrebbe essere un utile progetto open source per scrivere meglio say.
  2. Skype probabilmente usa direttamente Speech Synthesis Manager, senza lasciare hook per cambiare il modo in cui i nomi dei miei amici sono pronunciati, oltre a scriverli foneticamente, il che è sciocco.
  3. Il modo più semplice per creare una versione da riga di comando sayè come suggerito da JRobert.

Ecco la mia rapida implementazione, usando il suggerimento ortografico di Doug Harris:

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

Infine, alcune divertenti cose da riga di comando:

# 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

Hai provato a cambiare la voce saycon cui stai usando -v?
Studente il

2
Nessun effetto sulla pronuncia: say -v alex 'Spolsky' ; say -v vicki 'Spolsky'; say -v bad 'Spolsky Spolsky Spolsky Spolsky Spolsky Spols'. L'elenco delle voci è disponibile in Preferenze di Sistema -> Voce -> Sintesi vocale. Il problema è nella traduzione dei fonemi, non nella sintesi vocale. Se stai chiamando direttamente la libreria, puoi impostare fonemi personalizzati: developer.apple.com/mac/library/documentation/Carbon/Reference/… Cercando sul mio disco per vedere se gli sviluppatori Apple hanno usato un .plist ...
jwhitlock

Risposte:


8

Bene, puoi anche inserire esattamente i fonemi che vuoi dire. La sintassi non è così complicata.

Ex:

[[inpt PHON]] hAAIH.

Controlla questo link per saperne di più: http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/SpeechSynthesisProgrammingGuide/Phonemes/Phonemes.html#//apple_ref/doc/uid/TP40004365-CH9-SW1


1
È possibile utilizzare Repeat After Me per generare la sintassi fonetica. È disponibile da developer.apple.com/downloads .
Lri,

Repeat After Me fa parte di Strumenti ausiliari per Xcode .
Daniel Beck

1
Questo ha funzionato per me: dì "Ciao, Joel [[inpt PHON]] parla SKIY." Mi chiedo se questo oltre a campi fonetici nella Rubrica farà il trucco: macdailynews.com/2011/10/20/…
jwhitlock

Dove inseriresti questi fonemi?
Burhan Ali,

6
  • Crea un elenco di coppie di parole [spolsky spowlsky; joel jole; ...].
  • Crea uno script nel tuo linguaggio di scripting preferito che sostituisce le parole nel suo elenco di parametri in base al tuo elenco di coppie di parole e passa l'elenco di parametri modificato a "/ usr / bin / say".
  • Rendi eseguibile lo script, chiamalo "dire" e inseriscilo in una cartella che appare prima nel tuo $ PATH rispetto a "/ usr / bin".
  • Aggiungi varianti ortografiche al tuo elenco di coppie di parole man mano che trovi altre parole che desideri pronunciare in modo diverso.

Il tuo nuovo dire funzionerà come il vecchio, ma con la tua pronuncia preferita.


3

La risposta di @ bruno-carvalho ha risposto a questa domanda per me. Ma avevo anche bisogno di dare la caccia al tag [[inpt TEXT]]per ottenere il comando say per tornare normalmente alla lettura (sintesi vocale) del testo. Per esempio:
say [[inpt PHON]] hAAIH, [[inpt TEXT]] how are you?

Speriamo che aggiungere questo alla risposta aiuterà i lettori successivi di questa domanda.


2

Non penso che tu possa. Puoi provare a impostare la voce predefinita su una diversa nelle preferenze di sistema, oppure puoi digitare come vuoi che le cose vengano pronunciate. Ad esempio, "Ciao, Jole Spole sky".


1
che ne dici di "Spowlsky"?
Doug Harris,

2

Questa è una sfortunata limitazione, dato che Apple sembra esserci per lo più. Gli utenti di VoiceOver possono facilmente inserire le loro pronunce usando l'utilità VoiceOver (Discorso-> Pronuncia). Tuttavia, le impostazioni di VoiceOver non sembrano applicarsi al comando "dire" o al menu Modifica-> Voce -> "Avvia voce" in Safari e altre applicazioni fornite da Apple.


0

Non c'è modo di "insegnare" al sayprogramma a pronunciare le parole in modo diverso. Come suggerito sopra, il modo più semplice per ottenere la pronuncia desiderata è regolare l'ortografia delle parole fino a quando non le dice nel modo desiderato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.