使用gnuplot创建移动音频级别的动画

时间:2018-02-13 23:41:51

标签: gnuplot

我是gnuplot的新手,我正在尝试使用它创建一个移动音频级别的动画,如GIF:

Moving audio levels

我知道我需要使用这样的命令来写出一系列可用于制作视频的PNG文件:

set output sprintf('hrir_frame%03.0f.png',ii)

我认为我应该在每行使用带有音频电平的.dat文件,如下所示:

4
9
-3
-5
2
...

但是,我对如何使gnuplot从一个值滑动到下一个值感到困惑,就像上面的GIF一样。

1 个答案:

答案 0 :(得分:1)

您可以使用every说明符浏览数据:

datafile = "data.dat"
set terminal pngcairo

stats datafile
set yrange [STATS_min_y*1.2:STATS_max_y*1.2]

npoints = 100  # Always show 100 data points.

do for [ii=0:STATS_records-npoints] {
   set output sprintf('hrir_frame%03.0f.png',ii)
   print ii
   plot datafile every ::ii::ii+npoints w lp notitle
}

这会产生一组图像文件,然后可以将它们组合成一部电影。

另一种选择可能是将gif终端与动画一起使用:

datafile = "data.dat"
set terminal gif size 300,200 animate delay 2
set output "moving.gif"

stats datafile
set yrange [STATS_min_y*1.2:STATS_max_y*1.2]

npoints = 100

do for [i=0:STATS_records-npoints] {
   print i
   plot datafile every ::i::i+npoints w lp notitle
}

两个脚本中的重要部分是

plot datafile every ::i::i+npoints

请输入help every了解详细信息,条目ii+npoints对应第一个数据点和数据点数。

为了在每个图上都有一致的缩放,y范围用set yrange调整。限制来自stats命令,但可以手动设置。

gif结果看起来像这样(它非常大,可能无法满足你的速度要求,也许这可以优化):

moving

使用

创建样本数据
datafile = "data.dat"
set print datafile

do for [i=0:500] {
   print    sin(2.0*pi*1.0*(i/100.0))      \
          + sin(2.0*pi*2.0*((i+25)/100.0)) \
          + sin(2.0*pi*3.0*((i+15)/100.0))
}