memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

コーンフレーク。。。じゃない。テキストファイルから会話音声ファイルを生成するスクリプトを書いたったん

背景

偉い先生と一緒に担当している科目がありまして、前半は偉い先生、そして後半は僕なんですが。

4、5週間後くらい始まるので少しずつ準備を進めています。

で、とある回のスライドで以下のようなものを作りました。

たまにありますよね?理系の本で、先生と生徒が会話しているわざとらしいやつ。あれです。作っているうちにLINEに似せようと変に懲りだして。。。

f:id:ke_takahashi:20200605122028p:plain

これ僕が読むんじゃなくて、機械に読ませたら面白いんじゃね?と思ったわけです。

まぁ、暇です。

macならsayコマンドで簡単に喋らせることができます。便利ですよねぇ。ほんと。

qiita.com

で、この適当なスクリプトファイルを作って1行ずつ読み込んではsayコマンドをsystemコマンドで実行すればいいんじゃね?と誰でも思いつきますね。

で、それをサクっとやってみたわけです。こんな感じです。10分もかかりません。

なんか面白くなったので、どうせなら、ただしゃべるだけでなく音声ファイルにできたらあとでいろいろ利用できるよなぁ。。。って思ったんですね。

で、sayコマンドにoオプションがあるのでやってみたのですが、それだと1行ずつ音声ファイルができちゃうんですね。。。

たくさん生成された音声ファイルをあとで連結するコマンドがあれば、それをRubyで呼び出せばいけそうですね、と発想しました。

で、ぐぐった。

あった。

soxというコマンドです。偉い誰かさんが作ってくれたようです。超有名なffmpegでもできるんですがコマンドの指定方法が面倒なので却下しました。

以下のコマンドを叩くだけでインストールが完了します。これもmacのいいところです。

brew install sox

ちなみにsoxを知ったのは、このページでした。
stackoverflow.com

この段階のコードもすぐにつぶやきました。#つぶやきRubyってハッシュタグをつけました。これは「つぶやきProcessing」という活動を真似っ子しただけです。流行ってくれるといいな。。。と思うのです。最近のPythonブームで影が薄くなっていますから。。。Ruby界隈の偉い人が取り上げてくれたらなぁ。。。

で、ついでだから、Githubにコード載せて、デモとして面白みがでるように、これまた有名なコーンフレーク漫才?のスクリプトこちらのサイトからいただきました。

本題

で、完成したのが以下でーす。

会話文を書いたテキストファイルを引数で与えるとmp3に変換してくれます。

github.com

soundcloud.com

話者が単一のTTSはたくさんあると思いますが、会話させることを前提にしたアプリってあまりみたことがないように思います。意外と使えるんじゃないかな。。。って思います。

こんなことをやっているから貴重なやる気のある午前中がなくなっていきます。。。まぁ、いいですよね。余白は大事です。

では、また!