1

GameDev.netのガイドに従って、基本的なビート検出 (C および/または Java の両方) でいくつかの作業を実行しようとしています。アルゴリズムの実装の背後にあるロジックは理解していますが、曲の左右のチャンネル (つまり mp3 または wav) の「音の振幅」データを取得する方法については混乱しています。

たとえば、彼は次の仮定から始めます。

このモデルでは、信号の平均音エネルギーを計算し、それを瞬時の音エネルギーと比較することで、音エネルギーの変動を検出します。(an) と (bn) の 2 つの値のリストを使用して、ステレオ モードで作業しているとします。(an) には、左チャネルの Te 秒ごとにキャプチャされた音響振幅値のリストが含まれます。(bn) 右チャネルの Te 秒ごとにキャプチャされた音響振幅値のリストが含まれます。

その後、彼は次のアルゴリズムの操作anと使用に進みます。彼のガイドに従って曲の簡単なビート検出をいじり始めることができるように、両方のチャンネルを毎秒bn取得するために必要な信号処理をどのように行うのか疑問に思っています。anbnTe

4

1 に答える 1

1

圧縮されていないオーディオ ファイル (.wav や .aiff など) は、ほとんどの場合、サンプルの長い配列です。各サンプルは、特定の時点での振幅で構成されます。音楽が録音されると、これらの振幅サンプルの多くが毎秒取得されます。ステレオ (2 チャネル) オーディオ ファイルの場合、配列内のサンプルは通常、[sample1 left、sample1 right、sample2 left、sample2 right など] のようにチャネルを交互に切り替えます。

ほとんどのオーディオ解析ライブラリには、チャンネルごとに個別にサンプルを返す方法が既に用意されています。

各チャネルのサンプル配列を取得したら、サンプル レートまたは 1 秒あたりのサンプル数がわかっている限り、特定の 1 秒間のサンプルを簡単に見つけることができます。たとえば、ファイルのサンプル レートが 1 秒あたり 44100 サンプルで、n秒でサンプルをキャプチャする場合、ベクトルの ( n * 44100 ) と (( n + 1 ) の間の部分を使用します。 ) * 44100)。

于 2013-10-22T01:29:42.530 に答える