2006年04月03日

JNI で Catwalk SDK を使ってみる。

OpenOffice.orgを音声で使えるようにするためにいろいろ調べてました。Java Access Bridgeを使うらしいというのは分かったのですが、ちょっと難しそうなので、今回はあきらめて、JNIで遊んでみることにしました。



JNIはJAVAからC++で作ったDLLを利用する技術です。これを使ってWindowsの音声エンジンを呼び出してみます。音声関係のSDKはいろいろあるのですが、今のところ無料で誰でも手っ取り早く使えるものと言えば、以前ここでも紹介したCatwalk SDKが思いつきます。SDKはKazusoftさんのCatwalkページの下の方に置いてあります。



JNIについては、JavaでHello WorldのJNI編を参考にしました。JAVAの開発環境の設定なども詳しく書いてあります。



CatwalkSDKを使うためには、上記のページにあるサンプルのかわりに下の二つのファイルを使います。



・CatWalkJNI.java


public class CatWalkJNI {

static {
// ライブラリのロード
System.loadLibrary("CatWalkJNI");
}

// ネイティブメソッド宣言
public native void sayHello();

public static void main(String[] args) {

CatWalkJNI catwalk = new CatWalkJNI();

// メソッド実行
catwalk.sayHello();
}
}


これを、JAVACコマンドでclassファイルを作って、JAVAHコマンドでC++のヘッダを作ります。この辺も「JavaでHelloWorld!」さんのページの手順通りです。



・CatWalkJNI.cpp


#include "CatWalkJNI.h"
#include "CTWKManipDll.h"

JNIEXPORT void JNICALL Java_CatWalkJNI_sayHello(JNIEnv *env, jobject obj ){
CatwalkSimpleSpeechA("Catwalkでこんにちわ",
CWVOICE_READING,0,CWPRIORITY_NORMAL);
}




このC++のソースをDLLにします。参考にしたページでは、コンパイラにbccを使ってあったんですが、それだとうまくいかなかったので、調整するのも面倒なのでVisualC++6でコンパイルしました。



単純なサンプルなので、しゃべる文字列は固定してます。これを改造していろんな文字列を渡せばそれを喋るようなプログラムは簡単にできるでしょう。ただしJAVAの文字列はシフトJISではないので、JAVA側かC++側のどちらかで変換する必要があります。




posted by takayan at 02:07 | Comment(0) | TrackBack(0) | 各種ブラウザの設定・操作 | このブログの読者になる | 更新情報をチェックする

2006年04月06日

StarSuiteSDKの日本語版

先日は、Java Access Bridge for Microsoft Windows さえ分かればいいように書いていたが、それはちょっと勘違いみたいでした。これはこれで重要なものだけとそれだけじゃない。今いろいろ文書を読みまくっています。

OpenOffice.org 2.0の Developer's Guideを読み込もうと思ったけど、英語なのでつらかった。探してみると日本語版も出てますね。OpenOffice.orgユーザーのためのMicrosoft Office互換性研究室のニュース記事Developer's Guide 日本語版で書いてありました。



http://www.sun.com/software/star/starsuite/sdk/index.jsp



ここに日本向けのSDKが置いてあり、その中に日本語化された文書が入っています。全部が全部日本語化されているわけではありませんが、Developer's Guideは日本語化されています。ただし、ダウンロードするにはIDを作らないといけないです。このSDKはStar Suite8用ですが、文書の内容は一緒のようです。



英語ですが、現行のOpenOffice.org用のSDKは、次の場所にあります。

http://download.openoffice.org/2.0.2/sdk.html



よくみてみたら、Delphi用の文書やサンプルも入っています。でもリソースファイルがおかしくて使えない。


posted by takayan at 23:22 | 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年04月11日

タイムマシン

日曜は日曜洋画劇場で「タイムマシン」を見た。この映画、goo映画のレビューでもあまりよくない。でも僕にとってはなかなかよかった。goo映画でレビュー46点のキャシャーンも名作だと感じる人間なので僕は一般的な感性ではないんだろう。そんなことはどうでもいいや。

以下ネタバレありの妄想。

最後、主人公の友人が帽子を投げ捨てるシーンがある。これは何か分からなかった。映画の最初のほうを見ていなかったからだったのだが、もう一度見直したら意味が分かった。冒頭で山高帽のことを主人公が話していた。ラストなかなかいいシーンじゃないですか。最後主人公のいる未来のシーンで終わればいいのに、わざわざ主人公が姿を消した当時の19世紀末に戻るのはどうしてかなと思っていたら、そういうことだったんだ。過去を変えることはできないけれど、今は変えることができる。ありきたりなテーマだけど、これがこの映画の答えだろう。友人の最後の行動は、今を変えることは誰にでもできるということの静かな象徴なんだな。

時間旅行物の物語で矛盾やご都合主義がないものなんてありえない。時間旅行自体がありえないのだから仕方がない。歴史を変えたら写真の中から姿が消えるとか、腕時計が逆回転するとか、荒唐無稽なわかりやすさも大切だ。そういうことを言い出したらきりがない。

恋人の死という絶望的な過去を変えるために彼はタイムマシンを開発した。しかしこの事実がタイムマシンを作らせた原動力である以上、恋人の死という事実を変えることができなくなってしまった。それ以外の何事も彼にタイムマシンを作らせる力を与えないからだ。逆に言うと、恋人の死以外の過去の出来事ならば、変えることはできるかもしれない。事実彼は恋人を別な場所に連れ出し強盗に殺されるという危険から回避させることができた。それでもまた別な出来事が起き恋人は死んでしまう。タイムマシンを使っているという事実とその原動力となった恋人の死という事実、この二つの出来事の因果はタイムマシンを使っては絶対に変えることはできない。悲劇のジレンマ。未来の頭脳担当の人類ウーバーが言っているのはそういうこと。それが主人公が追い求めた答えであり、この物語で採用されたタイムトラベルの設定。

ウーバーが自分のような存在はいくらでもいると言ったのだから、あそこで主人公がタイムマシンを爆発させてあのコロニーを壊してしまっても、モーロック、エロイ、ウーバーから成るコロニーはいくつも存在している。主人公が6億年先に見た未来はやがて現実になってしまうのだろうか。6億年先の未来を見てしまった彼には、エロイたちと過ごした時代はまぎれもなく過去である。その過去は変えられるのだろうか。

ウーバーはエロイたちに同じ悪夢を見せることで、モーロックと戦うことを忌避するように仕向けていた。しかしこの主人公のいるコロニーにはもうウーバーはいない。代わりに主人公と、人類の全ての知識を蓄えたヴァーチャル黒人がいる。この知識を道具に、ウーバーに支配されていないエロイは団結し、地球上に散在するこの支配体制を崩壊させていく。そういう彼らの未来を望みたい。


posted by takayan at 02:04 | Comment(0) | TrackBack(0) | 映画・ドラマ | このブログの読者になる | 更新情報をチェックする

2006年04月20日

Mac mini

最近投稿していたかった理由は、ずばりマックミニで遊んでいたからです。以前から手に入れたいなという気持ちはあったのですが、Intel Mac miniが発表されてから想いが募って仕方がなかったのですが、Boot Campで踏ん切りがついてとうとう買ってしまいました。



このブログのタイトルはWindows機という意味を込めてのピーシーだったのですが、これからはMacも込みで書いていきます。



Mac OS XにはVoiceOverというスクリーンリーダーが最初から組み込まれています。残念ながら英語しかしゃべらないのですが、なかなか面白いです。Macは簡単に主要言語を切り替えられるので、英語が多少わかる人は、英語版のOSXに切り替えて試してみてください。いくつかの音声が用意されていますが、おすすめの音声はVickiです。





関連のショートカットキー

・VoiceOverの切り替え 

コマンド+F5キー

(ウィンドウズのキーボードで代用しているときは、Win+F5)



・VoiceOver Utilityの呼び出し 設定

コントロール+オプション+F8(Ctrl+Alt+F8)



・VoiceOverのヘルプ

コントロール+オプション+? (Ctrl+Alt+Shift+/)







アップルサイト内のVoiceOverについてのヘルプページ

http://docs.info.apple.com/article.html?path=Mac/10.4/jp/mh1010.html


posted by takayan at 01:09 | Comment(0) | TrackBack(0) | 音声合成 | このブログの読者になる | 更新情報をチェックする

2006年04月22日

ダニエル・ジョンストン

今日はゆっくりできたので、たまっているポッドキャストを聞いていた。隙間の時間に聞くのがポッドキャストかもしれないけれど、最近なかなか聞けなかった。そこで聞いたのが、「ダニエル・ジョンストン」のこと。

番組は4/18(火)の「ストリーム」コラムの花道 映画評論家「町山智浩」氏の話。最近アメリカで公開された「悪魔とダニエル・ジョンストン THE DEVIL AND DANIEL JOHNSTON」の話題。一部の人にはとても有名な人らしい。ぼくはこれで初めて知ったのだけど。

アドレスはここ。リンクをクリックするとまだ内容は聞ける。
http://tbs954.cocolog-nifty.com/st/2006/04/418_ca49.html

なんかすごくいい。番組の中で彼のことをイノセンスといってるのだけど、ほんとiTMSで声をきくとそんな感じ。壮絶な精神障害の人だけど。ダビングを知らないくだりは、純粋さの極みだ。しばらくこのポッドキャスト消せないや。

ポッドキャステキングの中では、著作権の問題で聞くことができない「キングコング」の曲はiTunesのiTMSでちょっと視聴できる。検索語はDaniel Johnston。もちろんその他の曲も。

オフィシャルサイトもあってアドレスはここ。
http://www.hihowareyou.com/

町山氏のブログ
http://d.hatena.ne.jp/TomoMachi/20060414


posted by takayan at 23:59 | Comment(0) | TrackBack(0) | 映画・ドラマ | このブログの読者になる | 更新情報をチェックする

2006年04月30日

サーチエイド バージョンアップ

とても便利な音読対応ネット検索補助ツール「サーチエイド」が4月26日付で0.96にバージョンアップされました。

桂木範・オンラインソフト工房





サーチエイドにはメインメニュー7に更新チェック&自動アップデート機能がありますが、今回はこのバージョンアップ機能の不具合修正だそうです。そのためこの便利なアップデート機能が利用できませんので、上記サイトからの手動でのダウンロード及び実行が必要です。このことはサーチエイドのメインメニュー8のおしらせで知ることができますが、気づかれていない方も多いと思います。



今回のバージョンアップでは、上記のバグ修正の他、テキスト読み書きの容量制限の撤廃と、検索に時間がかかるサイトでなるべく検索失敗にならないようにするための修正が行われたようです。詳しくはサーチエイドのメインメニュー8のお知らせを読んでください。



・桂木範・オンラインソフト工房

http://homepage2.nifty.com/oss/


posted by takayan at 20:54 | Comment(0) | TrackBack(0) | 各種ブラウザの設定・操作 | このブログの読者になる | 更新情報をチェックする