SAPI5をBorland C++ Compilerで使う
bccでSAPI5を使うにはbccSDKを使うのが簡単です。注意点はspdebug.hで発生する多重定義エラーの処理とSetNotifyWindowMessageなどいくつかの場所で巧く動作しない点です。
多重定義エラーはヘッダーの一番上の
#pragma onceをコメントアウトして
#ifndef SPDebug_h
#define SPDebug_h
//...
#endifと置き換えます。
Notifyでエラーが出る場合はWaitUntilDoneとタイマーを使って対処します。
BCCではSAPI5は向いてないのかもしれません。
2010.7.19
試行錯誤すること2年9ヶ月、bcc でも SAPI5 が使えることがわかりました。(´・ω;`)
SetIntarest や SetNotifyWindowMessage には問題がありませんでした。
SPFEI というマクロに問題がありました。
なぜ発見できたかというと SetInterest で例外を捕らえることができるのがわかったからです。
以下が BCC で例外が発生するコードです。
どこに問題があるかわかりますか?
問題は (1ui64 << SPEI_RESERVED2) などにありました。
VC++ では大丈夫ですが、BCC ではこの記述だと32ビットを超えた値が無効になってしまうようなのです。
ちなみにコンパイラは警告を出しませんでした。
変わりに、このように対処したらうまくいきました。
ULONGLONG ev = 0x0000000200000000ui64 | SPFEI(SPEI_END_INPUT_STREAM) | SPFEI(SPEI_WORD_BOUNDARY);
現在は VC++ でコンパイルしているので、もう関係ないのですが。。。
多重定義エラーはヘッダーの一番上の
#pragma onceをコメントアウトして
#ifndef SPDebug_h
#define SPDebug_h
//...
#endifと置き換えます。
Notifyでエラーが出る場合はWaitUntilDoneとタイマーを使って対処します。
BCCではSAPI5は向いてないのかもしれません。
2010.7.19
試行錯誤すること2年9ヶ月、bcc でも SAPI5 が使えることがわかりました。(´・ω;`)
SetIntarest や SetNotifyWindowMessage には問題がありませんでした。
SPFEI というマクロに問題がありました。
なぜ発見できたかというと SetInterest で例外を捕らえることができるのがわかったからです。
以下が BCC で例外が発生するコードです。
//これならいける! ULONGLONG ev = SPFEI_ALL_EVENTS
ULONGLONG ev = SPFEI(SPEI_END_INPUT_STREAM) | SPFEI(SPEI_WORD_BOUNDARY);
try {
_com_util::CheckError(m_cpVoice->SetInterest(ev, ev));
}
catch (_com_error &err) {
// ここで「パラメータが間違っています。」と例外がでるので
// sapi.h に定義されている SPFEI を調べると下にあるコードが見つかります。
MB(err.ErrorMessage());
}
enum SPEVENTENUM
{ SPEI_UNDEFINED = 0,
SPEI_START_INPUT_STREAM = 1,
SPEI_END_INPUT_STREAM = 2,
SPEI_VOICE_CHANGE = 3,
SPEI_TTS_BOOKMARK = 4,
SPEI_WORD_BOUNDARY = 5,
SPEI_PHONEME = 6,
SPEI_SENTENCE_BOUNDARY = 7,
SPEI_VISEME = 8,
SPEI_TTS_AUDIO_LEVEL = 9,
....
SPEI_RESERVED1 = 30,
SPEI_RESERVED2 = 33,
SPEI_RESERVED3 = 63
} SPEVENTENUM;
#define SPFEI_FLAGCHECK ( (1ui64 << SPEI_RESERVED1) | (1ui64 << SPEI_RESERVED2) )
#define SPFEI_ALL_TTS_EVENTS (0x000000000000FFFEui64 | SPFEI_FLAGCHECK)
#define SPFEI_ALL_SR_EVENTS (0x001FFFFC00000000ui64 | SPFEI_FLAGCHECK)
#define SPFEI_ALL_EVENTS 0xEFFFFFFFFFFFFFFFui64
#define SPFEI(SPEI_ord) ((1ui64 << SPEI_ord) | SPFEI_FLAGCHECK)
どこに問題があるかわかりますか?
問題は (1ui64 << SPEI_RESERVED2) などにありました。
VC++ では大丈夫ですが、BCC ではこの記述だと32ビットを超えた値が無効になってしまうようなのです。
ちなみにコンパイラは警告を出しませんでした。
変わりに、このように対処したらうまくいきました。
ULONGLONG ev = 0x0000000200000000ui64 | SPFEI(SPEI_END_INPUT_STREAM) | SPFEI(SPEI_WORD_BOUNDARY);
現在は VC++ でコンパイルしているので、もう関係ないのですが。。。
Text To Wav ★ ver1.31
要望がありました下記の二つを追加しました。
Audioファイルの保存先を選べるようにしました。
実行ファイルにテキストをドラッグ&ドロップで変換。
そのほかにもいろいろ付け足しました。
くわしくはリンクのまとめを見てください。
まだまだ要望お待ちしてます。
Audioファイルの保存先を選べるようにしました。
実行ファイルにテキストをドラッグ&ドロップで変換。
そのほかにもいろいろ付け足しました。
くわしくはリンクのまとめを見てください。
まだまだ要望お待ちしてます。
100Hit今日この頃
今日100Hitになりました。
9月9日にブログを作ってちょうど一ヶ月です。
ありがとうございます。
最近はText To Wav ★に新しい機能を付けようかなとか考えています。
例えば、ディスプレイを消したままですべての操作ができたらなぁとか、
html の解析でもっと視覚的なイメージがわくようにしたいとか。
でも誰も、機能を追加してほしいとか言わないので
みんな満足しているのかなとか思ったり。
私もこのソフトを使って英語 (主にプログラミング) の音声学習をしたりしているんですが、こうした使いかた以外にどんなことができるのか
こんなことを考えている今日この頃です。
9月9日にブログを作ってちょうど一ヶ月です。
ありがとうございます。
最近はText To Wav ★に新しい機能を付けようかなとか考えています。
例えば、ディスプレイを消したままですべての操作ができたらなぁとか、
html の解析でもっと視覚的なイメージがわくようにしたいとか。
でも誰も、機能を追加してほしいとか言わないので
みんな満足しているのかなとか思ったり。
私もこのソフトを使って英語 (主にプログラミング) の音声学習をしたりしているんですが、こうした使いかた以外にどんなことができるのか
こんなことを考えている今日この頃です。