O say
comando 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 say
a 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:
- 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.
- 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.
- Usando
dtrace
durante a execuçãosay
, 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
- 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:
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 melhorsay
.- 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.
- 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
say
está usando-v
?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 ...Respostas:
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
fonte
Sua nova palavra funcionará como a antiga, mas com sua pronúncia preferida.
fonte
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.
fonte
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".
fonte
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.
fonte
Não há como 'ensinar' o
say
programa 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.fonte