;;; 「ネタ: テキスト音声合成ミドルウェア AquesTalk を使って時報」 ;;; software / AutoHotkey スレッド part10 ;;; http://p2.chbox.jp/read.php?url=http%3A//pc12.2ch.net/test/read.cgi/software/1265518996/12 ;;; 数字の読み方については、 ;;; NHK 放送文化研究所編『NHK ことばのハンドブック第2版』「数字の発音」の「分〔フン〕」(p. 358)を参照。 ;;; Amazon.co.jp: NHKことばのハンドブック: NHK放送文化研究所, 日本放送協会放送文化研究所=: 本 ;;; http://www.amazon.co.jp/dp/4140112182 #SingleInstance ;; 待機時間を設定する every_min := 20 if ( every_min = 0 ) msgbox,Error! Loop { TalkTime( every_min ) ;; 待機時間を設定する sleep_min := ( every_min = "1" ) ? 0 : ( Mod(A_Min, every_min) = 0 ) ? (every_min - 1) : (every_min - 1) - ( Mod(A_Min, every_min) ) sleep_sec := (60 - A_Sec) + (60 * sleep_min) Sleep, % sleep_sec * 1000 } return TalkTime( every_min ) { hour := A_Hour min := A_Min ;; 0 時のときには 0 を読み上げるよう設定する ;; そうしないと、0 時のときに時間を読み上げなくなってしまう /* hour := ( hour = "00" ) ? 0 : LTrim(hour, "0") */ hour := ( hour = "00" ) ? "れ'ー" : ( hour = "01" ) ? "いち" : ( hour = "02" ) ? "に" : ( hour = "03" ) ? "さ'ん" : ( hour = "04" ) ? "よ" : ( hour = "05" ) ? "ご" : ( hour = "06" ) ? "ろく" : ( hour = "07" ) ? "しち" : ( hour = "08" ) ? "はち" : ( hour = "09" ) ? "く" : ( hour = "10" ) ? "じゅー" : ( hour = "11" ) ? "じゅーいち" : ( hour = "12" ) ? "じゅーに" : ( hour = "13" ) ? "じゅーさん" : ( hour = "14" ) ? "じゅーよ" : ( hour = "15" ) ? "じゅーご" : ( hour = "16" ) ? "じゅーろく" : ( hour = "17" ) ? "じゅーしち" : ( hour = "18" ) ? "じゅーはち" : ( hour = "19" ) ? "じゅーく" : ( hour = "20" ) ? "に'じゅー" : ( hour = "21" ) ? "に'じゅーいち" : ( hour = "22" ) ? "に'じゅーに" : ( hour = "23" ) ? "に'じゅーさん" : "に'じゅーよ" ;; 「ふん」か「ぷん」かを判断するために ;; 分の一桁目を取得 min_one_digit := Mod(min, 10) ;; 分の二桁目を取得 min_two_digits := min EnvDiv, min_two_digits, 10 ;; 10 分以上のとき if ( min_two_digits ) { if ( min_one_digit = 0 ) { min := ( min_two_digits = 1) ? "じっ" : ( min_two_digits = 2) ? "にじ'っ" : ( min_two_digits = 3) ? "さんじ'っ" : ( min_two_digits = 4) ? "よんじ'っ" : ( min_two_digits = 5) ? "ごじ'っ" : 0 hun_pun := "ぷん" } else { min := ( min_two_digits = 1) ? "じゅー/" : ( min_two_digits = 2) ? "に'じゅー/" : ( min_two_digits = 3) ? "さ'んじゅー/" : ( min_two_digits = 4) ? "よ'んじゅー/" : ( min_two_digits = 5) ? "ご'じゅー/" : 0 min .= ( min_one_digit = 1 ) ? "い'っ" : ( min_one_digit = 2 ) ? "に'" : ( min_one_digit = 3 ) ? ";さ'ん" : ( min_one_digit = 4 ) ? "よ'ん" : ( min_one_digit = 5 ) ? "ご'" : ( min_one_digit = 6 ) ? "ろ'っ" : ( min_one_digit = 7 ) ? "な'な" : ( min_one_digit = 8 ) ? ";は'っ" : ( min_one_digit = 9 ) ? "きゅ'ー" : 0 hun_pun := which_hun_pun( min_one_digit ) } } else { min := ( min_one_digit = 1 ) ? "い'っ" : ( min_one_digit = 2 ) ? "に'" : ( min_one_digit = 3 ) ? "さ'ん" : ( min_one_digit = 4 ) ? "よ'ん" : ( min_one_digit = 5 ) ? "ご'" : ( min_one_digit = 6 ) ? "ろ'っ" : ( min_one_digit = 7 ) ? "な'な" : ( min_one_digit = 8 ) ? ";は'っ" : ( min_one_digit = 9 ) ? "きゅ'ー" : "れ'ー" hun_pun := which_hun_pun( min_one_digit ) } min := RegExReplace(min, "っ", "、", "", -1) hun_pun := RegExReplace(hun_pun, "ぷん", ";ぷ'ん", "", -1) Talk(hour . "'じ、" . min . hun_pun ) return } which_hun_pun( min_one_digit ) { hun_pun := ( min_one_digit = 1 ) ? "ぷん" : ( min_one_digit = 2 ) ? "ふん" : ( min_one_digit = 3 ) ? "ぷん" : ( min_one_digit = 4 ) ? "ぷん" : ( min_one_digit = 5 ) ? "ふん" : ( min_one_digit = 6 ) ? "ぷん" : ( min_one_digit = 7 ) ? "ふん" : ( min_one_digit = 8 ) ? "ぷん" : ( min_one_digit = 9 ) ? "ふん" : "ふん" return hun_pun } ; phrase: 喋る内容(音声記号列という名の文字列) ; speed:速さ(遅50~300速) ; sync:喋り終わるまで待つかどうか(真偽値) Talk(phrase, speed=100, sync=true) { static hModule, hMe If (!hModule) { hModule := DllCall("LoadLibrary", "Str", "AquesTalk2Da.dll", "Ptr") hMe := DllCall("AquesTalk2Da\AquesTalk2Da_Create", "Ptr") ; 合成エンジン作成 } If (sync) { Return DllCall("AquesTalk2Da\AquesTalk2Da_PlaySync", "AStr", phrase, "Int", speed, "UInt", 0, "Int") } Else { If DllCall("AquesTalk2Da\AquesTalk2Da_IsPlay", "Ptr", hMe, "Int") ; 喋り中なら DllCall("AquesTalk2Da\AquesTalk2Da_Stop", "Ptr", hMe) ; 止める Return DllCall("AquesTalk2Da\AquesTalk2Da_Play", "Ptr", hMe, "AStr", phrase, "Int", speed, "UInt", 0, "UInt", 0, "UInt", 0, "UInt", 0, "Int") } }