那么有人如何创建音乐可视化工具呢?我在谷歌上看过,但我还没有真正找到任何关于实际编程的东西;大多只是指向插件或可视化应用程序的链接。
我使用 iTunes,但我意识到我需要 Xcode 来编程(我目前部署在伊拉克,无法下载那么大的文件)。所以现在我只对学习它背后的“理论”感兴趣,比如处理频率和其他任何需要的东西。
那么有人如何创建音乐可视化工具呢?我在谷歌上看过,但我还没有真正找到任何关于实际编程的东西;大多只是指向插件或可视化应用程序的链接。
我使用 iTunes,但我意识到我需要 Xcode 来编程(我目前部署在伊拉克,无法下载那么大的文件)。所以现在我只对学习它背后的“理论”感兴趣,比如处理频率和其他任何需要的东西。
当可视化器播放歌曲文件时,它会在非常短的时间片(通常小于 20 毫秒)内读取音频数据。可视化器对每个切片进行傅里叶变换,提取频率分量,并使用频率信息更新视觉显示。
如何响应频率信息更新视觉显示取决于程序员。通常,图形方法必须非常快速和轻量级,以便随着音乐及时更新视觉效果(而不是让 PC 陷入困境)。在早期(现在仍然如此),可视化器经常直接修改 Windows 中的调色板以实现一些非常酷的效果。
基于频率分量的可视化器的一个特点是,它们似乎通常不能很好地响应音乐的“节拍”(例如打击乐)。可以编写更有趣和响应更快的可视化工具,将频域信息与通常对应于打击乐的音频中的“尖峰”意识相结合。
为了创建 BeatHarness ( http://www.beatharness.com ),我“简单地”使用 FFT 来获取音频频谱,然后使用一些过滤和边缘/起始检测器。
关于快速傅里叶变换: http ://en.wikipedia.org/wiki/Fast_Fourier_transform
如果您习惯于数学,您可能想阅读 Paul Bourke 的页面: http ://local.wasp.uwa.edu.au/~pbourke/miscellaneous/dft/
(无论如何,Paul Bourke 是一个你想用谷歌搜索的名字,他有很多关于你现在或可能在未来 2 年内想知道的主题的信息;))
如果您想阅读有关 Masataka Goto 的节拍/速度检测 google,他写了一些关于它的有趣论文。
编辑:
他的主页:http ://staff.aist.go.jp/m.goto/ 有趣的阅读:http ://staff.aist.go.jp/m.goto/PROJ/bts.html
一旦你有了一些值,例如低音、中音、高音和音量(左和右),如何处理它们完全取决于你的想象。显示一张图片,例如将尺寸乘以低音 - 你会得到一张放大节拍的图片等。
一个简单的可视化将是每次音乐超过某个频率阈值时改变屏幕颜色的可视化。或者只是将 bpm 写到屏幕上。或者只是显示一个示波器。
看看这篇维基百科文章
正如@Pragmaticyankee 所建议的那样,处理确实是一种可视化音乐的有趣方式。您可以在 Ableton Live 中加载音乐,并使用 EQ 过滤掉音乐中的高频、中频和低频。然后,您可以使用 VST follwoing 插件将音频包络转换为 MIDI CC 消息,例如 Mokafix Audio 的 Gatefish(适用于 windows)或 PizMidi 的 midiAudioToCC 插件(适用于 mac)。然后,您可以将这些 MIDI CC 消息发送到支持 MIDI 的发光硬件工具,例如 percussa audiocubes。您可以为要显示的每个频率使用一个立方体,并为立方体分配一种颜色。看看这个帖子:
我们最近在LightningChart数据可视化库中添加了基于 DirectSound 的音频数据输入例程。LightningChart SDK 是 Visual Studio .NET(WPF 和 WinForms)的一组组件,您可能会发现它很有用。
使用 AudioInput 组件,您可以从声音设备获取实时波形数据样本。您可以播放来自任何来源的声音,例如 Spotify、WinAmp、CD/DVD 播放器,或使用麦克风输入连接器。
使用 SpectrumCalculator 组件,您可以获得在许多可视化中方便的功率谱(FFT 转换)。
使用 LightningChartUltimate 组件,您可以以多种不同形式可视化数据,如波形图、条形图、热图、频谱图、3D 频谱图、3D 线等,并且可以组合它们。所有渲染都通过 Direct3D 加速进行。
我们自己在 SDK 中的示例具有科学的方法,实际上并没有太多的娱乐性,但它也绝对可以用于很棒的娱乐可视化。
我们还拥有可配置的 SignalGenerator(扫描、多通道配置、正弦波、方波、三角波和噪声波形、WAV 实时流和 DirectX 音频输出组件,用于从扬声器或线路输出发送波形数据。
[我是 LightningChart 组件的 CTO,做这些只是因为我喜欢它 :-) ]