スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【同じタグを付けた記事の一覧】

Windows の音声認識を JavaScript で(HTA 編)

2012年02月29日(水)01時06分

JavaScript に GUI を

前回までに「基礎編」「録音再生編」「WAVE ファイル入力編」と、Windows の音声認識機能を JavaScript から使う方法について書いてきたわけですが、これらは音声認識の結果等をコンソール(いわゆる DOS 画面)に表示させていました。
それではいろいろ使いにくいため、もう少し見栄えと使いやすさを向上させるべく、GUI をつけてみましょう、というのが今回のお話です。
ということで、今回はタイトルこそ「Windows の音声認識を JavaScript で」となってはいますが、本筋は「音声認識」から多少外れている点はあります。

サンプルの内容

今回のサンプルは、できることは「基礎編」の「DictJS00.js」とほぼ同じで、マイクから入力された音声を文字列化して表示、を繰り返します。
ただ、これまでのようなコンソール画面ではなく、GUI でボタン等を使用して操作できるようになっています。

サンプルの実行

DictHTA00.txt ← 矢印左側の文字の上で右クリックし、「対象をファイルに保存(A)…」して保存します。
保存した TEXT ファイルを右クリックし「プロパティ」を見たときに、「セキュリティ:このファイルは他のコンピュータから取得したものです。このコンピュータを保護するため、このファイルへのアクセスはブロックされる可能性があります。」と書かれている場合は「ブロックの解除」をしてください(しなくても使えますが)。
保存した「DictHTA00.txt」の拡張子(末尾の3文字)を「txt」から「hta」に変更し「DictHTA00.hta」とします。

DictHTA00 

HTA とは

HTA は「HTML Applications」のことで、サンプル「DictHTA00.txt」を見ていただければわかりますが、中身は単なる HTML ファイルです。
その拡張子を「.html」や「.htm」から「.hta」に変更することで、通常のブラウザではなく、「mshta.exe」という HTA ファイル用のアプリケーションに読み込まれ、実行されるようになります。
そして、何のために HTA にするのか?ということですが、まず、基本的に HTML ですので、ボタンやテキストボックスといった、各種コントロールが利用でき、そこに JavaScript を組み込むことができます。
つまり、JavaScript で作ったプログラムに「マウスによるグラフィカルな操作」を比較的手軽につけることができるわけです。

HTA の利点と難点

ただ、それだけであれば、別に HTML のままでもかまわないわけですが、わざわざ「HTA」にする理由として、HTA ではセキュリティ上の制限が大幅に緩和される、ということがあります。
例えば、通常の HTML では、PC に保存されたファイルを読み込んだり書き換えたりはできませんが、HTA ではこれが可能です。
もっとも、今回のサンプル(DictHTA00.txt)程度であれば、実行時に「ActiveX コントロールの使用許可の確認ダイアログ」が出るか出ないかの差ぐらいではありますが。
そのかわり、というわけでもないのですが、「簡単に作れて機能が強力」といった便利な特徴から、HTA はコンピュータウイルスに使われたりすることも多く、そのため、ウイルス対策ソフトなどにブロックされたり、企業などセキュリティに厳しいところでは、「mshta.exe」自体が動作しないように設定してあったりと、環境によっては使えないこともあり得ます。

「WScript.CreateObject」と「new ActiveXObject」

サンプルの内容についての説明ですが、HTML 部については、普通に単なる HTML ですので、説明は端折ります。
また、JavaScript 部についても、基本的な流れは「基礎編」と同じとなります。
ただし、各種オブジェクトの生成を、これまでの「WScript.CreateObject」ではなく、「new ActiveXObject」で行う、という違いがあります。

イベントハンドラ

その変更に伴い、イベントハンドラ(音声認識完了時に呼び出される関数)の登録の方法も変わります。
これまでの「WScript.CreateObject」によるオブジェクト生成では、その第二引数で「"Recog_"」のような文字列を指定し、それを頭に付けた関数(例えば「Recog_Recognition」)を定義すれば、それがイベントハンドラとして生成時に自動で登録されました。
しかし、「new ActiveXObject」では、この第二引数での修飾子指定が使えません。
が、HTA(HTML)では、「オブジェクト名::イベント名」な関数名を定義すれば、それがそのオブジェクトのイベントとして登録されます。
つまり、音声認識オブジェクト「RecoContextObj」の認識完了イベント「Recognition」で何かの処理をしたい場合、「RecoContextObj::Recognition」という関数を記述すればいいわけです。

「head」と「body」に分割する

ただし、これを実現するためには、「RecoContextObj::Recognition」関数が評価される時点で、「RecoContextObj」オブジェクトが確実に存在する必要があります。
これは、単に「RecoContextObj」オブジェクトの生成行を「RecoContextObj::Recognition」関数の定義行の前に書く、というような話ではありません。
というのも、同一スコープ内のオブジェクトは、理論上同時評価となるようで、「前に書いた or 後に書いた」というようなことで上下関係を作ることはできないようなのです。
しかし、幸いなことにHTA(HTML)には「head」部分と「body」部分があり、「head」部は「body」部より先に評価・実行されることになります。
これを利用し、「head」部で「RecoContextObj」オブジェクトを生成、「body」部で「RecoContextObj::Recognition」関数を定義、とすることで、この問題を解決することができます。

プロパティ変更時は一時停止

前回までのサンプルでは、プロファイルやマイクの設定は、起動時の一回のみでした。
今回は認識開始後にも変更可能になっています。
これらのプロパティ変更は、認識処理実行中に行うとエラーになるため、「RecognizerObj.State=0;」して一時的に処理を停止し、プロパティ再設定後に、「RecognizerObj.State=1;」で改めて認識を開始するようにしてあります。

関連記事

【同じタグを付けた記事の一覧】
プログラミング JavaScript 音声技術 音声認識

スポンサーサイト

コメントの投稿

非公開コメント

最新記事
最新コメント
Amazonおまかせリンク
カテゴリ
タグクラウド
Amazonお買い得ウィジェット
カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
月別アーカイブ
プロフィール

電脳太助

Author:電脳太助
Website:電脳スピーチ web

RSSリンクの表示
メールフォーム

名前:
メール:
件名:
本文:

サイト内検索
Ads by Google
FC2アクセスランキング
Ads by Google
FC2拍手ランキング
ユーザータグ

音楽管理(66)
ポータブル(57)
ソフト紹介(44)
プログラミング(42)
音声技術(41)
自作ソフト(35)
サイト運営(32)
FC2(31)
ブログ(30)
iTunes(27)
Windows(25)
LISMO(24)
音声合成(23)
音声認識(22)
x-アプリ(22)
電子ブック(22)
eラーニング(20)
バックアップ(19)
語学学習(19)
foobar2000(18)
ソースコード(18)
WindowsLiveWriter(15)
画像管理(15)
C++(14)
アフィリエイト(10)
DnspTools(10)
fi-6130(9)
FLAC(9)
JavaScript(9)
ウォークマン(9)
英語音読学習計画(8)
Gracenote(8)
Prolog(8)
ベクター(8)
雑記(8)
CodeBlocks(7)
SyntaxHighlighter(7)
TraConv(7)
spcbght(7)
wxWidgets(7)
VirtualBox(6)
W63CA(6)
DCP-J552N(6)
WinRT(6)
WindowsLiveMesh(6)
iGoinLM(6)
英語発音矯正実験(6)
ExactAudioCopy(6)
MP3Gain(6)
LAME(5)
音楽技術(5)
Mery(5)
楽器演奏(5)
GalateaTalk(4)
nLite(4)
WindowsLiveSkyDrive(4)
ホームページ(4)
GalateaProject(4)
MIDI(4)
LLVM(4)
PC-98(3)
カウンター(3)
AACGain(3)
iTCDini(3)
OverCutChecker(3)
拍手(3)
PK-513L(3)
UniversalExtractor(3)
アクセスランキング(3)
ImageCompositeEditor(2)
アクセス解析(2)
OCR(2)
qtaacenc(2)
資格試験(1)
AquesTalk(1)
AquesCmdDl(1)

FC2アクセスランキング
最新トラックバック
アクセスランキング
[ジャンルランキング]
コンピュータ
106位
アクセスランキングを見る>>

[サブジャンルランキング]
ソフトウェア
11位
アクセスランキングを見る>>
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。