知り合いの DJ Amway という人に頼まれて(というか、とあるマッシュアップを作ってもらう交換条件で) Mash-up Calculator (BPM Calculator より名称変更) という物を作りました。BPMが異なる曲同士のマッシュアップをする際によく行う計算をまとめた javascript アプリケーションです。
ちなみに "BPM and Length" は、「テンポxxでn分以上の曲を作らなきゃいけない」等の制限がある場合に、何小節以上の曲を作ればいいか、等を求めるのにも使えます。そんな感じで、マッシュアップする人以外の方にも便利だと思います。
僕はマッシュアップを作った事が無いのでよく分からないのですが、大体次の様な流れで使用するという事でした。
各曲毎の作業
- BPMを求める
- 曲の一部を8小節くらいのわかりやすい範囲で切り取って、その譜面上の長さと時間の長さから、 "BPM and Length" を使ってだいたいのBPMを求めます。
- さらに正確なBPMを求めて、プロジェクトに設定する
- 途中でテンポが変わらない、できるだけ長いエリアを選んで、 1. で求めたBPMをベースに "BPM Adjust" を使って有効桁数いっぱいまで正確なBPMを割り出します。
- 上に載せる方の曲は、適当な箇所で切り刻む
- ベースにする曲はそのままで、上に載せる曲の方にはタイムストレッチをかけます。この際に「曲のお尻の方に行く程有効数字の誤差でテンポがずれていく」現象が必ず起きますので、上に載せる方の曲については切りのいい所を目安に、あらかじめ8小節〜16小節で切断したクリップを作っておきます。
マッシュアップ作業
- 上に載せる曲の各クリップをタイムストレッチする
- 上に載せる曲の各クリップをベースにする曲の空きトラックに配置して、順次タイムストレッチをかけてテンポを合わせていきます。この際のスピードの変更率を "Translate BPM to BPM" で求めておきます。 DJ Amway によると、彼はスピードの変更率から音程がどれだけ変わるかを "Speed and Pitch" で求めてそれが 0.1 半音程度以内の場合は、音程のズレよりも音質を優先してタイムストレッチを行わず、再生ピッチだけを調整するそうです。音感のある人から気持ち悪がられそうですけど。
- ピッチを変更してキーを合わせる
- タイムストレッチを使用していて曲同士のキーも合わせる場合、あらかじめキーボード等を使用して、何半音分キーが違うのかを求めておきます。ピッチ調整を「半音」単位でなく「%」等で指定する必要があるアプリケーションを使用している場合、 "Speed and Pitch" を使用して下さい。
ローカルに保存して使用したい場合は bpmcalc.html と calcform.js をディスクに保存して、ブラウザで bpmcalc.html を開いて下さい。
最後に、 DJ Amway からのメッセージです。
この計算機があればこれまで紙とGoogle計算機でやってた計算が10倍速く終わるんだ。だから、面倒臭い下準備はさっさと済ませて肝心のマッシュアップのデキに注力できるって事。ところで今年はネズミ年、といえばオレの年って事で、ガンガンやってくから期待してくれよな。
Mash-up Calculator を作成する為に、「各フォームの入力値が一定のルールで相互に影響する」フォーム群の値入力時の再計算を行うライブラリ calcform.js を作成しました。次の特徴を持ちます。
- BPMの計算に限らず、汎用的な計算フォームを作成する事ができる
- このライブラリが行うのは「あるフィールドが更新されたら、それに依存するフィールドの値を更新する」事。更新は定義した依存関係によって何世代も伝搬しますが、一度更新したフィールドは更新されません。
- 使用する際は各フィールド毎に「依存するフィールド」と「フィールドの計算式」を定義するだけでよい
- 値の入力時に連動して更新されたフィールドをハイライトする機能付き
使い方は、 calcform.js のソースに記載してあります。 bpmcalc.html のソースとコメントも使用する際の助けになると思います。