昨日、経時的に表示されるトラックのオーディオ エネルギーを検出するためのコードを完成させました。このコードは、オーディオ サムネイル プロジェクトの一部として最終的に使用する予定です。
ただし、時間の経過とともに表示されるトラックのピッチを検出できる方法も必要なので、研究のベースとなる 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 コマンドを含めるようにコードの最終行を変更するだけでプロセスは簡単になると思いましたが、不均衡な方程式に関するエラーしか返されませんでした。
それが正しい方向への単なる一般的なポインタであっても、助けていただければ幸いです。ありがとうございました。