如何用C++开始编写音乐可视化程序?

23

我想学习使用OpenGL,并想过写一个音乐可视化程序。有人能指点一下我需要哪些元素以及我应该如何学习实现吗?


10
也许需要一个“#include”吗?抱歉,我忍不住开玩笑 :) - Binary Worrier
8个回答

16
如果您使用C++/CLI,这里有一个使用WPF四(傅里叶)显示的示例
他引用了此网站已存档),该网站提供了关于您所询问的内容的大量信息,以下是特定页面的概述:
如何将声音分解成频率?我们的耳朵通过机械手段实现,数学家使用傅里叶变换实现,计算机使用FFT实现。
- 声音物理学
- 谐振子
- 采样声音 - 傅里叶分析 - 复数 - 数字傅里叶变换 - FFT
啊哈,我几分钟后找到了这个已存档),它是一个本地C++分析器。包含代码,这应该可以让您开始运行。

6

我创建BeatHarness (http://www.beatharness.com) 的方法:

  • 实时录制音频
  • 运行一个线程,在音频上运行FFT以获取频率强度
  • 计算左右声道的音量
  • 将频率按带(低音,中音,高音)过滤

现在你有一些漂亮的变量可以用于你的图形显示。 例如,显示一张图片,大小乘以低音 - 这将给你一个会随着节拍缩放的图片。 从那里开始,就是你自己的想象力! :)


网站导向垃圾邮件/营销页面。 - AcidTonic

1

你是否尝试编写自己的音频/音乐播放器?也许你应该尝试为现有播放器编写插件,这样你就可以专注于图形而不必过于关注编解码器、DSP和音频输出设备的细节。

我知道WinAMP和Foobar有可视化插件的API。我相信Windows Media Player和iTunes也有类似功能。只需选择一个媒体播放器并开始阅读相关文档。其中一些甚至可能还拥有现有的OpenGL插件,供您开始使用,这样您就可以专注于纯OpenGL编程了。


1
我并不想编写一个播放器或其他什么东西,只是想编写一个能够接收 MP3 并将其可视化的程序,但我不知道如何连接所有这些部分。我使用的是 Linux 系统,所以我会选择一些简单的工具。目前还没有考虑将其集成到其他任何项目中。 - victor
3
考虑使用像mpg123、libmad或ffmpeg这样的库来解码mp3为音频样本。然后,您需要使用DFT(FFT)将音频转换为频率信息(请参见FFTW)。此时,您将拥有类似于大多数可视化器上看到的原始频率数据(winamp / xmms带峰值的移动线)。之后,您需要根据频率和频率变化来确定可视化内容。 - basszero

0

你可能想考虑使用libvisual的FFT/DCT函数而不是FFTW;它们更简单易用,并且提供的数据同样易于生成视觉效果。一些媒体播放器和可视化插件在视觉方面在某种程度上使用了libvisual。例如:Totem(播放器)、GOOM(适用于Totem和其他播放器的插件)、PsyMP3 2.x(播放器)。


0

0
如果你只是想学习一些基础的3D或加速2D编程,我建议购买Dave Astle的《Beginning OpenGL Game Programming》一书,该书涵盖了C++中OpenGL的基础知识。

0
对于音乐分析部分,您应该学习傅里叶级数的基础知识,然后选择一个免费实现数字快速傅里叶变换(DFFT)算法的实现。

-3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接