ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2017年9月21日(木) 08:44

All times are UTC+09:00




新しいトピックを投稿する  トピックへ返信する  [ 2 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 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に下記のコードを記入してください

  [hide]
コード:
'-----------------------------------------------------------------------------
'  イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [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
  
[/hide]

コンパイルしてエディットボックスに「おはよう」と打ち込んでみて再生されればOKです。

需要はあるのかわかりませんが参考までに…


通報する
ページトップ
   
投稿記事Posted: 2007年7月11日(水) 00:44 
いやぁ、おもしろいですねぇ。
附属のサンプルプログラムで結構あそんじゃいました。

合成音声の読み上げは、このBBSの
http://www.activebasic.com/forum/viewtopic.php?t=799
の記事でみて、色々試しましたが、Kazさんが紹介された方のがより自然な感じでしょうか。
でも、漢字は読めないみたいで、残念。


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 2 件の記事 ] 

All times are UTC+09:00


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[1人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by KONISHI Yohsuke