1

wavファイルが再生するキーを移調するアプリを書きたいです(楽しみのために、すでにこれを行っているアプリがあることを知っています)...これがどのように達成されるかについての私の主な理解は、

1) オーディオ ファイルを非常に小さなブロック (たとえば 1/10 秒) に分割します。

2) 各ブロックで FFT を実行する

3)必要なキーに応じて、周波数空間を上下に位相シフトします

4) 逆 FFT を使用して、各ブロックを時間領域に戻します。

5) すべてのブロックを接着します

しかし今、変形したブロックを再び接着しようとすると、連続していないのではないかと考えています。継続性を保証するためにこれを行う方法についてのアイデアはありますか、それとも何も心配していませんか?

4

4 に答える 4

2

各ブロックの時間サンプルを半分に重ねて、最初のブロックの後の各ブロックが、前のブロックの最後のN/2サンプルとN/2の新しいサンプルで構成されるようにします。変換する前に、必ずサンプルにウィンドウを適用してください。

周波数をシフトした後、逆FFTを実行し、各ブロックの中央のN/2サンプルを使用します。IFFT後の最終ゲインを調整する必要があります。

もちろん、時間サンプルを正弦波と混合してからローパスフィルタリングを行うと、時間領域でも同じシフトが得られます。ミキサーの周波数は、望ましい周波数差になります。

于 2010-04-12T19:34:32.140 に答える
2

音声については、 PSOLApitch-shiftingを参照してください。これは、および/または基本的なオーバーラップ加算法よりも少し洗練された一般的なアルゴリズムですtime stretching/compressionが、それほど複雑ではありません。

音楽などの音声以外のサンプルを処理する必要がある場合は、いくつかの可能性がありますが、他の回答で言及されているオーバーラップ加算 FFT/変更/IFFT アプローチがおそらく最善の策です。

于 2010-04-13T06:48:36.520 に答える
1

将来それを試す人のために、この主題に関するこの素晴らしい記事を見つけました!

于 2010-04-13T05:46:11.090 に答える
0

個々の wav を元に戻すために、ブロック間のゼロ交差を見つける必要がある場合があります。そうしないと、ブロック間でクリック音やポップ音が発生することがあります。

于 2010-04-12T19:28:39.883 に答える