数字を読み上げる音声ファイルを作る

主観評価実験をするときに、刺激を逐次呈示して、それに対する評価を記述してもらう方法があります。10個程度の刺激ならあまり問題にはならないのですが、刺激が多くなると、いま何番目の刺激なのか、いま使っている回答欄は正しいのか、など不安になることがあります。

それに対して、画面に回答番号を表示する、回答番号を読み上げる、などの方法が考えられます。アナウンサー訓練を受けた人に番号を読み上げてもらっても良いのですが、今回は回答番号の音声ファイルを音声合成で作ってみました。

Mac OS Xではターミナルからsayコマンドを使うことで簡単に音声合成 (text-to-speech) ができます。たとえば「say 1」とやれば、選んでいる音声に応じて「one」あるいは「いち」などと読んでくれます。オプションをつけることでAIFFファイルに保存もできますし、話す速度を調整することもできます。

以下のプログラムでは、1〜Nのファイルを作成するために、Matlabからsystem関数でsayとsoxを呼び出しています。WAVファイルとして保存する必要がなければsoxは不要です。*1

fs = 44100;
voice = 'kyoko';
N = 100;

for n = 1:N
  system(sprintf('say --voice %s --rate %d --output-file=tmp %d', voice, fs, n));
  system(sprintf('sox tmp.aiff %03d.wav', n));
end
system('rm tmp.aiff');

「man say」で見られるマニュアルには「対応している音声では」という但し書きがあるので、上記プログラムでは44,100Hzを指定していますが実際には22,050Hzで保存されます。

*1:こういうことにMatlabを使うのはoverkillですが、Matlabを常用しているので・・・