Javaで音声データのタイムストレッチ、ピッチシフトする方法

2018年11月22日

サンプリングレートをいじれば、ピッチシフトは簡単にできますが、テンポも2倍となってしまいます。

参考:
wavファイルのフォーマット
タイムストレッチとピッチシフトのアルゴリズム

概念的には簡単な話ですが、タイムストレッチを自作するのはとても大変です。調べていたらテンポ、ピッチ、再生レートを変更するためのオープンソースライブラリを見つけました。

参考:
SoundTouch in Android

SoundTouchはC++で作られているので、JNIで呼び出す必要があります。

AndroidでJNIを呼び出すには…

Android NDKが必要です。

Android NDKとは…

Native Development Kit(NDK)は、Android アプリで C および C++ コードを使用できるようにするツールのセットです。 NDK を使用して独自のソースコードをビルドしたり、事前にビルドされた既存のライブラリを活用したりできます。

うーん、NDKのセットアップが面倒ですね。
Javaのラッパーライブラリ無いか調べてみると、なんと作成した猛者がいらっしゃいました。

ありがたやありがたや。