我们需要知道音乐是如何组成的以及如何可视化这些部分。音乐是声音的结合。声音是我们的耳朵经常检测到的振动。振动由频率和幅度(速度和响度)定义。
可视化的最简单方法是绘制一行条。每个条形代表一个频率。音乐继续播放时,这些小节将根据频率的幅度上下移动。
Python实现
在开始编码之前,需要安装图形库和声音分析器库。
短时傅立叶变换(STFT)是一种与傅立叶相关的变换,用于确定信号局部随时间变化的正弦频率和相位含量。
hop_length是帧之间的样本数。 n_fft是每个帧中的样本数。 我发现增加n_fft时,结果变得更加准确,我将其设置为其默认值的4倍。
您还可以使用matplotlib查看STFT的结果:
您可以使用索引访问数组的值。但是我们该如何选择它的时间和频率。此代码可能会有所帮助:
我将2d数组分成多个数组,这些数组指示某些索引的时间或频率。 采样率是恒定的。 因此,我们可以在时间和索引之间创建一个比率,并在频率上创建一个比率。 然后,我们将时间和频率乘以比率,就得到了指数:
现在,我们只需要使用我在开始时就提到的“移动条”来表示它即可。
创建一个代表频率条的类:
我创建了x,y坐标,条形的频率,颜色以及其高度和分贝的范围。 我定义了高度和分贝之间的比例,以便稍后确定横条的高度。 在update()方法中,我获得了与当前分贝对应的条形的所需高度,并将条形的速度设置为增长。
在这里,我正在创建一个包含条形图的数组。我以100的步长创建了从100Hz到8000Hz的80条,并将它们添加到阵列中。
然后,您只需运行一个窗口并绘制条形图:
详情参阅 - 亚图跨际