音声読み上げ機能について質問させて下さい。

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 音声読み上げ機能について質問させて下さい。

英語の読み上げ

by あおぞら » 2006年9月27日(水) 23:03

お世話様です。
エラーになりにくいように、配列のサイズを大きくして使っております。

あと少し付け加えるだけで、他の言語も使えるはずと情報収集中。

読み上げ

by 西野孝雄 » 2006年9月24日(日) 17:29

私もこれ試しましたが、バグがありませんか?
NoWestさんの投稿も参考にして、ボタン部分を以下のようなコードにしましたが
デバッグ実行にすると、プロジェクト名.abpの
DispatchMessage(msgMain)の所でアクセス違反がおきます。
リリースコンパイルでは問題なく読んでくれるけど。

os xp home sp2
AB 4.13

コード: 全て選択

Sub MainWnd_CommandButton1_Click()

	Dim buf[255] As WCHAR

	GetWindowTextW(GetDlgItem(hMainWnd,EditBox1),buf,256)

	If MakeStr(buf) = "" Then
		MessageBox(0,"文字が入力されてません!","エラー",MB_ICONSTOP or MB_TOPMOST)
		Exit Sub
	End If

	VText->StopSpeaking()
	VText->Speak(buf)

End Sub
>あおぞらさん
日本語、英語以外の言語や、音声スピード、高さなんかも調整できるはずだと思う
(他の音声読み上げソフトがそうなってるので)けど、私もやり方は分かりません。
情報が少ないですよね。

英語の読み上げ

by あおぞら » 2006年9月24日(日) 14:17

お世話様です。

クリップボード経由や一時ファイルを使って、外部ソフトに英語や日本語を読ませておりましたが、お蔭様で単独で日本語を喋らせる事ができそうです。ありがとうございました。

英語も読ませたいと捜索中ですが、まだまだ、たどりつけそうもありません。

対処方法をご伝授頂ければ幸いです。

Re:テキスト読み上げについて

by M.K » 2006年3月20日(月) 18:40

こんばんは、

うちもエディットボックスの内容をしゃべらせることが出来ましたので報告しておきます。

>今後とも宜しくお願いします。

こちらこそ、よろしくお願いします。

Re:テキスト読み上げについて

by NoWest » 2006年3月20日(月) 18:38

あんまり、深く考えないで書き込んでいますが、

わざわざ、ANCIIコードからUnicodeへ変換しなくても
SendMessageWでエディットボックスから文字列を取得すれば良いのではないでしょうか?

試してないんで何とも言えませんが、多分直接Unicodeを取得できると思います。

だからといってWindows95,98はうまく動く保障は無いですが、、、


P.S.
いい加減な情報を書き込んでしまったので
先ほど実験しましたところ、Unicodeでの取得を確認しました。
あと、SendMessageWよりGetWindowTextWの方が楽ですね。

コード: 全て選択


Declare Function GetWindowTextW Lib "user32" (hWnd As HWND, lpString As *WCHAR, nMaxCount As Long) As Long


Dim buf[255] As WCHAR
GetWindowTextW(GetDlgItem(hMainWnd,EditBox1),buf,256)

Re:テキスト読み上げについて

by 地武太地部右衛門 » 2006年3月20日(月) 18:32

すいません、なぜか二重投稿になってしまいました。

Re:テキスト読み上げについて

by 地武太地部右衛門 » 2006年3月20日(月) 18:30

ゲストさん、M.Kさん、返信ありがとうございます。

私も調査/実験中だったのですが、全然進んでませんでした。
しかし、M.Kさんのコードで、確かに喋らす事が出来ました。

で、私も微力ながらボタン部分を改造したコードを載せます。
まずエディットボックスをウインドウに作っておいてください。

コード: 全て選択

Sub MainWnd_CommandButton1_Click()

	Dim hEdit As Long
	Dim LenEdit As Long
	Dim EditStr As String
	Dim spkText As String


	hEdit = GetDlgItem(hMainWnd,EditBox1)
	LenEdit = GetWindowTextLength(hEdit) +1

	If LenEdit = 1 Then
		MessageBox(0,"文字が入力されてないよ!","エラー",MB_ICONSTOP or MB_TOPMOST)
		ExitSub
	End If

	EditStr = ZeroString(LenEdit)
	GetWindowText(hEdit,StrPtr(EditStr),LenEdit)

	MultiByteToWideChar(0,0,EditStr,LenEdit,StrPtr(spkText),LenEdit)

	VText->StopSpeaking()
	VText->Speak(spkText)

End Sub
これで、エディットボックスに文字を入力してボタンを押すと、
それをUNICODEに直して喋ってくれます。

MultiByteToWideCharはヘルプに載ってないので、定義されてないのかと思いましたが、既にされてました。

コード: 全て選択

Declare Function MultiByteToWideChar Lib "kernel32" (CodePage As Long, _
dwFlags As Long,lpMultiByteStr As String, cchMultiByte As Long, _
lpWideCharStr As String,cchWideChar As Long)As Long
こんな、コードしか載せられなくてすいません。
また、何か改善できる所があったら、書こうと思います。
今後とも宜しくお願いします。ありがとうございました。

Re:テキスト読み上げについて

by 地武太地部右衛門 » 2006年3月20日(月) 18:30

ゲストさん、M.Kさん、返信ありがとうございます。

私も調査/実験中だったのですが、全然進んでませんでした。
しかし、M.Kさんのコードで、確かに喋らす事が出来ました。

で、私も微力ながらボタン部分を改造したコードを載せます。
まずエディットボックスをウインドウに作っておいてください。

コード: 全て選択

Sub MainWnd_CommandButton1_Click()

	Dim hEdit As Long
	Dim LenEdit As Long
	Dim EditStr As String
	Dim spkText As String


	hEdit = GetDlgItem(hMainWnd,EditBox1)
	LenEdit = GetWindowTextLength(hEdit) +1

	If LenEdit = 1 Then
		MessageBox(0,"文字が入力されてないよ!","エラー",MB_ICONSTOP or MB_TOPMOST)
		ExitSub
	End If

	EditStr = ZeroString(LenEdit)
	GetWindowText(hEdit,StrPtr(EditStr),LenEdit)

	MultiByteToWideChar(0,0,EditStr,LenEdit,StrPtr(spkText),LenEdit)

	VText->StopSpeaking()
	VText->Speak(spkText)

End Sub
これで、エディットボックスに文字を入力してボタンを押すと、
それをUNICODEに直して喋ってくれます。

MultiByteToWideCharはヘルプに載ってないので、定義されてないのかと思いましたが、既にされてました。

コード: 全て選択

Declare Function MultiByteToWideChar Lib "kernel32" (CodePage As Long, _
dwFlags As Long,lpMultiByteStr As String, cchMultiByte As Long, _
lpWideCharStr As String,cchWideChar As Long)As Long
こんな、コードしか載せられなくてすいません。
また、何か改善できる所があったら、書こうと思います。
今後とも宜しくお願いします。ありがとうございました。

Re:テキスト読み上げについて

by M.K » 2006年3月19日(日) 22:21

こんばんは...

自分も必要に迫られ...
どうにか動くものを製作しました。
シロウト考えですがご容赦ください...

1.Windowsアプリケーションプロジェクトを作成し、そのプロジェクトに新しくBasicプログラムファイル(*.abp/*.bas)を追加する。

2.それに以下のコードを打ち込む。
3.メインウィンドウのCreateイベントに以下のコードを挿入する
4.メインウィンドウにボタン(ここではCommandButton1)を配置して、Clickイベントに以下のコードを挿入する。
5.メインウィンドウのDestroyイベントへ

   VText->Release()

を挿入する。

6.「リリースコンパイル」してExeにしたものを実行する(重要!)。

ボタンをクリックして「お待たせいたしました」としゃべるか確認してみてください。

※ここで注意することは、文字列をUNICODEで渡すこと。(うちはこれでうまくいきました...)

※テキストボックス(エディットボックス)の文字列をしゃべらせるには、
内容をUNICODEに変えてしゃべらせるようにしてください。
(うちは現在実験中です...)

※このコードはAB-Ver4以降用です。

by ゲスト » 2006年3月12日(日) 23:42

とりあえず、方向性はそのとおりインターフェイスクラスの宣言を書いていく必要があるというのは間違っていません。

ただ、検索してみるとVBのサンプルばかり見つかるのが個人的には気がかりです。
ことActiveXに関してはC++のコードのほうが参考にしやすいので。

音声読み上げ機能について質問させて下さい。

by 地武太地部右衛門 » 2006年3月12日(日) 16:01

う~ん、スルーされてしまっているようですね。
質問の仕方が悪かったのでしょうか。
ActiveXコントロールが使えるのか、使えるのならその使用法、が聞きたかったのですが。

最近調べた中では、コードの切れ端の以下のページのように
http://dbp.cool.ne.jp/patio/patio.cgi?mode=view&no=248
クラスを定義すれば使えるのかなと思っていますが…。

詳しい人は誰もいないのでしょうか。
重ね重ね宜しくお願いします。

音声読み上げ機能について質問させて下さい。

by 地武太地部右衛門 » 2006年3月08日(水) 17:25

皆さん、こんにちわ。宜しくお願いします。

本題ですが、音声読み上げって面白いなぁと思い、自分でも作ってみたいので検索してると、
TextToSpeachというのを使えば可能という事が分かり、さらにHSPのサンプルもみつけ
その内容も簡単そうなので、意気揚々として、さぁ始めるぞとHSPのサンプルをみるとActiveXというのを使ってる。

ActiveBasic関連で、ActiveXは全く聞いたことが無いし、検索しても情報が全然無い。
もしかして、ActiveBasicでActiveXは使えないのでしょうか。
(そもそも、ActiveXに関しても、検索してすぐ分かることぐらいしか知らないのですが。)
もし扱えるなら、簡単な扱い方というか、おおまかな流れみたいな物を教えてくれると有り難いです。
後は自分で調べますので。

扱えないとしても、やりたい事は音声読み上げなので、別の方法で実現可能なら、それを教えて欲しいです。


参考にしたサイト
http://smile.poosan.net/perl-bin/hsp/ve ... 110019.txt
http://www.kct.ne.jp/~okuda/comlab/Text ... peach.html
http://www.onionsoft.net/hsp/beta/log/15.html
↑ページ自体が長いのでTextToSpeachで検索して下さい。ここにはHSP3.0なら2行だけで喋り出すと書いてあります(!)
HSPを勉強した方が早いのかな。


音声読みあげとは(一応知らない人の為に)
入力した文字を機械の声が喋ってくれる機能です。

私はESTAPというソフトで知りました。
http://www.tcct.zaq.ne.jp/yamano/
このソフトもそうですが、text-to-speech engineを別途インストールして
それに命令を出してるだけの様なので、私にも実現可能だと思ったのです。


以上の事に関して、ご存知の方がいましたらどうか教えて下さい。宜しくお願いします。

ページトップ