音声合成SAPIを「なでしこ」で使う


近頃は、だんだんマンネリ化してきたので、初心に戻ってみたいと思います。

音声合成もブログの中で長い間アクセス数が安定して多いもののひとつです。

なので、前(2年前)のしゃべるタイマー「なでしこ」版ものを見直して、
作り直してみました。

単なる声で知らせてくれるタイマーです。
(タイマーの分数を入力して、時間が来たら教えてくれるだけ)

日本語プログラム「なでしこ」では、有名な音声合成ソフト「aquestalk」が使えて、
アクセントをつければ、自然に近いしゃべりができるのですが、
著作権(使用権)の関係から、個人的な使用しか認められていません。
プログラムを配布すると、面倒なことになる恐れがありますので、
windowsのSAPI(Speech API)を使用したものにしておきます。

(参考に「なでしこ」での「akuestalk」の使い方は
!「aquestalk.nako」を取り込む。
「げ'ん/きー?」をAQT話す
のようなに簡単にプログラムできますので、試してみてください。)

まず、なでしこで作り直したソースを載せておきます。
音声合成処理の部分は、VBScriptで作ってあります。

なでしこのソースプログラムは以下のとおりです。

//--タイマープログラム
ラベル1とはラベル
ラベル1のテキスト=「」

「'---関数の定義
Option Explicit
Dim str1,sp
Function hanasi(str1)
Set sp = CreateObject("SAPI.SpVoice")
sp.Rate = 0'--話すスピード
sp.volume = 90'--声のボリューム
str1 = "<pitch absmiddle='6'>"+str1+"</pitch>"'--声の音程
sp.Speak str1,1
End Function
 」をVBSCRIPTコード追加。

speech=「」
●話す(Aと|Aを)
    speech=「hanasi("{A}")」
     speechをVBSCRIPTする

設定時間=0
「こんにちは、はるかです。タイマーの、時間を入力してください。」と話す
「何分に設定しますか?」と尋ねる。
設定時間=それ
「4」秒待つ。
「{設定時間}分のタイマーを、開始しました。」と話す
「{設定時間}分のタイマーを開始しました」と表示。
残時間=0
設定時間=設定時間*60
Iで1から設定時間まで繰り返す
    残時間=設定時間-I
    ラベル1のテキストは「あと{残時間}秒です。」
    もし、残時間=20ならば「あと{残時間}秒でおわります。準備をしてください。」と話す
    「1」秒待つ。
「おまたせしました。時間が経過しましたので、お知らせします。」と話す
「5」秒待つ。
「タイマーを終了します」と言う。
「さようなら。またお会いしましょう。」を話す
「5」秒待つ。
終了
//--ここまで

以上をなでしこのエディタにコピーアンドペーストしてください。

ダウンロードする場合はダウンロードページからお願いします。

下のようになるはず。



簡単なプログラムですが、要点だけ説明します。

4行目から14行目がVBScriptで「SAPI.SpVoice」を操作します。
9行目が声の速さで、−10から10の間で指定してください。
10行目が声のボリュームで0から100で指定してください。
11行目が声の音程です。absmiddle=""で−10から10の間で指定してください。
12行目のsp.Speak str1,1の1は非同期(独自に動く、プログラムを止めません)です。
同期(処理を待つ、しゃべってから次に進む)場合は削除(sp.Speak str1に)してください。
ちなみに、2は直前の声を切り捨て、8はマークアップ(xml)言語を解釈します。
従って、非同期でマークアップを使いたいときは9となります。

17行目から19行目は関数で命令を作っています。
Aで話す、または、Aを話すと書くことで実行されます。

21行目からメインのプログラムです。
「秒待つ」が多く入っていますが、しゃべるスピードによって適切な秒数に変えてください。
12行目で同期とした場合は、しゃべりが終わるまで次に進みませんので、
25、36、39行目を削除してください。
33行目で残り20秒になったら予告するようになっていますので、
もっと前に予告したい場合などのときは、残時間=20 の数字を変えてください。

他のプログラムでも使いたい場合は、

(声の速さ、大きさ、高さを自分の好みにしてから)
4行目から19行目を抜き出して「sapi.nako」などの名前を付けて
なでしこの(普通なら)「C:Program files:nadesiko_lang:lib」フォルダに保存します。

使用するときは

!「sapi.nako」を取り込む。
「げんきー」を話す

などで、簡単に動かすことができるようになり、
プログラムの作成作業を省力化することができるようになります。

なお、
マークアップ言語を使えば、アクセントなどもつけれますが、やってみたところ
あまり効果はありませんでした。
なお、アクセント記号の「’」を使うと上のプログラムでは文字列の区切りと解釈しエラーとなります。

長くなりましたので、つづき次回とします。


*おまけ(英語版)です。

なにぶん英語は苦手なので、スピーチ文書は適当です。
新しく、
Set sp.Voice = sp.GetVoices().Item(1)
が追加されています。話し手の
Item(0)が日本語(haruka)
Item(1)が英語(Zira)
でItem(1)のZiraを選択しています。

以下ソースプログラムです。

//--タイマープログラム
ラベル1とはラベル
ラベル1のテキスト=「」

「'---関数の定義
Option Explicit
Dim str1,sp
Function hanasi(str1)
Set sp = CreateObject("SAPI.SpVoice")
Set sp.Voice = sp.GetVoices().Item(1)
sp.Rate = 0'--話すスピード
sp.volume = 90'--声のボリューム
str1 = "<pitch absmiddle='6'>"+str1+"</pitch>"'--声の音程
sp.Speak str1,9
End Function
 」をVBSCRIPTコード追加。

speech=「」
●話す(Aと|Aを)
    speech=「hanasi("{A}")」
     speechをVBSCRIPTする

設定時間=0
「Hello my name is Zira. Please do it input to time?」と話す
「How many minutes do you set?」と尋ねる。
設定時間=それ
「4」秒待つ。
「{設定時間}minutes. timer is starting」と話す
「Timer is starting at {設定時間}minutes」と表示。
残時間=0
設定時間=設定時間*60
Iで1から設定時間まで繰り返す
    残時間=設定時間-I
    ラベル1のテキストは「Wait {残時間}minute.」
    もし、残時間=20ならば「Just wait{残時間}minutes. Please get ready.」と話す
    「1」秒待つ。
「Thank you for waiting. Come to time. Information you.」と話す
「5」秒待つ。
「Timer was finished.」と言う。
「Goodby See you again!」を話す
「5」秒待つ。
終了
//--ここまで

以上

JUGEMテーマ:PC関連
| なでしこプログラム | 13:53 | comments(0) | trackbacks(0) |

ゲームパッド(joypad)操作のプログラムです。


汎用版のゲームパッド(joypad)操作のプログラムです。

出来てから1週間くらい修正(テストラン)していたため遅くなりましたが

前回の記事でお知らせしたとおり
ゲームパッドのボタンをキーボードのボタンに変換して操作するプログラムです。

ダウンロードページ (windows版 1.61MB)



(初期値はボタン1が↑キー、ボタン2が→キー、ボタン3が↓キー、ボタン4が←
キー、ボタン9がESCキーで終了、反応時間は150マイクロ秒です)

プログラムの使い方

ダウンロードして解凍してからgamepad.exeを起動します。
使い方はその都度表示されますので、それに従って操作してください。

変換表のとおりゲームパッドのボタンをキーボードのキーに変換します。
(変換表のキー番号については前回の記事を参照)

ただし、DELETEキーは変換できません。キー番号のクリアに使っています。
またESCキーはプログラム上で、終了のために使っていますので、
ゲームパッドのボタンにESCキーを割り当てるとそのボタンを押すことによりプログラム終了できます。

下はボタン5をダブルクリックしたところ



下はZキーを押したとき



ゲームパッド開始ボタンを押すと自動的にプログラムが起動しますので
その後、操作したいゲーム(プログラム)を開始すればゲームパッドで遊べ(動かせ)ます。

下は変更保存ボタンを押した結果



反応時間については「日本語プログラムなでしこ」のデモのゲームで「なでりす」を行ってみました
150くらいが反応がよく最高点が出ましたので、この前後がよいのではないかと思います。
自分の好みに合わせていろいろ試してみてください。

設定が終わって変更の必要がない場合、直接hspフォルダのpadpro.exeを起動しても構いません。
また、直接hspフォルダのpaddata.txtをメモ帳などで編集してpadpro.exeを起動しても構いません。

なお一部のゲーム(プログラム)ではうまく操作できないものもありました。

ダウンロードの中にはソースプログラムも入っていますので、使いがってが悪いときは随時変更してください。

なお、筆者は現在ゲームパッドを1つしか持っていませんので、複数でのテストができないため1台用となっています。
 
追記:C++/CLIでのゲームパッド操作をつくりました。
| なでしこプログラム | 10:17 | comments(0) | trackbacks(0) |

前回の「なでしこ」プログラムの説明

JUGEMテーマ:プログラミング

パソコンでプログラムを作るには、何の言語を使ったらよいか?
誰もが悩む問題だと思います。
C、C++、C#、JAVAなど山のように言語の種類があります。
若いころは、COBOL,FORTRAN,アセンブラを学校で習いました。
パソコンが出てきて、BASICが流行り、このことでプログラムの基礎を覚えました。

結論としては、プログラマーを仕事にしなければ、何でもいいのです。
そもそもどんなプログラム言語でも人間に解かりやすくするために作られています。
仕組みも似ていますので、一つ覚えれば大きな違いはありません。

それなら簡単な方が良いと思います。(ただし、簡単といっても手続上のことで、プログラムの考え方は変わりません)
パソコンの能力が飛躍的に伸びたので、インタプリタ(翻訳しながら実行する)の言語でも十分なスピードがでます。
とにかく、気軽に動く日本語プログラム「なでしこ」はお勧めです。
弱点としては、マイナーな言語(オープンソースソフトウェア)のため情報が少ないこと
ほかの言語と互換性(共通性)が少ないことでしょうか

またほかの言語では、プログラム自体のアイデアを思いついても、
組むまえに手続が多すぎて挫折してしまいます。(これをオブジェクト指向と言う?)
それに、個人的に、ほかの言語では説明が複雑になりすぎて(自分でも説明できない?)
ブログに書ききれませんので

ながながと書きましたが、これが「なでしこ」で作っている理由です。

まず、kaimono.nakoのソースプログラムを見てください。

3行目からは積み木デザイナで自動的にコードが作成されますので、





デザインを変更したいときは、デザインのタブで切り替えて、好きなように配置してください。



109行目からコードを書いて行きます。
109行目から113行目はプラウザを作ります。(なでしこのデザインでは自動で作成できないため)
115行目から129行目はスマホ用のHTMLの様式をスマホという変数に作って(保存して)おきます。



なお、121行目はスマホでショートカットを作ったときに表示される画像です。
画像を変えたときは、href="http:の後を自分で用意したアイコン画像の場所に変えてください。
126行目の【メッセージ】をあとで置き換えてhtmlファイルを作ります。


131行目から134行目までは品目のプルダウンメニューのリストを作っています。
132行目のように「なでしこ」では「を開いて」でfileのopenと「代入する」でfileのgetができます。
{母艦パス}はプログラムがあるフォルダでのパスです。
よってhinitem.txtをメモ帳などで編集すれば自分のプルダウンメニューができます。
133行目のコンボ1のリスト=20を変えればプルダウンメニューしたときの表示行数をかえられます。



136行目から140行目までと143行目は変数の初期化です。

141行目から143行目はアップロード先のデータをアップ先という変数に入れています。
131行目からと同じ要領です。
よってupadress.txtをメモ帳などで編集すればアップロード先を変更できます。

ここからは、ボタンを押したときの処理です。(一般にイベントと言います)
145行目の#は注釈文でプログラムには関係しません。
146行目から148行目は一時保存ボタンを押したときの処理です。
146行目は

の35行目のクリックした時は〜に対応しています。

「なでしこ」では処理のかたまりをタブで行を下げてコードを書きます。
147行目でkaimonolist.txtに書き込みます(内容とはデータが入っている変数です。)
148行目でエディタ(表示フィールド)に表示します。



151行目から154行目は登録ボタンの処理です。
コンボ1(入力フィールド)で入力されたものを内容のカウント(番目)に入れています。
そのあと、(153行目)カウントを増やし、(154行目)内容の中身全体を表示します。

157行目から166行目までは削除ボタンの処理です。
削除する項目(カウント)を除いて内容修正に入れなおします。
158行目で削除する前の項目をすべて呼びます。(余談ですが、「繰り返す」の命令で変数Iを使うのは、昔からの名残で、たぶん年配者から習った人は、今でもI、J、Kが使うことが多いです。fortranではIからNで始まる変数は暗黙(宣言しなくても)で基本整数型なので、メモリを使わずに済むことからきていると思います。昔はメモリが少なかったので重要だった?)
159行目では、Jに選択した番号が入っていますので、その番号が来たら入れなおさず飛ばします。(Jの選択については最後に出てきます)
160行目で、内容修正に入れ直し、161行目で内容修正のカウントを増やします。



162行目で修正内容をもとの内容に入れ替えします。
163行目、166行目で初期化、165行目でカウントを合わせるため減らしておきます。
164行目は表示内容を書き換えます。

169行目から174行目までは前回呼出ボタンの処理です。
170行目で前回のkaimono.txtを呼び込みます。
171行目はそれが何もないときに、気づかないといけないので、ダイアログボックスに表示(「言う」命令)します。
172行目で内容を表示、173行目でカウントの数(配列要素数)を入れます。
174行目はうまくいったか確かめるため表示しています。



177行目から179行目はアップロードのボタンの処理です。
178行目でアップロード先のアドレスを表示します。
179行目で最初に作ったナデシコプラウザを起動します。

あともう少しですので、お付き合いください。

182行目から193行目まではHTML作成ボタンの処理です。
183行目で内容をメモリに入れます。
184行目でメモリの内容にHTMLで改行を表す<br>を入れます。
185行目でそれを内容2に入れています。



186行目では、今度はスマホ用のHTMLをメモリに呼び込みます。
187行目でその中の【メッセージ】を内容2と書き換えます。
188行目で確認のダイアログを出します。
189行目は190行目でsumaho.htmlを保存したときにエラーが発生したとき191,192を実行します。
193行目で保存するパスを表示します。

196行目から197行目は終了ボタンの処理
200行目から202行目はアップロード先変更ボタンの処理
201行目でデータをアップ先に入れて202行目で保存しています。



205行目から206行目はリストの内容の何番目をクリックしたかを206行目でJに入れています。

以上で、「なでしこ」のプログラムの説明は終わりです。
見ていただけばわかるように、ほとんどの処理は数行のコードで表すことができます。
メンテナンスも簡単に行うことができますので、
買い物リストだけでなく、いろんなメモのプログラムに応用できるはずです。

次回はアップロード用のHTMLのphpプログラムについて説明します。

phpプログラムについて

JUGEMテーマ:PC関連
| なでしこプログラム | 16:47 | comments(0) | trackbacks(0) |

スマホ用の買い物リストプログラム

買い物をするときは、買い忘れが多くなってきました。
そのためメモを作ってもって行きますが、そのメモを忘れることも
でも、スマホを忘れることは少ないので、スマホ用のメモを作ってみました。
一般の無料アプリで十分だとは思うんですが・・・

日本語プログラム「なでしこ」で作ってありますので、自分流に変えてみてください。

今回は、スマートホンに表示させるために、HTML形式のファイルにしてサーバにのせますので、
ちょっとだけ、複雑かもしれません。
でも、java言語もobject-c言語も使ってないので、簡単に理解できると思います。

いちおう、単体でも動くようにしてありますので、プログラムの嫌いな人も使えます。

WindowsのOSなら動くと思います。

ダウンロードページ (ZIP版1201KB)



ダウンロードしたら
ZIPファイルを展開して、kaimono.exeを起動してください。
「WindowによってPCが保護されました。」とでますので、詳細情報をクリックしてください。
再度「WindowによってPCが保護されました。(発行元:不明な発行元 アプリ:kaimono.exe)」とでますので、
実行を押してください。(二度目からはでません。)
そうすると、下の画面がでます。




初期設定について

まず、ファイルフォルダの中を見ると下のファイルがあります。



内容は以下のとおりです。

plug-ins:「なでしこ」をwindowsで動かすためのプラグイン(プログラム)
hinitem.txt:品目をリスト形式で選ぶための項目が入ったテキスト
kaimono.exe:実行形式のプログラム
kaimono.nako:「なでしこ」のソースプログラム
kaimonolist.txt:一時保存先のテキスト
upadress.txt:アップロード先のアドレスのテキスト
uploadcr.php:自分のパソコン(クライアント側)からデータを受け取るためのホームページ(phpプログラム)
upload.php:上のホームページからアップロードをボタンを押したときにデータを(サーバに)書き込むホームページ(phpプログラム)

1.サーバ(自分のホームページ)にkaimonoというフォルダと
その中にfilesというフォルダを作ってください。
パーミッションは、755または705で構いません。

2.その中にuploadcr.phpとupload.phpをアップロードしてください。
なおfilesのフォルダはアップロード先になります。


3.あとは、アップロードのボタンを押して




表示されたアップロード先を自分のアドレスに変えて、アップロード先変更ボタンを押してください。



以上で設定は終了です。


プログラムの使い方

登録ボタン:プルダウンメニューまたは直接入力して登録ボタンを押すと
買い物リストに表示されます。


なおプルダウンメニューの内容は、hinitem.txtをメモ帳などで開いて上書き保存することで編集できます。


削除ボタン:買い物リストから品目を選んで削除ボタンを押すと削除できます。


一時保存ボタン:買い物リストの内容を保存します。
前回呼出ボタン:一時保存で保存した内容を買い物リストに呼び出します。


HTML作成ボタン:買い物リストの内容をスマホ用のホームページ形式(HTML)にして
sumaho.htmlという名前で作成します。




アップロードボタン:アップロード先のuploadcr.phpを開いてプラウザを表示する。
プラウザから先ほどのsumaho.htmlを選んでプラウザのアップロードボタンを押す。



これで完了です。

これによって、サーバにホームページがアップロードされますので、
http://サーバアドレス/kaimono/files/sumaho.htmlを
スマートホンからアドレスを呼び出せば表示できます。



スマートホンではショートカットに登録すればワンクリックで呼び出せます。

(ショートカットはプラウザでブックマークに登録
それを長押ししてメニューを表示させ「ショートカットを追加」を押す
ことで作成されます。)


以上のように、早い話はホームページを作ってアップロードしているだけです。
逆に言えば、買い物だけでなくごくごく簡単なスマホ用ホームページ作成ソフトでもあります。

注意事項!
なお、ホームページと同じことなので、アドレスがわかれば誰でも見ることができてしまいます。
個人情報(住所、氏名、電話番号など)はアップロードしないように注意してください。


次回はプログラムの説明をします。
自分で改良することによりオリジナルなプログラムになりますので
挑戦してみてください。

プログラムの説明へ

JUGEMテーマ:PC関連
| なでしこプログラム | 16:44 | comments(0) | trackbacks(0) |

パソコンの録音ソフトのバージョンアップ

前回に作った録音アプリのバージョンアップです。

前回のものを実際に使っていると、やっぱりめんどくさいことが多いので
必要最低限の機能を付けてみました。

そのためプログラムが長くなりましたので、ダウンロードの中にソースプログラムを入れてあります。

下のダウンロードページからZIPファイルを展開してください。

ダウンロードページ (1.27MB)

pcrecordv1フォルダのrecordv1.exeを起動してください。
(日本語プログラム「なでしこ」がインストールされていればrecordv1.nakoでもOK)

下のようにでますので、詳細情報をクリックしてください。



下のようにでますので、実行を押してください。



以上の警告は、二度目からは表示されません。

次のように起動されます。



使い方
録音ボタン:録音を始めます
停止ボタン:録音を終了し日付形式のwavファイルを作ります。
ボリューム調整ボタン:Window8の音量ミキサーを起動します。
作業フォルダ変更ボタン:作業フォルダを変更します。
ファイル一覧更新ボタン:最新作業フォルダの内容を表示します。
PLAYボタン:ファイル一覧で選んだ(ファイル一覧の目的ファイルをクリックする)ファイルを演奏します。
      (なおファイル一覧で目的のファイルをダブルクリックしても演奏します。)
ファイル削除ボタン:ファイル一覧で選んだファイルを削除します。
ファイルコピーボタン:ファイル一覧で選んだファイルをコピーします。
ファイル名変更ボタン:ファイル一覧で選んだファイルの名前を変更します。
情報表示ボタン:ファイル一覧で選んだファイルの情報を表示します。
アプリ終了ボタン:プログラムを終了します。

オプションとして
圧縮ボタン:ファイル一覧で選んだwavファイルをmp3ファイルに圧縮します。
ただし、この機能を使うためには、lame.exeとlame_enc.dllが必要です。
Lameのホームページからlame3.99.5をダウンロードしたうえで
ZIPファイルを解凍して、lame3.99.5フォルダのなかにあるlame.exeとlame_enc.dllを
このプログラムと同じフォルダにコピーしてください。
mp3の著作権の関係で直接配布できないようなのでこのような形にしてあります。
mp3のファイルは同じフォルダにwavファイルと同じ名前で作成されます。
mp3ファイルの情報タグのタイトル名にはファイル名が設定されますので、ファイル名をタイトル名にすると便利です。
この場合ファイル一覧が自動で更新されませんので、変換後ファイル一覧の更新ボタンを押してください。
(なおmp3のビットレートは192kbpsのしてありますので7分の1ほどにファイルが小さくなると思います。)

参考
作業の様子です。


使いにくいところがあればソースプログラムを変更して使ってください。
なおファイルの連結、分割などの機能もつけようと思いましたが、操作が複雑になるのでやめました。

JUGEMテーマ:PC関連
| なでしこプログラム | 18:04 | comments(2) | trackbacks(0) |

09
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
--
>>
<<
--
Profile
New entries
Archives
Categories
Recent comment
カウンター


今日
昨日
レンタルサーバ/プロバイダー




ファッション
カタログ通販ベルーナ(Belluna)

イマージュ - IMAGEアウトレットセール
yahoo・その他


買い物
ビックカメラ.com



Mobile
qrcode
Links
Others
無料ブログ作成サービス JUGEM