我对学习使用 OpenGL 很感兴趣,并且有编写音乐可视化器的想法。谁能给我一些关于我需要哪些元素以及我应该如何学习做到这一点的指示?
8 回答
如果您使用 C++/CLI,这里有一个使用 WPF 四(即傅立叶)显示的示例。
他引用了这个网站(已存档),其中包含有关您的要求的大量信息,这是特定页面的概述;
我们如何将声音分成频率?我们的耳朵通过机械方式进行,数学家使用傅里叶变换,计算机使用 FFT。
- 声音物理学
- 谐波振荡器
- 采样声音
- 傅立叶分析
- 复数
- 数字傅里叶变换
- 快速傅里叶变换
啊,几分钟后我发现了这个(存档),它是一个原生 C++ 分析器。包括代码,这应该让你开始并运行。
我创建 BeatHarness ( http://www.beatharness.com ) 的方法:
- 实时录制音频
- 有一个线程在音频上运行 FFT 以获得频率强度
- 计算左右声道的音量
- 过滤频段中的频率(低音、中音、高音)
现在您可以在图形显示中使用一些不错的变量。例如,显示一张尺寸乘以低音的图片 - 这将为您提供一张放大节拍的图片。从那里开始,这是你自己的想象!:)
您是否正在尝试编写自己的音频/音乐播放器?也许您应该尝试为现有播放器编写插件,这样您就可以专注于图形而不是编解码器、dsp 和音频输出设备的细节。
我知道 WinAMP 和 Foobar 有用于可视化插件的 API。我确信 Windows Media Player 和 iTunes 也有它们。只需选择一个媒体播放器并开始阅读。其中一些甚至可能有现有的 OpenGL 插件,您可以从中开始,这样您就可以专注于纯 OpenGL。
如果您只是追求一些基本的 3D 或加速 2D,那么我建议您购买 Dave Astle 的“ Beginning OpenGL Game Programming ”,其中涵盖了 C++ 中 OpenGL 的基础知识。
对于音乐分析部分,你应该学习傅里叶级数的基础,然后选择一个自由实现的 DFFT(数字快速傅里叶变换)算法。
您可能需要考虑在 FFTW 上使用 libvisual 的 FFT/DCT 函数;为了生成视觉效果,它们更易于使用并提供同样易于使用的数据。一些媒体播放器和可视化插件在某种程度上使用 libvisual 来实现视觉效果。示例:Totem(播放器)、GOOM(图腾和其他播放器的插件)、PsyMP3 2.x(播放器)
从我的角度来看......检查这个网站: http: //nehe.gamedev.net/
使用 OpenGL 的非常好的信息和教程