从音频中绘制波形的算法

我试图从原始音频文件中绘制波形。 我使用FFmpeg对音频文件进行了解复用/解码,并且我有这些信息:采样缓冲区,采样缓冲区的大小,音频文件的持续时间(以秒为单位),采样率(44100,4800等),采样大小,采样格式(uint8,int16,int32,float,double)和原始音频数据本身。

在互联网上挖掘我发现这个算法(更多):

白噪声:

白噪声

算法

你所需要做的就是随机化每个样本从幅度到幅度。 我们不关心大多数情况下的通道数量,所以我们只是用每个样本填充一个新的随机数。

Random rnd = new Random();
short randomValue = 0;

for (int i = 0; i < numSamples; i++)
{
    randomValue = Convert.ToInt16(rnd.Next(-amplitude, amplitude));
    data.shortArray[i] = randomValue;
}

这真的很好,但我不想这样画,但是这样:

有没有关于如何使用我拥有的信息进行绘图的算法或想法?


首先,您需要确定屏幕上每个样本的最终位置。

int x = x0 + sample_number * (xn - x0) / number_of_samples;

现在,对于具有相同x所有样本,分别确定正值和负值的最小值和最大值。 绘制一条垂直线,一条从负极性到正极极性的黑暗线,然后从极性极小体到正极极性之间的一个小极体。

编辑:多想一想,你可能想用内线的平均值而不是最小值。


有一个来自BBC研发部门的很好的节目音频波形,可以做你想做的,你可以咨询他们的消息来源。


我想你是指这里描述的波形。

http://manual.audacityteam.org/o/man/audacity_waveform.html

我没有阅读整个页面。 但是每个垂直条代表一个波形采样窗口。 深蓝色是该窗口中的最大正值和最小负值(我认为)。 而浅蓝色是RMS均方根。 http://www.mathwords.com/r/root_mean_square.htm。 (基本上你在每个窗口内平均值,取平均值,然后平方根。

希望这可以帮助。

链接地址: http://www.djcxy.com/p/5799.html

上一篇: Algorithm to draw waveform from audio

下一篇: Writing time sequenced to Android AudioTrack