ランニングをダンスセッションにするMP3タイムストレッチ

目標ピッチトレーニング用に作ったMP3再生スピード変換プログラム。

前回は単純にwaveのライブラリを使ってサンプリングレートを強引に変えていたため、ピッチも変わってしまっていた

ちなみにやり方はいくつかあるらしく、Librosaでは(設定で直るのかも知れないが)音が籠もった感じで変換されてしまい、別途waveのライブラリを使ってタイムストレッチを試してみる。



これだと音質は保てるのだが、タイムストレッチで再生速度を上げるとピッチの音程も高くなってしまう。

まあランニング中に聴く曲なんて元々テンポの速い曲が多く、タイムストレッチして聴いてもそこまで違和感はない(たとえば男性の声が女性に聞こえるほどではない)ので十分実用に耐えうる状態ではある

ランのお供にMP3自動ピッチ変換プログラムを作る

が、それで違和感がなかったのは、テストで試した曲がたまたま変換後のBPMとたいして差がなかったから

ログで元楽曲のBPM、目標BPMと、どれだけタイムストレッチするか(速度が何倍になるか)を出しているが、そこまで大きな差がないことがわかる。



たとえばこちらの弱虫ペダルは元々191bpmなので、192bpmに変換したとしてもほとんど変わらない



が、違和感がMaxに達したのは安全地帯のスピード変換後の曲を聴いたとき。

玉置浩二の声が徳永英明に聞こえた時点でこりゃアカンと、ピッチ調整の必要性を痛感した(いや、徳永英明も好きですけど)。ステーキに豚汁が合わないように、個々が良くても曲と声質の食べ合わせ(バランス)によって違和感が出る。





Rubber Bandを使ってタイムシフト


前回のLibrosaのタイムストレッチを試してみるが、パラメータ等を変えてみてもやはり音が籠もるように変わってしまって元の音質を保てず



調べて見るとPythonではなくて汎用のRubber Bandというコマンドラインライブラリでタイムシフトができるようなので試してみる。



商用利用の場合は有償ライセンスが必要だが、自分用の変換にしか使わないので無料で使わせてもらえる。さらにPythonから実行する用のラッパーライブラリもあるのでffmpegのようにPython上からシームレスに実行できる。



ということでタイムストレッチ用のモジュールをやっつけで作る。



ちなみにタイムストレッチに加えピッチシフト用の機能もあるのでピッチ※を変えたい場合にも活用できる。

※やはりランニング用途と一緒に書くとわかりにくいが、ランニングではピッチ走法と呼ばれるように「ピッチ=1分間のステップ数=ステップ速度」という「速度」のイメージだが、音楽用モジュールの用語だとピッチ=音の高低(カラオケで音程を上げたり下げたりするような)で、速度を変えるのはタイムストレッチと呼ばれる。詳しくはウィキペディアをご参照いただきたい。

タイムストレッチ とは、オーディオ信号のピッチはそのままで、テンポ(持続時間)だけを変更する処理である。 ピッチシフト (またはピッチスケーリング) はその逆で、テンポ(持続時間)はそのままで、ピッチだけを変更する処理である。同様な方法で、テンポやピッチを個別もしくは両方同時に時間変化させる事もできる。

タイムストレッチ/ピッチシフト

実際に変換して聴いてみると、ピッチが変わらずにスピード変換できていて音質もよくて言うことなし。

タグ情報もコピーする


これで十分なのだがせっかくだからMP3のタグ情報もコピーすることに。

ランニング中にタグ情報を見たりすることはないので完全に蛇足の世界・・・。

タグ情報はpydubのmediainfoでも取れるし、MutagenライブラリをインストールしてもMP3のタグを設定できるので、Mutagenも使って元ファイルのタグ情報をそのままコピーする。



といってもデバッグしながらでけっこう時間がかかってしまった。

音楽ファイルについているタグもいろいろ種類があって、MP3でもID3v1とID3v2で全然仕様が違ったり、ID3v2でもマイナーバージョンが分かれていたり、日本語の場合は文字化け問題もあったりで、いろんなファイルの保持情報をチェックしながら苦労する。



が、なんとかアルバムカバーのサムネイル画像含めてタグ情報を保持することに成功。



実走でピッチトレーニング


適当に手持ちの音楽を192bpmのスピードに変換して実走へ。

ピッチやペースを試しやすいトラックを走る。



音楽に合わせて走り、あとからログを確認するとちゃんと目論見通り192bpm前後をキープできている。とりあえずピッチを維持して走ることに意識をすると追い込む気はなくても自然とストライドが伸びていくのでちょうどいい感じ(最後の1kmだけ意識的に上げたが)。



回復走用、ジョグ用、ペース走用、ルームランナー用などに分けていろんなピッチバージョンを用意。



ある意味、ランニングというよりは音楽に合わせて踊っているような、エアロビかダンスをしているのに近い感覚になってくるので、これはこれで気持ち良く走る一手法になるのかもしれない。

0 件のコメント :

コメントを投稿