OS Xの「say」コマンドが単語を発音する方法を変更するにはどうすればよいですか?


14

OS Xのsayコマンドは一部のタスク(Skypeの「連絡先がオンラインになったときに通知する」など)には役立ちますが、一部の名前を誤って発音します。say単語の発音を変える方法を教える方法はありますか?

たとえば、試してみてください:

say "Hi, Joel Spolsky"

「ol」は「old」ではなく「ball」のように聞こえます。新しい言語のルールを教えようとするのではなく、「このようにスポロスキーを宣伝する」という例外を追加したいと思います。Appleが望むように「iphone」を発音することができるので、方法があるに違いない。


更新 -いくつかの調査の後、私が学んだことは次のとおりです。

  1. テキスト読み上げは、テキストを音素に変換することと、音声を使用して音素を音声に変換することとに分けられます。音声を変更しても音素には影響しません。
  2. 音声合成Managerは、のためにいくつかの機能がある音素にテキストを回し、そしてための方法 音声辞書登録新しいテキスト音素マップを追加します。ただし、Appleの音声辞書はバイナリ形式でなければなりません。plistXMLは見つかりませんでした。
  3. dtrace実行中に使用するとsay、/ System / Library / PrivateFrameworks / SpeechDictionary.framework / Resourcesでいくつかの興味深いファイルが開かれています。これはおそらく音声辞書ですが、XMLである同音異義語を除き、すべてバイナリです。Homophonesにエントリを追加しても何も起こりません。おそらく、音声読み上げで使用されます。これらはAppleによって署名されたコードでもあります。変更すると、一部のプログラムが動作しなくなる可能性があります。
    • PrefixDictionary
    • CartNames
    • CartLite
    • SymbolDictionary
    • ホモホン
  4. ある方法のVoiceOverが働くので、開発者は自由のために取得され、多くのアプリケーションインターフェイス要素のテキストバージョンを追加するには、しかし、そこにあるトリッキーなビットが。ここでの標準は、必要に応じて音声表記を使用することです。

私の推測は次のとおりです。

  1. saySpeech Synthesis Managerの上にあるコードのライトレイヤーです。Apple開発者がコマンドラインオプションを追加して、代替音素マッピング用の音声辞書plistへのパスを取得するのは簡単ですが、そうではありませんでした。より良いを書くことは有用なオープンソースプロジェクトかもしれませんsay
  2. SkypeはおそらくSpeech Synthesis Managerを直接使用しており、友人の名前の発音方法を変更するためのフックを残していません。
  3. コマンドラインバージョンを作成する最も簡単な方法sayは、JRobertが提案した方法です。

ダグ・ハリスの綴りの提案を使用して、ここに簡単な実装を示します。

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

最後に、いくつかの楽しいコマンドラインのもの:

# 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で使用している音声を変更してみました-vか?
スタッド

2
発音には影響しません:say -v alex 'Spolsky' ; say -v vicki 'Spolsky'; say -v bad 'Spolsky Spolsky Spolsky Spolsky Spolsky Spols'。音声のリストは、[システム環境設定]-> [音声]-> [音声合成]にあります。問題は、音声合成ではなく音素変換にあります。ライブラリを直接呼び出す場合は、カスタム音素を設定できます: developer.apple.com/mac/library/documentation/Carbon/Reference / ...ディスクを検索して、Apple 開発者が.plistを使用しているかどうかを確認します...
jwhitlock

回答:


8

さて、あなたが言いたい音素を正確に入力することもできます。構文はそれほど複雑ではありません。

例:

[[inpt PHON]] hAAIH。

詳細については、次のリンクを確認してください。http//developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/SpeechSynthesisProgrammingGuide/Phonemes/Phonemes.html#//apple_ref/doc/uid/TP40004365-CH9-SW1


1
Repeat After Meを使用して、音声構文を生成できます。developer.apple.com/downloadsから入手できます。
リリー

Repeat After Me、Xcode補助ツールの一部です。
ダニエルベック

1
これは私のために働いた:「こんにちは、ジョエル[[inpt PHON]] spowl skIY。」これに加えて、アドレス帳の音声フィールドがトリックを行うのだろうか:macdailynews.com/2011/10/20/…– jwhitlock
1

これらの音素はどこに入力しますか?
バーハンアリ

6
  • 単語ペアのリストを作成します[spolsky spowlsky; ジョエル・ジョル; ...]。
  • 単語ペアリストに従ってパラメータリストの単語を置換するお気に入りのスクリプト言語でスクリプトを作成し、変更されたパラメータリストを「/ usr / bin / say」に渡します。
  • スクリプトを実行可能にし、「say」と呼び、「/ usr / bin」よりも先に$ PATHに現れるフォルダーに入れます。
  • 別の発音をしたい単語が見つかったら、単語ペアリストにスペルバリエーションを追加します。

新しい発言は古い発言と同じように機能しますが、好みの発音を使用できます。


3

@ bruno-carvalhoの答えがこの質問に答えてくれました。しかし、[[inpt TEXT]]通常はテキストの読み取り(音声合成)に戻るためにsayコマンドを取得するには、タグを探し出す必要もありました。例えば:
say [[inpt PHON]] hAAIH, [[inpt TEXT]] how are you?

うまくいけば、これを答えに追加することで、この質問の以降の読者の助けになるでしょう。


2

できるとは思わない。デフォルトの音声をシステム環境設定で別の音声に設定してみたり、発音をどのようにしたいかを入力したりできます。たとえば、「こんにちは、Jole Spole sky」。


1
「Spowlsky」はどうですか?
ダグ・ハリス

2

Appleがそこにほとんどの方法であるように思われるので、これは残念な制限です。VoiceOverのユーザーは、VoiceOverユーティリティを使用して自分の発音を簡単に挿入できます([音声]-> [発音])。ただし、VoiceOverの設定は、Safariやその他のApple提供のアプリケーションの「say」コマンドや「編集」->「音声」->「音声の開始」メニューには適用されないようです。


0

say単語を異なる発音にするプログラムを「教える」方法はありません。上で提案したように、あなたが望む発音を得る最も簡単な方法は、あなたが望むように言うまであなたの言葉の綴りを調整することです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.