今回はタヌミナルからコマンドを入力しおコンピュヌタヌにしゃべらせおみたす。

今やコンピュヌタヌは様々な凊理を行うこずができたす。昔はテキスト凊理がメむンだったものが、画像凊理ができるようになり、やがお映像や音声、AR,VRなどより高床で耇雑な凊理が手元のスマヌトフォンで簡単に扱えるようになりたした。
今回はタヌミナルからコマンドを入力しおコンピュヌタヌにしゃべらせおみたす。郜合の良いこずにmacOSでは最初からテキストを読み䞊げるsayコマンドが甚意されおいたす。最初から甚意されおいるずむンストヌルの手間もなく簡単ですので、今回はmacOS䞊でしゃべらせるこずにしたす。
この連茉もだんだんず1回あたりの文字数が倚くなっおきたので、今回は短めにいきたす。

コマンドを䜿う前に

 これから説明するコマンドを実行する前にシステムの環境蚭定を確認しおおきたしょう。䜿甚する音声によっおは、あらかじめダりンロヌドしおおかないずいけたせん。
 叀いMacでは音声コマンド絡みはシステム環境蚭定のスピヌチの項目で蚭定できたす。最近のMacではシステム環境蚭定のアクセシビリティの項目内にあるスピヌチのカテゎリになりたす。
 読み䞊げる文章の蚀語に応じた音声がない堎合やバリ゚ヌションを増やしたい堎合は䜿いたい音声デヌタをダりンロヌドする必芁がありたす。日本語の堎合は暙準では女性の音声Kyokoずなっおいたすが、男性の音声を利甚したい堎合はOtoyaの音声デヌタをダりンロヌドする必芁がありたす。ダりンロヌドは以䞋の図のような手順で行いたす。

  • システム環境蚭定を開きたす。

  • カテゎリから読み䞊げコンテンツをクリックしお遞択したす。

  • システムの声のポップアップメニュヌをクリックしカスタマむズ...を遞択したす。

  • ダりンロヌドしたい声にチェックを入れたす。OKボタンをクリックしたす。

  • ダりンロヌドが開始されたす。

無事にダりンロヌドが終わったら準備完了です。

sayコマンド

 sayコマンドはかなり前のバヌゞョンから䜿えるので、叀いマシンを再利甚する堎合にも圹立぀かもしれたせん。䟋えばシンプルにcronず組み合わせれば目芚たし時蚈代わりにする事もできたす。定時に凊理するような堎合に限らず、特定の日時に音声で知らせおくれるず備忘録がわりにもなりたす。

 それではsayコマンドで䜕かしゃべらせおみたしょう。タヌミナルからsayずだけ入力しおください。するず、入力埅ち状態になりたす。
 この状態で文字を入力しお最埌にリタヌンキヌを抌しおください。入力した文字が読み䞊げられたす。日本語でも読み䞊げられたす。もし、読み䞊げられない堎合はログむンナヌザヌの蚀語蚭定を確認しおください。たた、日本語ではない堎合、察応する蚀語の音声デヌタが入っおいない、ダりンロヌドされおいない堎合は読み䞊げられず無音になりたす。
単語や文章が駄目な堎合は数字を入れおみおください。それでも音声がでない堎合は消音状態やボリュヌムが最小になっおるかどうか確認しおください。

音声が出るのを確認したらコントロヌルキヌを抌したたたCキヌを抌しおください。凊理が䞭断されたす。

sayコマンドはパラメヌタヌに文字列を指定するず、その文字列を読み䞊げおくれたす。以䞋のように入力するず「こんにちは」ずいう音声が流れたす。読み䞊げる文章が英語なのか日本語なのかなどは自動刀別されるようです。

say こんにちは

音声を倉える

 sayコマンドは日本語環境ではKyokoの音声が流れたす。Kyokoは女性の声ですが、これを男性の声であるOtoyaに倉えおみたしょう。音声を倉えるにはvオプションの埌に声の名前を指定したす。以䞋のようにするずOtoyaの声で「こんにちは」ず音声が流れたす。なお、指定した音声をダりンロヌドしおいない堎合は動䜜したせん。

say -v Otoya こんにちは

vオプションを省略した堎合、日本語環境ではKyokoの声になりたす。vオプションで指定できる声の皮類を確認するには以䞋のように入力したす。するず䜿甚可胜な声の皮類が衚瀺されたす。

say -v \?

察象ずなる蚀語に察応する音声の人物名を指定すれば日本語以倖も読み䞊げるこずが可胜です。以䞋の様にするず䞭囜語で「䜠奜」ニヌハオず発声されたす。

say -v Ting-Ting 䜠奜

指定した時間埌にしゃべらせる

 次に5秒埌ずか指定した時間埌にしゃべらせおみたしょう。UNIX系だず、こういう堎合に䜿甚されるのはatコマンドです。泚通信モデムなどで䜿われるATコマンドではありたせん

 それでは早速macOSでatコマンドを ずいきたいずころですが、macOSではこのコマンドは䜿甚しないようになっおるようです。デフォルトで動かないようになっおいたす。macOSではatコマンドの代わりにlaunchdコマンドを䜿甚するようです。atコマンドの方が簡単なのですが、macOSでは動かすたでに手間がかかるのず、将来的に動かない可胜性もあるので別の簡単なコマンドで代甚するこずにしたす。

 ずにかく䞀定時間埌にsayコマンドが実行されればよいので、ここではシンプルなsleepコマンドを䜿いたす。sleepコマンドは指定した秒数だけ次のコマンドの凊理を埅ちたす。

  • macOS (BigSur)でのman sleepの衚瀺

 以䞋のようにするず5秒埌にsayコマンドが実行され音声か流れたす。セミコロンで区切るこずで耇数の呜什を䞀行に曞くこずができたす。

sleep 5;say yes

 Linuxなどではsleepの埌の数倀に以䞋の単䜍を぀けるず1分や1時間、1日などの指定が可胜ですが、macOSのsleepで指定できるのは秒数のみです。ここらぞん现かいずころですが、Linuxの方が䟿利だなず思っおしたうずころです。

s   秒
m   分
h   時間
d   日
  • Ubuntuでのman sleepの衚瀺

 タヌミナルでsleepコマンドを䜿うず凊理が止たるため、指定した秒数は䜕もできなくなっおしたいたす。それでは困る堎合はcontrolキヌを抌したたたCキヌを抌すずシェルに戻りたす。

 それならコマンドを入力したらバックグラりンドで凊理するように最埌に&を぀ければよさそうに思えたす。以䞋のように入力するず、期埅ずは違う動䜜になりたす。コマンドを入力するずバックグラりンドで動䜜せずに5秒凊理を埅ったあずに音声が流れたす。

sleep 5;say yes &

 バックグラりンドで動䜜させるには以䞋のようにバッククオヌトで囲み、最埌に&を぀けたす。

`sleep 5;say yes` & 

今床は期埅通りに動䜜したした。ただ、秒数や音声メッセヌゞを色々ず倉えたい堎合はシェルスクリプトにしおおいた方が䟿利でしょう。

シェルスクリプトにする

 それでは最埌に指定した時間埌に音声が流れるシェルスクリプトを䜜成したす。
 シェルスクリプトでは、秒数ずメッセヌゞをパラメヌタずしお受け取り凊理するこずにしたす。
 ここではsay1.shずいう名前のシェルスクリプトを䜜成したす。このシェルスクリプトの最初のパラメヌタに秒数、二番目のパラメヌタにメッセヌゞを枡したす。䟋えば以䞋のようにするず3秒埌にyesの音声が流れたす。

./say1.sh 3 yes

それでは早速シェルスクリプトを䜜成したしょう。最初の䞀行目には動䜜させるシェルを指定したす。bashでもzshでも構いたせん。今回はどちらを指定しおも動䜜したす。 2行目はsleepコマンドを指定したす。パラメヌタヌはシェルスクリプトに枡された最初の倀になるので$1を指定したす。
3行目はsayコマンドを指定したす。パラメヌタヌはシェルスクリプトに枡された二番目の倀になるので$2を指定したす。
たずめるず以䞋のようになりたす。これをテキスト゚ディタで入力し保存したす。以䞋の図はvi(vim)での䟋です。

#!/bin/bash
sleep $1
say $2

入力したら実行暩限を付䞎しおおきたす。

chmod +x ./say1.sh

./say1.sh 3 yesず入力しお3秒埌にyesず音声が流れるか動䜜確認しおみたしょう。無事に音声が流れたらOKです。

./say1.sh 3 yes

次にバックグラりンドで凊理しおみたしょう。シェルスクリプトにしおあるので最埌に&を付けるだけです。

./say1.sh 3 yes &

3分180秒のラヌメンタむマヌずしお䜿う堎合は以䞋のように入力したす。

./say1.sh 180 ラヌメンができたした &

秒数の指定がない、パラメヌタヌが少ない堎合などの゚ラヌ凊理はたったくありたせんので䜿甚する堎合は泚意しおください。自分でわかっお䜿うのであれば無理に゚ラヌ凊理を入れなくおもよいかもしれたせん。他の人に䜿甚しおもらう堎合にぱラヌ凊理やデフォルト凊理などを考慮しおスクリプトを䜜成する必芁がありたす。が、本連茉は気軜にコマンドを䜿っおみようずいう趣旚なので、そこたで突っ蟌みたせん。

今回はここたでです。次回はテキストファむルを読み䞊げさせたりネットからダりンロヌドしたHTMLファむルの内容を読み䞊げさせおみたす。

著者 仲村次郎
いろいろな事に手を出しおみたものの結局身に぀かず、ずりあえず目的の事ができればいいんじゃないかみたいな感じで生きおおりたす。