ab.com コミュニティ https://www.activebasic.com/forum/ |
|
テキストスピーチプログラム https://www.activebasic.com/forum/viewtopic.php?t=2001 |
ページ 1 / 1 |
作成者: | Kaz [ 2007年7月08日(日) 10:11 ] |
記事の件名: | テキストスピーチプログラム |
はじめまして!ABの掲示板見ながらこつこつプログラムしてる日曜プログラマーです(笑) ネット上をふらふらしてたらテキストスピーチのライブラリを見つけたので組み込んでみました。 1.準備 下記サイトから「Ver.2.1 aqtk20061012.zip 」をDL http://www.a-quest.com/aquestalk/index_win.html 解凍して「AquesTalkDa.dll」をコピーしてプロジェクトのフォルダに置く 2.プロジェクト作成 プロジェクト名を「TextSpeech」にして、 RADでEditBoxとCommandButton貼り付けて、 MainWnd.sbpに下記のコードを記入してください [ここをクリックすると内容が表示されます]
コンパイルしてエディットボックスに「おはよう」と打ち込んでみて再生されればOKです。コード: '----------------------------------------------------------------------------- ' イベント プロシージャ '----------------------------------------------------------------------------- ' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。 ' ウィンドウ ハンドル: hMainWnd ' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。 '============================ 'テキストスピーチ関連外部参照 '============================ Declare Function AquesTalkDa_PlaySync Lib "AquesTalkDa.dll" ( _ ByVal koe As *Byte, ByVal iSpeed As Integer _ ) As Long Declare Function AquesTalkDa_IsPlay Lib "AquesTalkDa.dll" ( _ ByVal H_AQTKDA As Long ) As Integer Declare Function AquesTalkDa_Create Lib "AquesTalkDa.dll" ( _ ) As Long Declare Sub AquesTalkDa_Stop Lib "AquesTalkDa.dll" ( _ ByVal H_AQTKDA As Long _ ) Declare Sub AquesTalkDa_Release Lib "AquesTalkDa.dll" ( _ ByVal H_AQTKDA As Long _ ) Declare Function AquesTalkDa_Play Lib "AquesTalkDa.dll" ( _ ByVal H_AQTKDA As Long, _ ByVal koe As String, _ ByVal iSpeed As Integer, _ ByVal hWnd As Long, _ ByVal msg As Long, _ ByVal dwUser As Long _ ) As Integer '----------------------------------------------------------------------------- ' ウィンドウメッセージを処理するためのコールバック関数 Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord ' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。 ' イベントプロシージャの呼び出しを行います。 MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam) End Function '----------------------------------------------------------------------------- ' ここから下は、イベントプロシージャを記述するための領域になります。 Sub MainWnd_Destroy() TextSpeech_DestroyObjects() PostQuitMessage(0) End Sub Sub MainWnd_CommandButton1_Click() Dim koe As *Byte Dim dwLength As DWord Dim blPlay As Long Dim hSpeech As Long Dim errmsg As Long '音声合成エンジンのハンドル取得 hSpeech = AquesTalkDa_Create() 'テキストデータを格納するためのバッファ領域を確保 dwLength = GetWindowTextLength(GetDlgItem(hMainWnd, EditBox1)) koe = calloc(dwLength + 1) 'テキストバッファを取得 GetWindowText(GetDlgItem(hMainWnd, EditBox1), koe, dwLength + 1) '再生中なら処理を抜ける If AquesTalkDa_IsPlay(hSpeech) = 1 Then MessageBox(hMainWnd, "テキスト再生中です。", "注意", MB_OK Or MB_ICONWARNING) 'バッファの開放 free(koe) 'ハンドルの開放 AquesTalkDa_Release(hSpeech) Exit Sub End If '音声再生 errmsg = AquesTalkDa_PlaySync(koe, 100) 'エラーメッセージ処理 If errmsg <> 0 Then MessageBox(hMainWnd, "エラー発生", "AquesTalkDa", MB_OK) End If 'バッファの開放 free(koe) 'ハンドルの開放 AquesTalkDa_Release(hSpeech) End Sub Sub MainWnd_Resize(SizeType As Long, cx As Integer, cy As Integer) Dim rc As RECT GetClientRect(hMainWnd, rc) 'EditBox,CommandButtonの大きさを変更する MoveWindow(GetDlgItem(hMainWnd, EditBox1), 0, 0, rc.right, rc.bottom - 60, 0) MoveWindow(GetDlgItem(hMainWnd, CommandButton1), 0, rc.bottom - 60, rc.right, 60, 0) End Sub 需要はあるのかわかりませんが参考までに… |
作成者: | 西野孝雄 [ 2007年7月11日(水) 00:44 ] |
記事の件名: | テキストスピーチプログラム |
いやぁ、おもしろいですねぇ。 附属のサンプルプログラムで結構あそんじゃいました。 合成音声の読み上げは、このBBSの http://www.activebasic.com/forum/viewtopic.php?t=799 の記事でみて、色々試しましたが、Kazさんが紹介された方のがより自然な感じでしょうか。 でも、漢字は読めないみたいで、残念。 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |