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


14

O saycomando do OS X é útil para algumas tarefas (como as do Skype 'notificar-me quando um contato fica online), mas está pronunciando alguns nomes incorretamente. Existe uma maneira de ensinar saya pronunciar uma palavra de maneira diferente?

Por exemplo, tente:

say "Hi, Joel Spolsky"

O 'ol' soa mais como 'bola' do que 'velho'. Gostaria de adicionar uma exceção que diga "Pronuncie Spolsky assim", em vez de tentar ensinar novas regras linguísticas. Aposto que existe uma maneira, pois pode pronunciar "iphone" como a Apple quer.


Atualização - Após algumas pesquisas, eis o que aprendi:

  1. A conversão de texto em fala é 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 síntese de fala possui algumas funções para transformar texto em fonemas e um método para registrar um dicionário de fala que adicionará novos mapas de fonema de texto. No entanto, o dicionário de fala da Apple deve estar em formato binário - não encontrei nenhum XML básico.
  3. Usando dtracedurante a execução say, encontrei alguns arquivos interessantes abertos em /System/Library/PrivateFrameworks/SpeechDictionary.framework/Resources. Este é provavelmente o dicionário de fala, mas todos são binários, exceto Homophones, que é XML. Adicionar entradas ao Homophones não faz nada - provavelmente é usado na fala para texto. Eles também são assinados por código pela Apple - alterá-los pode impedir o funcionamento de alguns programas.
    • PrefixDictionary
    • CartNames
    • CartLite
    • SymbolDictionary
    • Homofones
  4. Existem maneiras de adicionar versões de texto dos elementos da interface do aplicativo para que o VoiceOver funcione, muitos dos quais um desenvolvedor obtém de graça, mas existem alguns trechos . O padrão aqui parece ser o de usar uma ortografia fonética, conforme necessário.

Minhas suposições são:

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

Aqui está minha rápida implementação, usando a sugestão de ortografia 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

Você tentou mudar a voz que sayestá usando -v?
Studer

2
Nenhum efeito sobre a pronúncia: say -v alex 'Spolsky' ; say -v vicki 'Spolsky'; say -v bad 'Spolsky Spolsky Spolsky Spolsky Spolsky Spols'. A lista de vozes pode ser encontrada em Preferências do Sistema -> Fala -> Texto em Fala. O problema está na tradução do fonema, não na síntese da voz. Se você estiver chamando a biblioteca diretamente, poderá definir fonemas personalizados: developer.apple.com/mac/library/documentation/Carbon/Reference/… Pesquisando em meu disco para ver se os desenvolvedores da Apple usaram um .plist ...
jwhitlock

Respostas:


8

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

Ex:

[[inpt PHON]] hAAIH.

Verifique este link para saber mais: http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/SpeechSynthesisProgrammingGuide/Phonemes/Phonemes.html#//apple_ref/doc/uid/TP40004365-CH9-SW1


1
Você pode usar Repetir após mim para gerar a sintaxe fonética. Está disponível em developer.apple.com/downloads .
Lri

Repita o After Me faz parte do Auxiliary Tools for Xcode .
Daniel Beck

1
Isso funcionou para mim: diga 'Oi, Joel [[inpt PHON]] spOWl skiY'. Eu me pergunto se isso mais fonéticos campos no livro de endereços vai fazer o truque: macdailynews.com/2011/10/20/...
jwhitlock

Onde você colocaria esses fonemas?
precisa

6
  • Crie uma lista de pares de palavras [spolsky spowlsky; Joel Jole; ...]
  • Crie um script em sua linguagem de script favorita que substitua as palavras na lista de parâmetros de acordo com a lista de pares de palavras e passe a lista de parâmetros modificada para "/ usr / bin / say".
  • Torne o script executável, chame-o de "diga" e coloque-o em uma pasta que apareça anteriormente no seu $ PATH do que em "/ usr / bin".
  • Adicione variantes de ortografia à sua lista de pares de palavras à medida que você encontrar mais palavras que gostaria de pronunciar de maneira diferente.

Sua nova palavra funcionará como a antiga, mas com sua pronúncia preferida.


3

A resposta de @ bruno-carvalho respondeu a esta pergunta para mim. Mas também precisava procurar a tag [[inpt TEXT]]para obter o comando say para retornar normalmente à leitura (síntese de fala). Por exemplo:
say [[inpt PHON]] hAAIH, [[inpt TEXT]] how are you?

Felizmente, adicionar isso à resposta ajudará os leitores subsequentes desta pergunta.


2

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


1
que tal "Spowlsky"?
Doug Harris

2

Essa é uma limitação infeliz, já 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). Porém, as configurações do VoiceOver parecem não se aplicar ao comando "say" ou ao menu Editar-> Fala -> "Iniciar fala" no Safari e em outros aplicativos fornecidos pela Apple.


0

Não há como 'ensinar' o sayprograma a pronunciar palavras de maneira diferente. Como sugerido acima, a maneira mais fácil de obter a pronúncia desejada é ajustar a ortografia das suas palavras até que sejam ditas da maneira que você deseja.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.