2012-12-26 141 views
-2

給定視頻的幀速率爲24fps。對於音頻採樣率等於44.1Khz和22050(Fs/2)的音頻樣本存在於每秒音頻中。即對於每個視頻幀,存在22050/24〜919個音頻採樣。如何獲取從視頻文件中提取的音頻文件的音頻級別?

這是我不知道的matlab代碼。這是我們繪製我正在談論的音頻樣本的方式嗎?

[y f] = wavread('test.wav'); 
t = 0:1/f:(length(y)-1)/f; 
plot(t, y), grid on; 

我應該爲此目的使用音頻處理庫的c + +?我將使用VS 2010.

+2

您還沒有實際說明您要在此實現的目標。 「音頻級別」是什麼意思?高峯? RMS?即時?短期 ?長期 ?你只是想顯示數據,或者你想執行額外的處理? –

回答

0

我想找到所有具有高於音頻文件的平均樣本值的樣本。這是代碼。

function AudioLevels(a, fps) 
clc 
format long g 
[y f nbits] = wavread(a); 
len = length(y); 
t = 0:1/f:(length(y)-1)/f; 
plot(t, abs(y(:,1))), grid on; 
meanAudioLevel = sum(abs(y(:,1)))/length(y); 
samplesPerFrame = f/fps; 
noOfFrames = ceil(double(length(y)/samplesPerFrame)); 

array1= [;]; 
%--------------------------------------------------------------------- 
for i = 1 : 1 : noOfFrames-1; 
for j = 1+(samplesPerFrame*(i-1)) : 1 : (samplesPerFrame*i) 
    array = [;]; 
    array = [array ; abs(y(j,1))]; 
end 
if (sum(array) >= meanAudioLevel) 
    array1 = [array1 ; sum(array)]; 
    fprintf (fileIO, '%d\t%f\r\n', i ,sum(array)); 
end 
end 
%--------------------------------------------------------------------- 
for j = length(y) - mod (length(y), samplesPerFrame)+1 : 1 : length(y) 
array = [;]; 
array = [array ; abs(y(j,1))]; 
end 
if (sum(array) >= meanAudioLevel) 
    array1 = [array1 ; sum(array)]; 
end 
%--------------------------------------------------------------------- 
array1