创建音乐可视化工具[关闭]
Posted
技术标签:
【中文标题】创建音乐可视化工具[关闭]【英文标题】:Creating music visualizer [closed] 【发布时间】:2010-09-14 07:12:19 【问题描述】:那么,有人如何创建音乐可视化工具?我在谷歌上看过,但我还没有真正找到任何关于实际编程的东西;大多只是指向插件或可视化应用程序的链接。
我使用 iTunes,但我意识到我需要 Xcode 来编程(我目前部署在伊拉克,无法下载那么大的文件)。所以现在我只对学习它背后的“理论”感兴趣,比如处理频率和其他任何需要的东西。
【问题讨论】:
你不需要 XCode 来为 Windows 上的 iTunes 编程。 这个类似的问题有一个更成熟的答案***.com/questions/3148008/music-visualization?rq=1 【参考方案1】:通常,您会获取一定数量的音频数据,对其进行频率分析,然后使用该数据修改一些反复显示的图形。进行频率分析的明显方法是使用FFT,但简单的tone detection 也可以工作,而且计算开销更低。
因此,例如,您编写了一个例程,该例程不断地绘制一系列排列成圆形的形状。然后,您可以使用主要频率来确定圆圈的颜色,并使用音量来设置大小。
【讨论】:
【参考方案2】:当可视化器播放歌曲文件时,它会在非常短的时间片(通常少于 20 毫秒)内读取音频数据。可视化器对每个切片进行傅里叶变换,提取频率分量,并使用频率信息更新视觉显示。
如何根据频率信息更新视觉显示取决于程序员。通常,图形方法必须非常快速和轻量级,以便随着音乐及时更新视觉效果(而不是让 PC 陷入困境)。在早期(现在也是),可视化器经常直接修改 Windows 中的调色板以实现一些非常酷的效果。
基于频率分量的可视化工具的一个特点是,它们似乎通常不能很好地响应音乐的“节拍”(例如打击乐)。可以编写更有趣且响应迅速的可视化工具,将频域信息与通常对应于打击乐的音频中的“尖峰”意识相结合。
【讨论】:
我注意到大多数可视化工具对频率或尖峰的反应不是很好。这就是为什么我有兴趣了解它们是如何工作的,作为一个教育思想实验。 很遗憾 MIDI 有这么多限制,因为这为程序员提供了关于正在播放什么音符以及何时播放的完美信息。基于 MIDI 的可视化工具具有完美的响应能力。【参考方案3】:-
设计一种算法,在给定一组变量的情况下在屏幕上绘制有趣的东西
设计一种方法,将音频流转换为一组变量,分析诸如节拍/分钟频率、不同频率范围、音调等内容。
将变量插入您的算法并观察它的绘制。
一个简单的可视化是在音乐每次超过某个频率阈值时改变屏幕颜色。或者只是将 bpm 写到屏幕上。或者只是显示一个示波器。
看看这个wikipedia article
【讨论】:
【参考方案4】:处理音频数据的方法有很多种,其中最简单的就是将其显示为快速变化的波形,然后对其应用一些图形效果。类似地,可以计算诸如音量之类的东西(并作为参数传递给某些图形例程),而无需进行快速傅里叶变换来获取频率:只需计算信号的平均幅度即可。
使用 FFT 将数据转换到频域或以其他方式实现更复杂的效果,包括像 spectrograms 这样的东西。尽管直接从 FFT 输出中检测甚至非常“明显”的东西,比如鼓声的时间或音符的音高,这看似很棘手
可靠的节拍检测和音调检测是难题,尤其是在实时方面。我不是专家,但this page 运行了一些简单的示例算法及其结果。
【讨论】:
【参考方案5】:为了创建 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 年内想知道的主题的信息;))
如果您想了解 Google 为 Masataka Goto 提供的节拍/节奏检测,他写了一些关于它的有趣论文。
编辑:
他的主页:http://staff.aist.go.jp/m.goto/ 有趣的阅读:http://staff.aist.go.jp/m.goto/PROJ/bts.html
一旦你有了一些值,例如低音、中音、高音和音量(左和右), 如何处理它们完全取决于您的想象。 显示一张图片,例如将尺寸乘以低音 - 你会得到一张放大节拍的图片,等等。
【讨论】:
【参考方案6】:就像@Pragmaticyankee 建议的那样,处理确实是一种有趣的方式来可视化您的音乐。您可以在 Ableton Live 中加载音乐,并使用 EQ 过滤掉音乐中的高频、中频和低频。然后,您可以使用 VST follwoing 插件将音频包络转换为 MIDI CC 消息,例如 Mokafix Audio 的 Gatefish(适用于 Windows)或 PizMidi 的 midiAudioToCC 插件(适用于 mac)。然后,您可以将这些 MIDI CC 消息发送到支持 MIDI 的发光硬件工具,例如 percussa audiocubes。您可以为要显示的每个频率使用一个立方体,并为立方体分配一种颜色。看看这个帖子:
http://www.percussa.com/2012/08/18/how-do-i-generate-rgb-light-effects-using-audio-signals-featured-question/
【讨论】:
【参考方案7】:我们最近在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,做这些只是因为我喜欢它 :-)]
【讨论】:
以上是关于创建音乐可视化工具[关闭]的主要内容,如果未能解决你的问题,请参考以下文章