Como posso alterar como o comando 'say' do OS X pronuncia uma palavra?

13

O comando say do OS X é útil para algumas tarefas (como o Skype 'me notifica quando um contato fica online), mas está pronunciando alguns nomes incorretamente. Existe uma maneira de ensinar say a pronunciar uma palavra diferente?

Por exemplo, tente:

say "Hi, Joel Spolsky"

O 'ol' soa como 'bola' em vez de 'velha'. Eu gostaria de adicionar uma exceção que diga "Pronuncie Spolsky assim", em vez de tentar ensinar novas regras lingüísticas. Aposto que há uma maneira, uma vez que pode pronunciar "iphone" como a Apple quer.

Atualização - Depois de algumas pesquisas, eis o que aprendi:

  1. A conversão de texto em voz é dividida entre transformar o texto em fonemas e, em seguida, os fonemas são transformados em áudio usando uma voz. Mudar a voz não afeta os fonemas.
  2. O Gerenciador de Sintetizador de Fala tem algumas funções para < a href="http://developer.apple.com/mac/library/documentation/Carbon/Reference/Speech_Synthesis_Manager/Reference/reference.html#//apple_ref/c/func/TextToPhonemes"> transformando texto em fonemas e um método para registrando um dicionário de fala que adicionará novos mapas de texto-fonema. No entanto, o dicionário de fala da Apple deve estar em uma forma binária - não encontrei nenhum XML plist.
  3. Usando dtrace durante a execução de say , encontrei alguns arquivos interessantes abertos em /System/Library/PrivateFrameworks/SpeechDictionary.framework/Resources. Este é provavelmente o dicionário da fala, mas eles são todos binários, exceto para Homophones, que é XML. Adicionar entradas a Homophones não faz nada - é provavelmente usado em fala para texto. Eles também são assinados pela Apple - alterá-los pode impedir que alguns programas funcionem.
    • PrefixDictionary
    • CartNames
    • CartLite
    • SymbolDictionary
    • Homophones
  4. Existem maneiras de adicionar versões de texto dos elementos da interface do aplicativo para que o VoiceOver funcione, muitas das quais um desenvolvedor obtém gratuitamente, mas há bits complicados . O padrão aqui parece ser usar uma ortografia fonética conforme necessário.

Meus palpites são:

  1. say é uma leve camada de código no topo do Speech Synthesis Manager. Seria fácil para os desenvolvedores da Apple adicionar uma opção de linha de comando para pegar o caminho para um plist de dicionário de fala para mapeamento de fonemas alternativo, mas eles não fizeram isso. Pode ser um projeto útil de código aberto para escrever um say melhor.
  2. O Skype provavelmente usa o Speech Synthesis Manager diretamente, não deixando ganchos para mudar a maneira como os nomes dos meus amigos são pronunciados, além de soletrá-los foneticamente, o que é bobo.
  3. A maneira mais fácil de criar uma versão de linha de comando do say é como o JRobert sugeriu.

Aqui está minha implementação rápida, usando a sugestão ortográfica de Doug Harris:

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

Finalmente, algumas coisas divertidas da linha de 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
    
por jwhitlock 30.07.2010 / 19:38

6 respostas

8

Bem, você também pode inserir exatamente os fonemas que você quer que sejam ditos. A sintaxe não é tão complicada.

Ex:

[[inpt PHON]] hAAIH.

Confira este link para saber mais: link

    
por 09.09.2012 / 04:42
6
  • Crie uma lista de pares de palavras [spolsky spowlsky; joel jole; ...].
  • Crie um script em sua linguagem de script favorita que substitua palavras em sua lista de parâmetros de acordo com sua lista de pares de palavras e transmita a lista de parâmetros modificados para "/ usr / bin / say".
  • Torne o script executável, chame-o de "dizer" e coloque-o em uma pasta que aparece antes em seu $ PATH do que "/ usr / bin".
  • Adicione variantes de ortografia à sua lista de pares de palavras à medida que encontra mais palavras que gostaria de pronunciar de forma diferente.

Sua nova opinião funcionará como o velho ditado, mas com sua pronúncia preferida.

    
por 30.07.2010 / 23:04
3

@ bruno-carvalho respondeu a esta pergunta para mim. Mas também precisei procurar a tag [[inpt TEXT]] para obter o comando say para retornar ao texto de leitura (sintetizando a fala) normalmente. Por exemplo: say [[inpt PHON]] hAAIH, [[inpt TEXT]] how are you?

Espero que acrescentar isso à resposta ajude os leitores subsequentes desta questão.

    
por 24.12.2012 / 21:42
2

Eu não acho que você pode. Você poderia tentar definir a voz padrão para uma diferente nas preferências do sistema, ou você poderia digitar como você deseja que as coisas sejam pronunciadas. Por exemplo, "Hi, Jole Spole sky".

    
por 30.07.2010 / 19:52
2

Esta é uma limitação infeliz, dado que a Apple parece estar na maior parte do caminho. Os usuários do VoiceOver podem inserir facilmente suas próprias pronúncias usando o utilitário VoiceOver (fala- > Pronúncia). No entanto, as configurações do VoiceOver não se aplicam ao comando "say" ou ao menu Editar - "Discurso inicial" no Safari e em outros aplicativos fornecidos pela Apple.

    
por 26.08.2010 / 18:26
0

Não há como "ensinar" o programa say a pronunciar palavras de maneira diferente. Como sugerido acima, a maneira mais fácil de obter a pronúncia desejada é ajustar a ortografia das palavras até que elas sejam ditas da maneira desejada.

    
por 30.07.2010 / 22:04

Tags