パソコンにしゃべってもらう

はじめまして、入社1ヶ月の新人、もうすぐ還暦プログラマKASAです。

 

テスターの仕事をしていますと、たまに音声入力を要求される場面に遭遇します。

人前で台本(テストでしゃべる言葉が書いてある)を読むのも恥ずかしいのに、それが英語だったりしたらもうアウトです。

適当な台本だと日本語は書いてあるけど英語の記載がないのに英語の発声を要求したりします。

 

そんな現場で考えたのがgoogle先生に代わりにしゃべってもらう作戦でした。

(※業務で使う際は利用規約等を確認ください、当方では責任を負いかねます)

 

 

ではどうするかです。

 

 

googleの翻訳のサイトを開きます。

 

開いたら日本語→英語となっていることを確認して

日本語(左の方)にしゃべらせたい文章(日本語)を入力します。

 

すると英語訳が右に表示されますね。

 

ここで日本語の下のスピーカーアイコンを押すと日本語をしゃべってくれます。

英語の下のスピーカーアイコンを押すと英語でしゃべってくれます。

 

やりました!これなら恥ずかしくないです。

 

 

ここからが本番です。

ボタンを押したら指定した文章をしゃべってもらえるようにしましょう。

前は「sikulix」+Excelで実装したのですが、今回は「SeleniumBasic」の勉強もかねて「SeleniumBasic」+Excelで実装してみます。

今回使うブラウザはChrome」とします。

 

 

まずはソフトを揃えます。

SeleniumBasic をインストール(登録)します。(アプリではなくDLLです)

google先生に「SeleniumBasic インストール」と聞けばわかると思います。

 

多分SeleniumBasicのインストールを調べると書いてあると思いますが

「seleniumChromeDriver(seleniumWebDriver)」を、利用する「Chrome」のバージョンに併せて展開(上書き)してください。

 

※忘れたときに出るエラー

 

 

また、SeleniumBasicがExcelで使えるようにExcelを起動して「Visual Basic※」を開いて「ツール」→「参照設定」で「Selenium Type Library」にチェックを入れてください。

※Excelの「開発タブ」が有効になっている必要があります。

※忘れたときに出るエラー

 

 

ここまでできたら

Excelのシートにボタンを貼り付けます。(「挿入」からフォームで「ボタン」を選択)

 

 

マクロの登録」が表示されたら「新規作成」を押すと

 

 

コード入力ウインドウは以下のようになると思うので「Sub…」と「End Sub」の間に下のコードを挿入します。

(※文章では折り返して記述されることがありますがキャプチャ画像のように1行で書く部分があります。

 

 

Dim sURL As String

Dim srh As String

 ‘ Selenium Driverを使う

 Dim driver As New ChromeDriver

 ‘ 翻訳ページを開く

 driver.Get “https://translate.google.co.jp/?hl=ja&sl=ja&tl=en&text= &op=translate”

 ‘ A1セルから発話文字列挿入

 srh = Range(“A1”).Value

 srh = “ ” + srh + “ ”   ”発話(元)ボタンが見えない場合はここを調整

 driver.FindElementByCss(“#yDmH0d > c-wiz > div > div.WFnNle > c-wiz > div.OlSOob > c-wiz > div.ccvoYb > div.AxqVh > div.OPPzxe > c-wiz.rm1UF.UnxENd > span > span > div > textarea”).SendKeys (srh)

 Application.Wait Now() + TimeValue(“00:00:01”) ‘ちょっと(1秒)待つ

 ” 発話(元)ボタンを押す

 driver.FindElementByXPath(“/html/body/c-wiz/div/div[2]/c-wiz/div[2]/c-wiz/div[1]/div[2]/div[3]/c-wiz[1]/div[4]/div[2]/div/div[2]/div/span/button/div[3]”).Click

 ” 終了待ち(ここで時間待ちかボタン押下待ちをしないとすぐ終わって発話できない)

 ‘ボタン押し待ち

 sURL = driver.URL

 MsgBox sURL, Title:=”処理完了”

 

 

ここまできたらExcelのシートA1セルに好きな文章(日本語)を入力して、さっき作成したボタンを押してください。

句読点とかの入れ方でしゃべり(アクセント)が変わります。

 

うまくいけば

Chromeが起動→翻訳ページが表示される→A1セルの文章が勝手に入力される→音声を聞くボタンが勝手に押されてしゃべる

となるはずです。

多分この時Excel側では「処理完了」のダイアログが表示されているはずです。

ダイアログの「OK」ボタンを押すとChromeは終了します。

動かない場合はExcelのマクロが有効になっているか確認してください。

 

 

同様に新しいボタンをシートに貼り付け、内容を以下にします。

 

 

Dim sURL As String

Dim srh As String

 

Dim driver As New ChromeDriver

‘ヘッドレス起動

”ヘッドレス起動を有効にすると、画面が表示されない

driver.AddArgument “headless”

driver.Get “https://translate.google.co.jp/?hl=ja&sl=ja&tl=en&text= &op=translate”

 

” 発話文字列挿入

srh = Range(“A1”).Value ‘ 翻訳側のボタンは隠されないので配慮不要

driver.FindElementByCss(“#yDmH0d > c-wiz > div > div.WFnNle > c-wiz > div.OlSOob > c-wiz > div.ccvoYb > div.AxqVh > div.OPPzxe > c-wiz.rm1UF.UnxENd > span > span > div > textarea”).SendKeys (srh)

 

Application.Wait Now() + TimeValue(“00:00:01″)

” 発話(翻訳)ボタンを押す

driver.FindElementByXPath(“/html/body/c-wiz/div/div[2]/c-wiz/div[2]/c-wiz/div[1]/div[2]/div[3]/c-wiz[2]/div[6]/div/div[4]/div[1]/div[2]/div/span/button/div[3]”).Click

 

” 終了待ち(ここで時間待ちかボタン押下待ちをしないとすぐ終わって発話できない)

‘時間待ち(5秒) 発話している時間以上必要

Application.Wait Now() + TimeValue(“00:00:05”)

 

 

今度はボタンを押してもChromeは見えませんが、翻訳された音声が聞こえると思います。

上のコードのコメントを見ながら差を見つけてください。

 

 

今回苦労したのは発話ボタンを押す部分です。「FindElementByCss」では動かず「FindElementByXPath」を見つけるのに時間がかかりました。

 

注意点として上記のやり方だと音声が出るまでに時間がかかります

 

実用的にするには「あらかじめ起動してあるChromeを使う」、「自分で起動したChomeを終了させずにそのまま次の発話を行えるようにする」などの工夫が必要でしょう。

Excelベースなので、テストの自動化やRPA(ロボティック・プロセス・オートメーション)を試したい場合など良いと思います。

 

 

最後になりましたが、

私のモットーは「コンピュータは人を楽にさせるためにある」です。

 

そうです、パソコンには自分がしたくないことをさせれば良いのです。

 

一部では「退屈なことはpythonにやらせよう」が流行っているようですが、私は今から25年前から実践中です。

必要ならソフトウエアだけでなくハードウエアも作ります。

 

1つのUSBメモリを2つのPCでソフトで切替えて使える装置とかも作りました。ソフトウエアのUSBによるインストールテストとかに使います。 (そのうちここで書くかもです)

「地道にやってるのと時間変わらない」と言う人も多いですが、単純作業という「苦」をなくして製作という「楽(しい)」な作業ができるわけです。(思いには個人差があります(笑)…)

いずれにしても資産として残せますし、自分の新しい知識も増えます。うまくいけば売りつけて稼ぐこともできるかもしれません。

 

 

「こんな単純作業もういや」という皆さん、弊社にご相談ください。

もしかしたらお手伝いできるかもしれません。