2004年05月31日

sapiw.dll プログラミング

今日は時間が使えたので、プログラミングをしてみた。



いままでの記事と趣が違うので、



この記事は読み飛ばしてもらってもかまわない。







最終更新日が5年前のページだが、



Windows95上での音声化ライブラリ使用記というページを見つけた。



このブログで紹介したVE2000の前身のソフトに、



Ve98というのがある。



これは、機能的にはVE2000に及ばないが、



SAPI音声さえあればWinodwsXPでも動く。



このソフトではSAPIを操作するために sapiw.dllというDLLが使われている。



他のプログラムからでも、このDLLを利用するとSAPI音声を簡単に操作することができる。



sapiw.dllの入手先は、VE2000の置いてあるVIPS(リンク切れ)のページ。







「Windows95上での音声化ライブラリ使用記」では、sapiw.dll関連で2つの記事がある。



VisualBasic4.0を利用するものと、Delphi2.0を利用するもの。



このバージョンより新しいものを両方とも持っているが、Delphiの方が好きなので、



こっちをやってみる。







ページの最後の方に、Delphiのプロジェクトファイルなどが置いてあるので、



全部ダウンロードし、コンパイルしてみる。



コンパイルエラー。



調べてみるとuses節にoleautoユニットを並べてあるが、



Delphi3以降でコンパイルする場合はこれをComobjで置き換えないといけない。



書き替えて、難なくコンパイル完了。



EXEファイルができるフォルダにsapiw.dllをコピーしておいて、実行すると、



「こんにちは」としゃべってくれた。







ほんの少し改造してみる。



implementation の次に、次の行を入れて、



uses Clipbrd;



ボタンを押したときの処理のところを次のように書き替える。



procedure TForm1.Button1Click(Sender: TObject);

begin

   if Clipboard.HasFormat(CF_TEXT) then

    SAPI_Speech(1, PChar(Clipboard.AsText) )

end;



他のところも、例えば、ボタンが”こんにちは”のままだから、適当に書き替える。



そして、コンパイル。

そうすると、「簡易クリップボードリーダー」のできあがり。



今回はできるだけ手を加えないような形で紹介したが、sapiwユニットを作って、dllの関数全部そこで宣言しておけば、以後uses節で参照するだけになるので、記述が楽になるだろう。





Delphi 6 Personalは、ここでダウンロードできる。



ただし、利用するにはボーランドのサイトで、使用者登録(無料)が必要。





今度ひまなときに、Dwlphi6以外のフリーのコンパイラを使った、誰でも試せる単純なプログラムを作って、ここで公開してみよう。




posted by takayan at 00:13 | Comment(0) | TrackBack(1) | プログラミング | このブログの読者になる | 更新情報をチェックする

2004年06月02日

VE2000を改良

日曜はsapiw.dllを使ったプログラミングの記事を書いたのだけど、実はあれはVE2000の改造に行き詰まって、気分転換に作ったプログラムだった。VE2000のことは、過去記事27日28日あたり。





そういうわけで、VE2000をその日からいろいろ改造している。開発者のページにソースが置いてあるので、何故WindowsXPでこれが動かないのかをいろいろ調べてみようと思ったのが、今回の理由。やっと昨日になってVE2000がWindowsXPで動かない原因を突き止めた。応急処置的なコードの書換をしてみると、ちゃんとXPで動いた。まだ完全ではないけど、全ページの読み上げをしてくれるし、カーソルキーで読み上げる場所を移動させることもできる。リンクもちゃんと飛んでいく。





まだまだ完成ではないけれど、それなりにできたから作者に連絡を取ってみようかなと思った。それで、VE2000があるVipsのページを開こうとしたら、なんと、完全にページがなくなってしまっていた。月曜までは確かにあったはずなのに・・・・





PC-TalkerによるIE6の簡易読みよりも高度な音声ブラウザなので、それが現在の主流のWindowsXPで使えることはとてもいいことだと思う。でも許可がないと公開はまずいだろうな。とりあえず完成したら、開発元の盲学校に直接連絡を取らないといけないな。




posted by takayan at 01:12 | Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2004年06月08日

VE2000のXP版

10日ぐらい前から、こつこつやってきたVE2000をXPで使えるようにする作業、ようやくできた。通常版とだいたい同じ機能は使えるようになった。まだ、いろいろ改善しなくてはいけない問題や、付け加えたいアイデアもあるけど、一段落。



いろいろ自分でおもしろがって、いろんなページを読ませてみるが、落ちない。これはいい。件のページ内ジャンプが使えるのはやっぱり便利だ。

折角HPR3の操作を調べたから、似たような機能を持たせたいな。テーブル読みは是非とも実現させたい。


posted by takayan at 23:31 | Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年11月16日

Catwalkでこんにちは

先ほどの投稿が終わってから、おもむろにKazusoftさんの

Catawalkのページを改めて眺めてみると、下の方にCatwalkのSDKが公開されていることに気がつきました。



試用版なのでアナウンス無しで変更の可能性があると断り書きがあるのですが、自己責任で使ってよく、CWKManip.dllは再配布可能とありますので、いろいろ遊べそうです。



早速、以前(一年半前に)中村 典嗣さんのページを参考にして作ったテストプログラムを再びCatwalk用に作ってました。



Delphi6Personalで作ってみました。uses節のoleautoをComobjに置き換えて、該当する部分を以下のように書き換えます。





function CatwalkSimpleSpeechA(lpText:LPCSTR;nVoiceByRole:Integer;dwFlags:DWORD;nPriority:Integer): boolean; Stdcall;

external 'CWKManip.dll';



procedure TForm1.Button1Click(Sender: TObject);

begin

CatwalkSimpleSpeechA('こんにちは', 0, 1, 0);

end;





難なく発音してくれました。

定数部分は本格的なプログラミングをする場合は、ちゃんと名前で定義するべきでしょうが、SDK付属のC用のヘッダファイルを眺めて数値におこしました。





なおCatwalkを起動させていないと使えません(スクリーンリーダーモードでなくても可)。そしてSAPI4もしくはSAPI5の日本語音声合成エンジンが組み込まれていなくてはいけません。



ちゃんとCatwalkがしゃべっているのか直接音声エンジンに命令しているのか分かりませんので、Catwalkのメニューから音声の設定を選び、違う音声に切り替えてみたりします。するとCatwalkのシステムがしゃべっていることが分かります。



(気が向いたら開発室の方でまとめページを作ってみます。)

catwalk.jpg


posted by takayan at 01:26 | Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2005年11月18日

Catwalkでこんにちは(続)

CatwalkSDKはいいですね。Catwalkをスクリーンリーダとして使わない場合でも、このSDKを利用したプログラムの音声設定のコントロールパネルのような存在になるわけです。SAPI5にもSAPI4にも対応していますので、かなり使い勝手がいいです。なおこのSDKは仮仕様だそうですので、その点ご注意を。



プログラムの説明の前に。振り返ってみると、このブログは最初の予定よりもかなり専門的なものへと偏ってしまっています。実際にスクリーンリーダーを使用している人たちの参考になるようなページを作りたいという思いもあったのですが、どうしても自分の趣味に走ってきます。このブログのあり方を、いい情報提供ができるようしばらく考えてみます。





では。今回は、wx-Devcppというフリーの開発ソフトで作ってみました。Dev-C++というDelphiで開発されているフリー統合開発環境に、wxWidgetsというこれまたフリーのクロスプラットフォームなウィジェット(いろんなOSで使えるボタンとかメニューとかそういう部品のセットのようなものと考えてください。)を入れて、ボタンやメニューをマウスで簡単に配置しながら作っていける統合開発環境です。VS.NETやDelphiを使った人でしたら、それと同じようなことができる優秀なフリーの開発ソフト、それでなおかつ商用利用可能なものだと言えば分かるでしょう。





以下要点だけを書くとこうです。



wxDevcppを起動し、名前をhelloとしてwxWidgets Frameの新プロジェクトを作ります。開発フォルダをマイドキュメントあたりに指定してウィザードの指示通りすすんでいくと、自動的にCPPファイルやヘッダファイル、フォームの情報が書かれたwxformファイルなどが画面に表示されます。これをいったんsave allですべて保存します。



開発フォルダをエクスプローラで開き、そこにcatwalkSDKのヘッダファイル、ライブラリファイル、そしてDLLをコピーします。本格的な開発をする場合は適切な場所がいいでしょうが、今回はテストなので、同じフォルダに放り込んでしまいます。



Dev-C++の画面に戻って、フォームのCPPファイル(helloFrm.cpp)を開き、ファイルの最初の方に次のインクルードファイルの指定を入れます。



#include "CWKManipDll.h"





次にwxformファイルを開き、そこでボタンを配置します。ボタンのlabelプロパティを「こんにちは」に変更します。ボタンのクリックイベントに対して新しい関数を作成します。WxButton1Clickという感じの名前になるでしょう。この関数の内容を次のようにします。



CatwalkSimpleSpeechA("こんにちは",CWVOICE_READING,SPCHFLAG_NOTSTOP,CWPRIORITY_NORMAL);





ファイルの編集は以上です。次に、ライブラリの登録をします。project optionsウィンドウを出し、parametersシートを開いて、「Add liblary Or object」ボタンを押して、先ほど放り込んだlibファイルを登録します。



これでCatwalkを起動させた環境で、コンパイルし実行すると、「こんにちは」と言ってくれるはずです。

(以上の工程は時間ができたら後で開発室でわかりやすくまとめます。)





Dev-C++には思い入れがあります。3年ほど前から自家製の日本語版を作って自分だけの日本語開発環境を作って遊んでいたことがあります(これも発表していませんでしたけど)。今ではいくつかの場所で日本語化されたDev-C++が公開されているようです。これもいつか開発室のページにまとめる課題にしましょう。



Dev-C++の日本語化関連ページ

DevC++-JPプロジェクト

・Dev-C++の設定(日本語化) ftp://www.cs.tohoku-gakuin.ac.jp/pub/windows/IDE/Dev-C++/How2Setup.html

日本語化パッチ置き場


posted by takayan at 00:58 | Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2006年01月17日

BDS2006購入

Borland Developer Studio 2006 のこと。

ボーランドという会社から出ているプログラムを作るソフト。一般的なのはマイクロソフトが出しているVisualStudioシリーズ。マイクロソフトからも2005年ぎりぎりにVisualStudio2005が出たけど、無料のexpress版があるから、それで遊べばいいやと思って、こっちを買った。製品版はC++Builder2、Delphi5以来だと思う。仕事で使うというわけでもないから、お気軽に新しいDelphiで遊んでみようかというわけでこちらを手に入れた。でも遊ぶにしては高い買い物だw。

さっそく、以前作っていたのを入れてみたらちゃんとビルドできた。つまり、プログラミング言語で記述された設計図からちゃんとパソコン上で動くプログラムができた。うれしい。

ついでに、Dev-C++ 4.9.9.2のソースコードを持ってきて、ビルドしてみた。何も考えずにやってみたので、一発目ではもちろんエラーが出たけど、インクルードファイルやパッケージファイルに、Delphi2005用の記述を追加したら、すんなりできあがった。なんかとてもうれしい。

Dev-C++というのは、このブログで一度書いたけれど、無料で手に入れることができるプログラムを作るソフト。つまり機能の差はあるけれど、今度買ったBDS2006と同じようなことをするソフト。何万円もするソフトを買って無料の似たようなものを組み立ててみて喜んでいるのはなんか変な感じがするんだけど、まあいいか。睡眠時間削って、することじゃないのかもしれないけれど、感無量。



posted by takayan at 17:29 | Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2006年04月09日

Delphi2006 で SkypeAPI を操作する方法

最近中途半端なことばかりしています。今回はSkypeAPIについて調べてみました。普通ならC++なんでしょうが、Delphiでできるかどうかやってみました。



参考にしたのは、http://itpro.nikkeibp.co.jp/サンデー・プログラマのためのSkype入門の連載。会員登録しないと全部読めないかもしれません。



これによると、Winodwsメッセージを使っているSkypeAPIを直接操作するよりも、ActiveSというラッパーで操作した方が楽なのでそうで、それをインストールしました。



ActiveSが配布されているのは、KhaosLabs。メニューのProductsからたどっていって入手し、インストールします。インストールすると、ActiveXコンポーネントとして登録されます。C#で利用する場合は上記の連載にしたがってください。



Delphi2006で使えないかと思っていろいろ調べてみました。最終的にツールパレットの中にこのコンポーネントをいれなくてはいけません。いままではパッケージライブラリ(*.bpl)を取り込んだことははあるのですが、今回は何もないので苦労しました。これが最善なのかは分かりませんが、とりあえずできたので、その方法を残しておきます。



新規作成でパッケージを作ります。プロジェクトマネージャーにProject1.bplというファルが現れるので、これをいったん保存します。適当な場所にフォルダを作って保存します。名前はActiveSとしておきます。これでプロジェクトマネージャーに表示されていたファイルがActiveS.bplになります。



次にメニューバーのコンポーネントメニュー中のコンポーネントのインストールを選びます。コンポーネントの種類を「ActiveXコントロールの取り込み」として次へボタンを押します。しばらくすると登録されたActiveXコントロールの一覧が表示されるので、その中からActiveSを選択し、次へボタンを押します。コンポーネントの名前などを設定する画面が現れるので、パレットページ名をActiveSにしておきます。他の名前でもかまいませんが、この名前がツールパレットの分類名になります。コンポーネントラッパーの作成はチェックでいいと思います(よくわかりませんが)。次へボタンを押して、ユニットの作成チェックして、完了ボタンを押します。このファイルをいったん先ほどのプロジェクトを保存した場所に保存します。そのあとプロジェクトマネージャーのActiveS.bplの上で右クリックでメニューを出し、追加を選びます。出てきた参照ボタンを押したあと、先のSKYPEAPILib_TLB.pasを選んで、追加します。プロジェクトマネージャーのActiveS.bplの上で右クリックをし、メニューの中にあるインストールを選びます。これで自動的にコンパイルされ、コンポーネントがインストールされます。新しいコンポーネントはツールパレットの一番下に追加されます。



以後、フォームを作るとき、ツールパレットからActiveSコンポーネントを選ぶことができるようになります。あとは、上記のITProの連載なりを参考にすればプログラムが作れます。



「第2回 ActiveS COM Wrapperを使ってみる」の4ページ目のC#のプログラムはこんな感じになるでしょう。フォームへのコンポーネントの配置、オブジェクトインスペクタ上でラベル名の付け替え、イベントの割り当てなどの作業が必要になります。




unit skypetest;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,SKYPEAPILib_TLB, StdCtrls, OleCtrls,TypInfo, OleServer;

type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Access1: TAccess;
Conversion1: TConversion;
procedure Access1APIStatusChanged(ASender: TObject; Status: TOleEnum);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;


implementation

{$R *.dfm}


procedure TForm1.Access1APIStatusChanged(ASender: TObject; Status: TOleEnum);
begin
if Status = apiAttachSuccess then
Label2.Caption := Conversion1.SkypeOnlineStatusAsText(Access1.CurrentUserStatus)
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Access1.Connect;
end;

end.



posted by takayan at 02:42 | Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2006年08月10日

Speech.pasでプログラミング

Delphiで、音声合成のプログラムを作ろうといろいろ探してみると、PROJECT JEDIAPI Library Converting APIsに、sapi.zipというファイルが置いてあった。ライセンスはMPL1.1



このZIPファイルは、Microsoft Speech APIのインターフェイスとなるspeech.pasが入っている。このSAPI(Speech API)は、4.0のみ対応。いまさらSAPI4.0というのもあれだけど、簡単にできそうなのでしばらく、これを使って遊んでみよう。



日本語SAPI4.0対応音声合成エンジンが既にインストールされている必要がある。スクリーンリーダやホームページリーダがインストールされていればまず大丈夫。持っていなければ、ドキュメントトーカを購入するという方法もある。



資料。参考になるのは、このZIPファイル内のDEMOSフォルダの中のサンプルプログラム。そしてマイクロソフトのSAPI4.0のSDKをインストールして手に入るドキュメント(通常のインストールでは C:/Program Files/Microsoft Speech SDK/Document)。どちらにしても英語の文章を読まないといけない。



このspeech.pasを使うときは、作っているプロジェクトのフォルダの中に放り込んで、uses節にspeechを追加する。



まず、作ってみたのは、自分のパソコンに入っているSAPI4対応音声合成エンジンを調べるプログラム。単に名前を表示するだけ。今回は(スクリーンリーダーを使わないならば)何もしゃべらない。このプログラムの実質はFormCreateプロシージャ内のコード。マイクロソフトのSAPI4のCOMのドキュメントをそのまま参考にして、Delphiでも作っていけそう。





DelphiのバージョンはBorland Developer Studio 2006。






unit unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, Speech, StdCtrls, Comobj, ActiveX, ComCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
RichEdit1: TRichEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
aTTSEnum : ITTSEnum;
public
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
NumFound : DWord;
ModeInfo : TTSModeInfo;
begin

OleCheck(CoCreateInstance(CLSID_TTSEnumerator, Nil, CLSCTX_ALL, IID_ITTSEnum, aTTSEnum));
OleCheck(aTTSEnum.Reset);
OleCheck(aTTSEnum.Next(1, ModeInfo, @NumFound));

RichEdit1.Lines.Clear;
While NumFound > 0 do
begin
RichEdit1.Lines.Add(String(ModeInfo.szModeName));
OleCheck(aTTSEnum.Next(1, ModeInfo, @NumFound));
end;
RichEdit1.SelStart := 0;
end;

end.








posted by takayan at 23:32 | Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2007年06月21日

CS3がもうすぐ届く。

いよいよ明日22日にAdobe CS3が発売される。
これに合わせて昨日ショップから22日到着予定とのメールが届いた。
僕はいままでフォトショップもイラストレータも買ったことなかった。今回はいろいろ考えて買ってみることにした。
素直に製品版を買うなんてことは、いくらなんでも高すぎてできないけれど、先年アドビに買収されたマクロメディアの製品をもっているので、アップグレード版を予約購入できた。


今回のCS3では、とても多くの製品が発売される。

単品製品が11種
ADOBE PHOTOSHOP CS3
ADOBE PHOTOSHOP CS3 EXTENDED
ADOBE ILLUSTRATOR CS3
ADOBE INDESIGN CS3
ADOBE DREAMWEAVER CS3
ADOBE FLASH CS3 PROFESSIONAL
ADOBE FIREWORKS CS3
ADOBE CONTRIBUTE CS3
ADOBE PREMIERE PRO CS3
ADOBE AFTER EFFECTS CS3 PROFESSIONAL
ADOBE SOUNDBOOTH CS3

統合製品が6種
ADOBE CREATIVE SUITE 3 DESIGN PREMIUM
ADOBE CREATIVE SUITE 3 DESIGN STANDARD
ADOBE CREATIVE SUITE 3 WEB PREMIUM
ADOBE CREATIVE SUITE 3 WEB STANDARD
ADOBE CREATIVE SUITE 3 PRODUCTION PREMIUM
ADOBE CREATIVE SUITE 3 MASTER COLLECTION
※下記「早わかり表」より

そして、それぞれにWindows版とMac版がある。
そしてさらにそれぞれにアップグレードするための製品もある。
旧マクロメディアのFREE HANDからイラストレータに乗り換えるための製品などもある。
その上、ADOBEのオンラインストアでは、日本語か英語の選択肢まである。


スイートの詳しい構成内容は、次のページで確認。ピエロ怖い。
Adobe - 製品: Adobe CS3

そして、アップグレードの早見表がこれ。PDF注意。
アップグレード早わかり表

このページを見ながらいろいろ悩んだ。

僕がもっているのは、STUDIO MX 2004。
これからアップグレードできるのは、DESIGN STANDARD以外の5つの統合製品。

ホームページを作るために買うのだから、三つに絞られる。でも金欠の僕にはMASTER COLLECTIONは論外なので、WEB STANDARDかWEB PREMIUMのどちらかということになる。普通ならホームページを作るソフトがほしいから、WEB STANDARDなんだけど、WEB PREMIUMに入っているフォトショップとイラストレータも捨てがたい。アクロバットプロもあったらあったでうれしい。

う〜ん悩む。金はないんだけれど、この二つとアクロバットプロが、6万の差額で手にはいるというのはとても魅力的。足りないものを単品で買い足すと28万にもなるんだ。でもそもそも将来買い足すってことがあるのか。だまされるな、これは22万円の得ではなく、6万円の損なのではないのか。

でもね。結局この誘惑には勝てなかった。4年ぶりの購入だから、この出費は許容範囲だと自分を納得させている。11万の無駄にならないようにと自分を戒めている。

待ち遠しい。


posted by takayan at 01:41 | Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2007年06月22日

CS3は届いたが、、、

予定通りに、CREATIVE SUITE 3 WEB PREMIUMアップグレード版、到着。
でもシステム要件ではねられた。
RAMは1G以上必要だった。
今からじゃメモリ買いに行けないし、明日までおあずけ。
英語版FlashCS3の体験版がちゃんと動いていたから、全然考えもしなかった。単品とは要件が違うのね。


posted by takayan at 20:06 | Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする