プログラム・コードの説明
全体の構成は、以下のようになっています。
○冒頭の処理
○メインコントロール部
○子音変換の関数
○音声変換の関数
○警告の関数
○登録ワード入力部
○結末の処理
前項で掲載した『プログラム・コード』と、下記の『キー名一覧表』を参考にして、お読みください。なおこの『キー名一覧表』は、何かと参考にさせていただいている『AutoHotkey
Wiki』さんのサイトにリンクさせてもらったものです。
さて、各部について、それぞれ要点を順次説明していきます。
まず、『冒頭の処理』の所です。
この部分は、下記の二項から成り立っています。
○冒頭の設定
○エディターの設定
『冒頭の設定』では、一キー押すごとに挿入される時間間隔を、20ミリ秒としています。まあ、こんなもんでしょう。
『エディターの設定』では、特定のウインドウのアクティブ時のみ、処理が有効となるようにしています。公開版プログラムでは、メモ帳にしてあります。
私自身はEmEditorを愛用しています(EmEditorMainFrameが旧版。『3』の付いたのが新版(『ver.3』の意味か?))。冒頭に付ける『;』印が、その行の有効無効を切り替えます。
他のエディターやワープロソフトでも、日本語入力出来ると思いますが、試してないのでわかりません。もし他のソフトを使う場合には、ahk_class
classnameを調べる必要があります。これは、『Win Get
Class』か、付属のツール(『AU3_Spy.exe』)で調べられるそうなんですが、私はやったことがないのでわかりません。(オートホットキー・アイコン右クリックの、『Window
Spy』でも、同じように調べられるようです。これの使い方は、ググってみてください。)こうしてクラス名を調べて、所定の位置に貼り付けます。
次はメインコントロール部です。この部分が、本プログラムの要です。
メインコントロール部の構成は、以下のようになっています。
○単独で働くキー
・ミュートのオンオフの切り替え
・サスペンド状態の切り替え
・上書き保存
・補助キーの指定(数字キーを含め、19個)(g::Tabも含めると、20個)
○ThisHotkeyと連動して働くキー
・補助キーの指定の続き(4個)
・メインテンキーの指定(10個)
○今押されたキー(ThisHotkey)
○補助キーの振る舞い(3個)
○左手キーの振る舞い(5個)
・共通処理
・『あ』列の処理(以下『い』『う』『え』『お』各列)
・これも共通処理
○右手キーの振る舞い(6個)
まず、『単独で働くキー』ですが、これらはプログラム上、一か所にだけ記述されています。『ミュートのオンオフの切り替え』『サスペンド状態の切り替え』『上書き保存』は、すでに補助キーの項で説明した通りです。なお『ミュート』で『1500』とあるのは、1.5秒処理を遅らせないと「消音になります」という発声まで消されてしまうからです。この長さは、好みで調整してください。
『補助キーの指定』は、数字キー(「0~9」と、「.」(コンマ))の11個と、カーソルの上下行頭行末移動の4個と、『Enter』『F7』『→』『←』の、計19個のキーへの変換を指定しています(“おまけ”の『g::Tab』キーを含めると、20個)。(この内『←』キーを、機能が変わっていないのになぜわざわざ記述しているかというと、これを押されると子音変換のルールそのものが無効になってしまうので、暴走を防ぐ裏の処理を含ませるためです。)
『ThisHotkeyと連動して働くキー』は、『ThisHotkey』に入った値が条件により分岐され、いろいろに処理されますので、プログラム上二か所以上に記述されています。
『補助キーの指定の続き』は、『Del』『y(拗音用)』『Space』『Back Space』の、計4個のキーに変換される元キーを指定しています。
『メインテンキーの指定』は、両手の十本の指が主に乗る、「x」「k」「s」「h」「t」「a」「i」「u」「e」「o」に変換される計10個のキーの元キーを指定しています。
『今押されたキー(ThisHotkey)』は、最後に実行された(押された)(ホット)キーのラベル名が格納されます。
『補助キーの振る舞い』は、『Del』『Space』『Back Space』の3つの補助キーが押された時の処理が記述されています。
『左手キーの振る舞い』は、左手側の5個のメインキーが押された時の処理の段取りが書かれています。
『共通処理』は、左指が押されて文字や処理が確定する前、もし「x」「xx」「xxx」が入っていたら、それをバックスペースで取り除いて処理の地盤を作ります。5本指共通です。
『『あ』列の処理』は、左手親指が押された時、それ以前に何も入っていないか子音のみ入っているか、あるいは「x」「xx」「xxx」「c」のどれかが入っているか、により処理を分岐させるプログラムです。以下、『『い』『う』『え』『お』列の処理』も、同様です。If文の後の記述で分岐の様子が分かると思います。
『これも共通処理』は、クリップボードへの“読み上げ文字”の入力と、警告関数への文字数の追加を行っています。『棒読みちゃん用……』とある部分の下の三行は、『棒読みちゃん』を使う時のための特別な処理です。
実は『棒読みちゃん』では、同じ文字列がクリップボードに入力された時、それを発声しません。つまり、「あ」「あ」「あ」と入力しても、最初の「あ」しか発声せず、あとは沈黙してしまうのです。それを回避するため、連続して同じ文字列が入力されないよう、この処理を付け足しました。従ってようく聞くと、若干読みのピッチが違うことが分かります(「.」が付いていると、時間が間延びする)。ですから、必要なければ、この部分は「;」を行頭に付けるなり削除するなり、してください。
『右手キーの振る舞い』は、メインの5個のキーと、補助の『y』キーについて、記述されています。ここでの主な仕事は『子音変換の関数』が行うので、記述は極めてシンプルです。
『子音変換の関数』は、右手の子音キーが押された時、「xhh」と押したら「py」となるというような、『子音変換一覧表』のルールにのっとって子音を変化させるための処理が書き込まれた関数です。
『共通処理関数』は、元の文字列をバックスペースで取り除き、変換後の文字列がディスプレーに表示されるための地盤を作ります。
『『x』列の処理関数』は、親指が押され「x」と入力された時、ルールにのっとり子音を変化させる関数です。以下、『『k』『s』『h』『t』『y』列の処理関数』も、同様です。
『音声変換の関数』は、「me」なら「め」、「sya」なら「しゃ」と、アルファベットを平仮名に変えています。「me」のままだと、「エムイー」とか「ミー」とか、発声されかねませんから。
『『あ』列の処理関数』は、「a」と入力されて文字が確定した時、アルファベットの並びを平仮名に変えます。以下、『『い』『う』『え』『お』列の処理関数』も、同様です。
『その他の処理関数』は、『でぃ』だの『ん』だの『くえすちょん』だの、特殊な発声の平仮名を生成しています。
『カタカナの長音だけ、別扱いです』は、カタカナの長音「-」を、その直前の文字の最後の母音に合わせ発声させている、特殊な処理です。たとえば『ゼウス』と『ゼース』では、同じ長音でも発音が違いますよね。後者は、『ゼェス』ですよね。という次第で、カタカナの長音はその前の母音に引っ張られて伸ばされるようなので、そのように発声させてみました。
『変換限界を警告する関数』は、すでに『周辺の補助的キーの操作』の項の最後で説明した機能(親切設計)を実現させるための関数です。しかし、あまりに親切過ぎて、ウインドウズの『ナレーター』のようにお邪魔な機能かもしれません。
御不用でしたら、オール削除するか、面倒ですがすべての行の頭に「;」マークを付けてください。あるいは、各人の入力環境や好みに合わせ、警告文字数を変えてもいいですね。関数の下の方にある「60」と「50」という数字は、「60文字を過ぎたら、警告を発声するとともに、カウンターを50に戻せ(つまり、10文字ごとに警告を繰り返せ)」という意味です。「60」を「80」にしてもいいし、「50」を「45」(つまり、15文字ごと)にしてもいい。好きに設定してください。(「60」を「6000」にするという裏技は、『カスタマイズ』の所で詳述。)
『登録ワード入力部』は、『その他の面白いキー操作』の所で解説した、多用する言葉を登録しておく場所です。コードを参考にして、言葉を新規登録してください。音声を出したい場合は、「ディスプレー」や「スウェーデンボルグ」の例のように記述すれば、発声されます。
『結末の処理』は、二行です。
「return」は、冒頭の#IfWinActiveの返しなんでしょう(多分)。
最後の#IfWinActiveは、見本にさせていただいたプログラムに「;ウィンドウの限定を解除」と但し書きがありますから、そういう働きをしているんでしょう。解除しないとどうなるんだか、面倒くさいんで試していません。興味のある方は、解除しないでプログラムの暴走具合を存分に楽しんでください(当方は一切関知しませんので)。