Tone.jsでピッチシフト(曲のテンポを維持したまま、キーを変更する)ができることを知ったので試してみました。
結果を先に言うと、キーを下げるとロボットみたいになって、歌に対して実用的に使える状態にはできませんでした。キーを少し上げるくらいなら良い感じです。
単にTone.jsの関数を呼んでいるだけですが、せっかくなので記録を残しておきます。
実際に動作しているものはこちら(個人的なページ)
Playerにファイルを読み込ませ、PitchShiftを経由してMasterへ流せばOK。
pitchshift.js抜粋
var URL = URL || webkitURL;
let source = null;
let semitones = 0;
let shift = null;
// ファイル選択ダイアログなどで選ばれたものをtargetFileとして取得
function setAudio(targetFile) {
let src = URL.createObjectURL(targetFile);
// ボタン押下などでsemitonesの値を変えれば再生中のキーも変わる
shift = new Tone.PitchShift({
pitch : semitones ,
windowSize : 0.03 ,
delayTime : 0 ,
feedback : 0
}
);
source = new Tone.Player(src);
source.connect(shift);
shift.toMaster();
source.autostart = true;
}
うまく調整する方法をご存知の方がいらっしゃれば教えてもらえると幸いです。
WebAudioを使って自力でピッチシフトの実装にも挑戦してみましたが、現状の私には難易度が高くて諦めました。