从音频中绘制波形的算法
我试图从原始音频文件中绘制波形。 我使用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