SVX日記
2018-10-03(Wed) メトロノームを自作する
例のボーカルの練習のため、ちょくちょくひとりでカラオケに行っては、自分の歌を録音しては、ヘコみまくる毎日なのだが、例によって、音程もダメだが、リズムもダメなワケだ。
リズムをなんとかするにはどうするかというと、メトロノームを使って練習する方法があるらしい。こうなると、性格的に意識をテクノロジカルな方向に向ける人であるところの自分は、メトロノームを作ってしまいたくなってしまうワケだ。
んが、イマドキだと「メトロノームを自作」するなどというと、その実現方法は無数に考えられる。やたらと自分で作りたがる性格とはいえ、リアルに物理的ハードウェアとして作るなどと、必要以上に苦労する趣味はないので、できるだけラクに楽しく「メトロノームを自作」しようとすると……先のcuickdtmでメトロノームの音だけ作ってしまえばいいんじゃね? ってことになる。
<DSP OFF>
<MIDI midi/metronome>
<WAVE midi/metronome:M:48000>
! clear
! t120
@ (stroke-0) <metro-1>
@ C C C C C C C C
@ C C C C C C C C
:
これで、テンポごとに複数バージョンのmp3を作り、PSPに入れれば……と、ここでフト思いついた。PSPのミュージックプレイヤは再生速度固定なのだが、ビデオプレイヤは上下ボタンにより0.5倍〜2.0倍まで0.1刻みで再生速度可変なのだ。ということは、mp3でなくmp4を作れば、テンポごとに複数バージョンを作る必要がなくなる。
そうなりゃ、ffmpegでmp3をmp4に変換すればいい、ということになる。んが、せっかくビデオ形式であるmp4にするなら、映像の方もどうにかしたい。いや、この時点で「できるだけラクに」ではなくなっているような気がするが……まぁ、やりたくなったらやっちゃうわ。
さて、どうやるか。アニメーションgifは作ったことがあるが、mp4ビデオを作ったことはない。んが、似たようなもんだろう。ビデオのソースは……自分が指揮棒を振ってるのを実写撮影してもいいのだが、ここはCGで行こう。レイトレーシングで……はなく、いつものTrueLegacyGraphicsCairoを使ってpngをレンダリングする。こんな感じ。
速いテンポにしても10分以上は連続して使いたいということで、テンポ120で1600秒分のpng画像をレンダリングすることにした。24fpsなので38400枚。これにさっきcuickdtmで生成した1600秒分のwav音声をくっつけて、ffmpegでPSPで再生可能なmp4ビデオ形式に変換する。
$ ffmpeg -y -r 24 -i metronome.d/%06d.png -i midi/metronome.wav -vcodec libx264 -profile baseline -s 480x272 -r 24 -b 600k -acodec libfaac -ac 2 -ar 48000 -ab 125k metronome120_psp.mp4
こんな感じに仕上がった。悪くない。
ところで、メトロノームとは関係ないが、前回のmelodにはちょっと問題があって、音が切れ切れになっていたのも修正した。メトロノーム生成スクリプト込みで、cuickdtmのパッケージを置いておく。