周波数を維持しながら音楽の再生を遅くする


10

音楽オーディオを遅い速度で再生すると、ピッチ(周波数)が下がります。周波数を同じに保ちながら曲の再生を遅くするツールと理論はありますか?ウィンドウ化されたフーリエ変換またはウェーブレット変換を実行できると思います。ウィンドウサイズを事前に選択するか、ウェーブレットベースを動的に選択する必要があるようです。それを行うための具体的で詳細な理論と応用はありますか?


1
以下の回答に加えて、詳細についてはこのリンクを参照してください。
A_A 2016

回答:


5

ええ、私たちの一部はそれを行うことができます、あなたはピッチに影響を与えずにスピードを上げたり下げたりできます、何人かの人はタイムストレッチのこのアプリケーションを呼び出します、それを行うさまざまな方法がありますあなたにとって最善の方法は、それぞれの長所と短所があります。

時間領域:

タイムドメインでは、次のようなテクニックを試すことができます。

  • TDHS(時間領域ハーモニックスケーリング)
  • SOLA(同期オーバーラップ追加)
  • PSOLA(ピッチ同期オーバーラップ追加)
  • WSOLA(波形類似性重複追加)

長所:高速で、一部のアルゴリズムは理解しやすく、モノフォニックサウンドの品質が高い

短所:一般に、正しい位置に接続するには非常に優れたピッチトラックが必要ですが、これは難しいため、ピッチトラックが失敗するか、ポリフォニックサウンドで機能しない場合、このアルゴリズムは多くの不具合/アーティファクトを生じます。出力音に。

周波数領域:

私が周波数領域で知っているすべてのタイムストレッチは、位相ボコーダー技術に基づいています。

長所:ポリフォニックまたはモノフォニックのサウンドで機能します。

短所:すべての数学を理解するのは難しいかもしれませんが、実装は少し難しいですが、時間領域コードのように高速ではありません。音声の場合、時間領域の結果を好むため、標準フェーズボコーダーの結果を改善するためのいくつかのトリックは共有されません。

ウィンドウとホップサイズはフェーズボコーダーの品質の鍵の1つであると言えます。通常4x、再合成へのオーバーラップを選択します。4096私の耳にはサイズの1つのハンウィンドウで十分です(もちろん、このサイズの処理能力がある場合) 、標準のフェーズボコーダーは残響効果を追加できます。この種の問題を回避するには、フェーズをロックする必要があるかもしれません。

詳細については、Miller Puckette and Portnoffの論文をご覧ください。


お返事ありがとうございます。最も単純なアプローチの問題は何ですか?フーリエ級数にウィンドウを適用せずに、時間間隔全体の関数として時間信号全体を拡張し、すべての周波数に定数を乗算します。時間領域のローカルエラーはすべてのフーリエ係数に影響することを理解しています。それ以外に、この素​​朴なローカライズされていないアプローチの落とし穴は何ですか?
Hans

私はそのようなことを一度も試したことはありませんが、うまくいくかもしれませんが、明らかな問題はこれが非常に高価になる可能性があることです、44100Hzでサンプリングされたオーディオ(1分)があるとしたら、あなたが提案していることを行うには44100 * 60 = 2646000、一度にフーリエを適用して処理する必要があるので、このようなリアルタイム処理の試みは忘れてください
ederwander

1
私が以前に提案したことが純粋な数学的意味で機能するとは思いません(コストとエラー感度を無視して)。
ハンス

3

あなたが説明するツール/理論は、実際には音楽技術の研究の大きな領域であり、広くオーディオのタイムスケール修正と呼ばれています。このフィールドの大きな要素は、タイムストレッチ後の周波数の可聴変化を防ぐ方法です。これは、アプリケーションの制約または目標に応じて、周波数領域と時間領域の両方の方法でアプローチできます。オーディオタイムスケール/ピッチ変更のウィキペディアエントリは、出発点として適しています。

周波数/ウェーブレットベースを使用したアプローチを追求したい場合は、ウィンドウサイズとベースの選択が、信号のローカライズの精度に影響します。例としてSTFTを使用するには、長いウィンドウは定常正弦波に対しては適切に機能しますが、過渡現象を破壊します。ウィンドウが短いほど、周波数領域の定位を犠牲にして、望ましい過渡応答が得られます。他のウェーブレットベースのパフォーマンスは、ベースへの信号の投影の性質に依存します。


回答ありがとうございます。この問題へのウェーブレットの適用についての言及はありますか?
Hans

ederwanderの回答の下の私のコメントも参照してください。ありがとう。
Hans

2

以下は、Stephan M. BernseeによるC ++のシンプルで価値のあるチュートリアル関数(smbPitchShift.cpp)へのリンクです。これは、ピッチを変更せずに音楽をスローダウンまたはスピードアップできます。

彼はこのコードをThe Wide Open License(WOL)の下でリリースしました。私のアプリケーションでは、彼の機能をリアルタイムで音楽のスローダウンに適合させることができました。つまり、mp3ファイルを再生しながら、同時にそのmp3信号のピッチ検出も行いました。

音楽などのオーディオ信号のタイムストレッチとピッチシフトに関する彼の詳細な説明を含むベルンゼーのウェブサイトへのリンクも含めました。

https://github.com/AndyA/BatPhone/blob/master/pitchshift.c

http://blogs.zynaptiq.com/bernsee/time-pitch-overview/


元のコードは適用されません。time stretch元のコードが適用され、Pitch Shiftこの場合には、あなたが結合する必要があります時間スケールの修正適用するために、Pitch Shifit + Resample (interpolation)Bernseeのコードは、大きさの窓使ってうまく動作しますが、4096あなたは1オクターブ(上または下)ピッチシフトできるようになりますが、つまり、2.0x〜0.5xの係数を使用してタイムスケールを高品質で作成できるだけであり、適切に構築されたフェーズボコーダーは、同じウィンドウサイズを使用してより良い結果を得ることができ、これらを外挿できるようになります。より良い品質の要因
ederwander

元のピッチが変更されないように、タイムストレッチを完了するにはリサンプリングを適用する必要があったことを思い出しました。Bernseeは、GitHubでリンクされたバージョン以降、コードにいくつかの変更を加えたようです。彼の新しいコードは彼のウェブサイトからダウンロードできます-それは彼の元の仕様からのシフトの範囲を広げるかもしれません。私は彼の元のコードを微調整して、8倍ピッチシフトアップできるようにしました。
James Paul Millard

コードとBernseeページの間に違いはありません。主な計算は同じです。私が見ることができる大きな違いは、8192ダウンロードページのコードのウィンドウサイズ=なので、処理に4倍のポイントを実行する必要がありますか、私はハーフウィンドウサイズ8192/2=4096でフェーズボコーダーのいくつかの秘密を使用して同じことを行うことができると言いますが、ここでのポイントは、はるかに少ない処理で品質を維持できることです。
ederwander

BatPhoneへのGitHubリンクを提供しましたが、それは私のコードではありません。smbPitchShift()を表示するために、インターネット検索からプルしただけです。私のコードはずっとBernseeのバージョンから変更されており、このファイルに居住されていますgithub.com/CreativeDetectors/PitchScope_Player/blob/master/Src/...
ジェームズ・ポール・ミラード

ええ、私は見ることができます、それは本当にリサンプルです、あなたは私の位相ボコーダーの動作を見たり聞いたりすることに興味があるかもしれません。
ederwander
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.