【问题标题】:How to get audio levels of an audio file extracted from a video file?如何获取从视频文件中提取的音频文件的音频电平?
【发布时间】:2012-12-12 00:53:04
【问题描述】:

给定视频的帧速率为 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。

【问题讨论】:

  • 您实际上并未在此处说明您要实现的目标。 “音频电平”是什么意思?顶峰 ?有效值?瞬时?短期 ?长期 ?您只是想显示数据还是要执行额外的处理?

标签: matlab audio-processing


【解决方案1】:

我想找到所有值高于音频文件平均样本值的样本。这是代码。

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

【讨论】:

    猜你喜欢
    • 2012-07-10
    • 2019-01-13
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    相关资源
    最近更新 更多