1

昨日、経時的に表示されるトラックのオーディオ エネルギーを検出するためのコードを完成させました。このコードは、オーディオ サムネイル プロジェクトの一部として最終的に使用する予定です。

ただし、時間の経過とともに表示されるトラックのピッチを検出できる方法も必要なので、研究のベースとなる 2 つのオプションがあります。

[y, fs, nb] = wavread('Three.wav');                  %# Load the signal into variable y

frameWidth = 441;                                    %# 10 msec
numSamples = length(y);                              %# Number of samples in y
numFrames = floor(numSamples/frameWidth);            %# Number of full frames in y
energy = zeros(1,numFrames);                         %# Initialize energy

for frame = 1:numFrames                              %# Loop over frames
  startSample = (frame-1)*frameWidth+1;              %# Starting index of frame
  endSample = startSample+frameWidth-1;              %# Ending index of frame
  energy(frame) = sum(y(startSample:endSample).^2);  %# Calculate frame energy
end

これはエネルギー メソッドの正しいコードです。調査の結果、ループ内の各フレームの現在のピッチを見つけるには、離散時間フーリエ変換を使用する必要があることがわかりました。

離散フーリエ変換を計算するための "fft" MATLAB コマンドを含めるようにコードの最終行を変更するだけでプロセスは簡単になると思いましたが、不均衡な方程式に関するエラーしか返されませんでした。

それが正しい方向への単なる一般的なポインタであっても、助けていただければ幸いです。ありがとうございました。

4

1 に答える 1

1

ピッチの決定は、DFTを適用するよりもはるかに複雑です。また、ソースの性質にも依存します。たとえば、音声と楽器にはさまざまなアルゴリズムが適しています。これが音楽トラックである場合、あなたの質問が示唆しているように、一緒に演奏する複数の楽器の単一のピッチ値を決定する明確な方法がないため、おそらく運が悪いでしょう(このコンテキストでピッチをどのように定義しますか? ?)。多分あなたはあなたがやろうとしていることについてより具体的にすることができます-多分パワースペクトルは任意のピッチを決定しようとするよりも有用でしょう?

于 2010-08-05T15:50:45.567 に答える