HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0301
zeoAqKanji2Koeについて5解決


zeo

リンク

2013/3/1(Fri) 14:56:19|NO.52625

 こんにちは。

 AqKanji2KoeをHSPで使用できるようにと考えているのですが、
 なかなか難しくてできないです。

 どなたかご教授いただけないでしょうか?
 よろしくお願いします。



この記事に返信する


cats

リンク

2013/3/1(Fri) 18:04:22|NO.52628

あまり説明書に目を通してませんがこれで関数は使えるようになるかと。

#uselib "AqKanji2Koe.dll" #func AqKanji2Koe_Create "AqKanji2Koe_Create" str,int #func AqKanji2Koe_Release "AqKanji2Koe_Release" int #func AqKanji2Koe_Convert "AqKanji2Koe_Convert" int,str,str,int



暇人

リンク

2013/3/1(Fri) 18:30:19|NO.52629

HSPでAquesTalkのAqKanji2Koe.dllが利用できません。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1256891532
情報元

HSPソースフォルダにAqKanji2Koe.dllがあって
サブフォルダにaq_dic(中のファイルもそのまま)があるものとして

#ifndef AqKanji2Koe #define AqKanji2Koe #uselib "AqKanji2Koe.dll" #cfunc AqKanji2Koe_Create "_AqKanji2Koe_Create@8" sptr,var #func AqKanji2Koe_Release "_AqKanji2Koe_Release@4" int #func AqKanji2Koe_Convert "_AqKanji2Koe_Convert@16" int,sptr,var,int #endif dir="aq_dic" pErr=0 hAqKanji2Koe=AqKanji2Koe_Create(dir,pErr) if hAqKanji2Koe=0 {dialog "インスタンス生成に失敗("+pErr+")":end} mes "インスタンスハンドル="+hAqKanji2Koe kanji="あいうえお" mes "変換前文字列 : "+kanji koesize=strlen(kanji)*5 //入力文字列よりバッファが必要になるので適当に5倍 sdim koe,koesize AqKanji2Koe_Convert hAqKanji2Koe,kanji,koe,koesize if stat {dialog "音声記号列に変換に失敗("+stat+")":end} mes "音声記号列 : "+koe stop #deffunc exit onexit if hAqKanji2Koe { AqKanji2Koe_Release hAqKanji2Koe } return



暇人

リンク

2013/3/1(Fri) 22:14:18|NO.52632

ついでにAquesTalk2も使ってみる

laquestalk - AquesTalk Sample Code for HSP3
http://lhsp.s206.xrea.com/works/other.html
情報元

HSPソースフォルダにAquesTalk2.dllも置いて
更にaqtk2-win-evaフォルダにあるphontフォルダを中身ごと置いたとして

#ifndef AqKanji2Koe #define AqKanji2Koe #uselib "AqKanji2Koe.dll" #cfunc AqKanji2Koe_Create "_AqKanji2Koe_Create@8" sptr,var #func AqKanji2Koe_Release "_AqKanji2Koe_Release@4" int #func AqKanji2Koe_Convert "_AqKanji2Koe_Convert@16" int,sptr,var,int #endif #uselib "AquesTalk2.dll" #cfunc AquesTalk2_Synthe "AquesTalk2_Synthe" str, int, var, int #func AquesTalk2_FreeWave "AquesTalk2_FreeWave" int dir="aq_dic" pErr=0 hAqKanji2Koe=AqKanji2Koe_Create(dir,pErr) if hAqKanji2Koe=0 {dialog "インスタンス生成に失敗("+pErr+")":end} title "インスタンスハンドル="+hAqKanji2Koe mes "音声速度" iSpeed=75 input iSpeed,64,20 iSpeed_id=stat dirlist flist,"phont\\*.phont",1 //phontフォルだ指定 notesel flist if notemax=0 {dialog "phontファイルが見つかりません\nデフォルトPhontのみを使用します"} noteadd "DLLのデフォルトPhont",0,0 sdim phont,1024*20,notemax repeat notemax noteget fname,cnt exist "phont\\"+fname if strsize>0 { bload "phont\\"+fname,phont(cnt),strsize phont_varptr(cnt)=varptr(phont(cnt)) //phontファイル読み込みアドレス }else{ phont_varptr(cnt)=0 //ファイルが無いならデフォルトPhontを指定 } loop pos 5,60 mes "ダブルクリックでPhont指定" objsize 120,110 listbox phont_indx , 100 ,flist phont_id=stat #define WM_COMMAND 0x0111 oncmd gosub *_WM_COMMAND, WM_COMMAND pos 200,100 kanji="あいうえお" mesbox kanji,400,200 koe="" pos 5,300 mes "音声記号列" input koe,630,20 koe_id=stat gosub *txtConvert pos 200,100-20 objsize 50,20 button gosub "再生" , *play_wave stop #deffunc exit onexit mmstop if hAqKanji2Koe { AqKanji2Koe_Release hAqKanji2Koe } if ptWavedata { AquesTalk2_FreeWave ptWavedata } return *_WM_COMMAND if ( ( ( wparam >> 16 ) & 0xFFFF ) == 0x0002 ) { noteget fname,phont_indx title "phont="+fname+" ポインタ="+phont_varptr(phont_indx) } return *txtConvert koesize=strlen(kanji)*5 //入力文字列よりバッファが必要になるので適当に5倍 sdim koe,koesize AqKanji2Koe_Convert hAqKanji2Koe,kanji,koe,koesize if stat {dialog "音声記号列に変換に失敗("+stat+")":end} objprm koe_id,koe return *play_wave gosub *txtConvert ; 前のWAVEデータを開放 if ptWavedata : AquesTalk2_FreeWave ptWavedata iSpeed = limit(iSpeed,50,300) objprm iSpeed_id,iSpeed /* 音声波形を生成 p1に音声出力したいテキスト文章、p2に発話速度値、p3に WAVEデータのサイズが返る変数を指定。 p4にphontデータの先頭アドレスを指定します。このDLLのデフォルトPhontを用いるときは0を指定します。 戻り値でWAVEデータのアドレスポインタが返る。 */ ptWavedata = AquesTalk2_Synthe(koe, iSpeed, wavesize,phont_varptr(phont_indx)) if ptWavedata = 0 : dialog "音声波形の生成に失敗しました。(エラーコード: "+wavesize+")", 1, "エラー" : stop ; WAVEデータを生成 sdim wavedata, wavesize dupptr wavedata, ptWavedata, wavesize ; mmload命令で再生できるようメモリ上のWAVEデータを ; メモリストリームでファイル化 memfile wavedata, 0, wavesize ; 読み込み再生 mmload "mem:.wav", 0 mmplay 0 return
phontが無ければデフォルトが設定される



暇人

リンク

2013/3/1(Fri) 22:24:27|NO.52635

あ、大した事無いけど
mesboxが64バイト以上書けるようにするの忘れた・・・



zeo

リンク

2013/3/2(Sat) 11:16:47|NO.52644

 解決できました!

 暇人さん、 AquesTalk2のソースまでいただけて、非常に助かりました。
 ありがとうございます。



ONION software Copyright 1997-2021(c) All rights reserved.