ローマ字・かな・親指シフト対応タイピングFlash

追記 2013-01-22
このページで紹介しているFlashはサーバー移転の影響で消えました。
その代わり「[日本語入力] ローマ字入力・かな入力 入門Flash
http://itouhiro.hatenablog.com/entry/20130122/jpinput
を用意しました。



タイピングソフトを作りたいので、まず練習台として、入力した文字を表示してくれるフラッシュを作ったんだ。


名称:ロマかなニコ タイピング
URL: http://ai11.net/2010/romakananico/

動作環境
  • Windows 98 以上。LinuxMacで動作するかは未検証。
  • Flash Player 9 か、それ以上。
  • フォントは「メイリオ」が入っていればそれを使用。なくてもOK。
確認した動作環境

[f:id:itouhiro:20080902172315g:image] なにか特色はあるのかい? 入力した文字を表示するだけ?


いくつか、ほかにはない特徴があるよ。


ほほぅ。親指シフト体験版にもなるね。
声が出るってのは、以前にもなかったっけ?


以前つくった http://d.hatena.ne.jp/itouhiro/20090318 でも発音してくれるね。でも、これは「かな入力」専用だった。


今回はいろいろパワーアップしたんだ。
パワーアップしたポイントは……

  • 前のは「゛」とかを音声的にうまく扱えなかったけど、今回は「発声遅延」機能を導入して、ちゃんと扱うようにした。
  • 声の種類も変更できる。
  • ローマ字入力・かな入力・親指シフトNICOLA)の変更は、設定ファイル切り替えだけで可能。
  • 親指シフトの「同時打鍵判定」と「一回性シフト」(と勝手に呼んでるけど詳しくはWikipedia:シフトキーを参照)に対応。
  • 画像をすべてビットマップではなくベクターにしたので、どれだけウィンドウ拡大しても画像がシャープ。
  • [F6]でひらがな、[F7]でカタカナ、[F9]で全角英数字等のMS-IME互換の変換機能も搭載。
  • ActionScript3.0で作成。コードの一部は http://wonderfl.net/c/87Iz で公開。


親指シフトの「同時打鍵判定」って?


これは、親指シフトの仕様だ。親指の位置にあるシフトキーを押すのが少し遅れても、「同時」にシフトを押したことにしてくれるんだ。


それは頭のよさそうな機能だね。

[f:id:itouhiro:20080902172316g:image] それは、どうかな……。 

今回は、「シフト先行」機能というのを載せて、同時打鍵に対応したんだ。


シフト先行機能って何?


ほんらいシフトを押すときは、文字キーを押す前に、シフトを先に押さなくてはいけないんだ。
でも人間だもの、シフトを押すのが遅れることがある。


そんなときも、以下の図のように「シフトキーを押したとき」だけ処理を変えて、シフトキーが先行して押されたかのように判定してくれる(以下の図では「親指左」がシフトキー)、これがシフト先行機能だよ。


これは……シフトキーを先行させるというより、文字キーの処理を遅らせてるんじゃないか。


そのとおりだよ。でも「文字キー遅延」ってあんましピンとこない名前だからさ。ようするにシフトキーだけ特別扱いしますよって機能だから、「シフト」を名前に入れたかったんだ。


でも、この機能は問題があったのさ。
オレが試したところ、250 ミリ秒を指定してしまうと「しゃ」と入力したつもりが「あこ」になる。「し」→「親指左+こ」と入力したつもりが、「し+親指左」→「こ」と判定されるんだ。


ん、それは具体的にどういうことが起こっているの?


こうなってる。
シフト先行を 100 ミリ秒(0.1秒)に指定した場合、以下の図のように、正常に入力できる。


しかし、シフト先行を 250 ミリ秒(0.25秒)に指定した場合、以下の図のようにおかしなことになるんだね。


なるほどー。タイピングの早い人は 100ミリ秒でもこれが起こるかも。


そうなんだよ。
この「シフト先行」機能は、同時打鍵判定を実装するときの簡易的な方法なので、本格的に実装するならもっと別の方法をとったほうがよさそうだ。



もっと少ない数値にしたほうがいいね。50ミリ秒とか、いっそのこと 0 にするとか。


ん? 上のほうの最後の図で、親指シフトキーを押したままなのに、2つめの文字にシフトが効いてないよ。


それは親指シフトの「一回性シフト」のせいだよ。親指シフトでは、シフトキーを押したまま文字を一文字入力すると、そこでシフトキーの効力が途切れてしまうのだ。
シフトをそのまま押しっぱなしにしていても、もうシフトキーは効かない。

シフトキーの力を取り戻すには、シフトキーをいちど離す必要がある。

[f:id:itouhiro:20080902172315g:image] そんな仕様があるのか


そんな仕様のせいで、親指シフトは 1文字打つたびにシフトキーを離しては押して を繰り返すから、親指を しじゅうバタバタさせるのが宿命なのだ。

[f:id:itouhiro:20080902172315g:image] へえ。

ところでさ、[全角半角]キーや [変換]キーを押しても反応がないね。


IMEかな漢字変換システム:MS-IMEATOKGoogle日本語入力など)を起動させるキーは反応しないようにしてある。

IMEが起動してしまうと、このフラッシュに文字入力が届かなくなるんだよ。IMEが文字入力を受け止めてそこから先に届かなくするから。
だから、IME起動しないように、そういうキーは無効にしているんだ。
もし[変換]キーを使いたいとかあれば、IMEの設定(IMEのプロパティ/全般/設定)を変更して、[変換]キーの役割をIMEと関係ないように変更すれば使えるようになるよ。



関連記事: タイピングFlashで小梅配列・ぶな配列を体験する
http://d.hatena.ne.jp/itouhiro/20100510




初音ミク・アペンド(Miku Append)

初音ミク・アペンド(Miku Append)