Macにはsayというコマンドがあって、喋れる。いや昔からUnixにはsayがあって、英語をなんとなく喋れていたんだけど、いつの間にか日本語も喋れるようになっていた。これだから最近のUnixは…
- say -v Kyoko “渡辺です。いつもお世話になっております。”
そして、Unixには昔からsoxというプログラムがあって、これが音声ファイルに色々なフィルタを噛ませることができる。例えば音声ファイルのピッチ(音程)を変更することもできる。
sayが出す音声は音楽ではなく人が喋るイントネーションに合わせようとするので、そのままつなげても歌になるわけではないし、どのくらい音程を動かせば正しくなるのか分からない、というところ。pitch detectionのアルゴリズムは色々あるようだが、手軽に使えるものはないだろうか…
と思っていたのだが、実はGoogleがREAPERというプログラムを数年前に公開していて、音声ファイルの音程を判定することができる。組み合わせれば、うちのMac(Linuxでもいいけど)は生まれながらにして歌えるのでは?
- REAPERのbrew formula→https://github.com/wtnb75/homebrew-test/blob/master/Formula/reaper.rb
- 歌を歌いたいプログラム→ https://gist.github.com/wtnb75/9a77010255eab651fed765fb490f7aa3
まだ、歌えないみたいです…
(追記) 2018/01/23
ちゃんと歌えていない原因について。歌詞を同じ(例えば「あ」のみ)とかにすると、それなりに音程が合って聞こえる。REAPERがsayの出力の音程を正しく検出できていない(もしくは、出力のパースが間違っている)のが原因かな?
(追記) 2018/01/27
REAPERの出力のP:は音声ファイル全体のpitchを示すものではないのかも。F0ファイルの中身を見ると少しは良さそう。また、Pythonで使えるaubioというモジュールがあって、pip install aubioで使える。この中にpitch detectionの機能があるので、そちらを使ってもいいと思う。