ネット上をふらふらしてたらテキストスピーチのライブラリを見つけたので組み込んでみました。
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
需要はあるのかわかりませんが参考までに…