min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

macOS Mojave sayコマンドにサンプル文字列を喋らせる(say -v ? の内容を発音する)→ xargsでdelimiter指定がムズい

f:id:min117:20190608151100p:plain
macOSはsayコマンドで引数に指定した言葉を音声発音してくれる。

f:id:min117:20190608145459p:plain

Mac所有者は試してみると結構楽しい。

 

もちろん日本語も話せる。f:id:min117:20190608145444p:plain

 

say -v オプションにハテナマークをつけると、発話する言語とサンプル文字列を表示してくれる。

 

$ say -v ?

f:id:min117:20190608145613p:plain

 

 

 

これをawkで区切って各言語のサンプル文字列をループで喋らせたい難しいのは「発話文章がスペースで区切られている」から区切り文字(delimiter、デリミタ)に空白スペースを使っただけではうまくいかない

 

$ say -v ? | awk -F# '{print $1,$2}' | awk -F¥ ¥ ¥ ¥ ¥  '{print $1,$5}'

f:id:min117:20190608150135p:plain

 

とりあえずこれをxargsに食わせて喋るかテスト。

orebibou.com

 

xargs -t は、実行するコマンドを表示してくれる。

xargs -n は、渡される引数の個数の指定。

 

$ say -v ? | awk -F# '{print $1,$2}' | awk -F¥ ¥ ¥ ¥ ¥  '{print $1,$5}' |  xargs -t -n 2 say -v

f:id:min117:20190608150702p:plain

ダメ。xargsの-n指定で渡す引数の数によって、読み上げられる文章が違っちゃう(文章に含まれるスペースの数はマチマチだから)。

f:id:min117:20190608150859p:plain

例えばfindコマンドの-0みたいに、スペースを代替できる機能がawkにあれば何とかなると思うんだが。

 

なかなかにムズい。あとでゆっくり試す。