はじめまして!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に下記のコードを記入してください
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード:
'-----------------------------------------------------------------------------
' イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [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
コンパイルしてエディットボックスに「おはよう」と打ち込んでみて再生されればOKです。
需要はあるのかわかりませんが参考までに…
はじめまして!ABの掲示板見ながらこつこつプログラムしてる日曜プログラマーです(笑) ネット上をふらふらしてたらテキストスピーチのライブラリを見つけたので組み込んでみました。
1.準備 下記サイトから「Ver.2.1 aqtk20061012.zip 」をDL [url]http://www.a-quest.com/aquestalk/index_win.html[/url] 解凍して「AquesTalkDa.dll」をコピーしてプロジェクトのフォルダに置く
2.プロジェクト作成 プロジェクト名を「TextSpeech」にして、 RADでEditBoxとCommandButton貼り付けて、 MainWnd.sbpに下記のコードを記入してください
[hide][code] '----------------------------------------------------------------------------- ' イベント プロシージャ '----------------------------------------------------------------------------- ' このファイルには、ウィンドウ [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 [/code][/hide]
コンパイルしてエディットボックスに「おはよう」と打ち込んでみて再生されればOKです。
需要はあるのかわかりませんが参考までに…
|