【发布时间】:2012-07-26 21:15:21
【问题描述】:
所以我在长时间的中断后开始使用 C++,我想创建一个程序,它可以在运行时根据数字字符串生成音乐(受到某些人所做的 composition of Pi 的启发),最终目标是某种程序音乐生成软件。
到目前为止,我已经能够使用 Beep() 函数制作一个非常原始的版本,并且只是通过输入 Pi 的第一个某某数字作为测试。像魅力一样工作。
我现在正在寻找的是如何将它提升一个档次并获得更高质量的声音(因为 Beep() 确实是最原始的声音......),我意识到我绝对没有想法如何做到这一点。我需要的是一个库或某种 API,它们可以:
1) 在没有预先存在的文件的情况下生成声音。我希望结果是 100% 由代码生成,而不是依赖任何样本,最好。
2) 如果我能开发出能够同时播放多种声音的东西,比如能够演奏和弦或带有节拍的旋律,那就太好了。
3) 如果我可以通过方程式或其他类型的数据以任何方式控制它播放的波(有点像 Chiptune 混音器可以),那将非常有帮助。
我不知道这是否是一个奇怪的请求,或者我只是使用错误的术语对其进行了研究,但我无法找到任何符合这些原则的内容,或者至少没有任何有据可查的内容。 :/
如果有人能提供帮助,我将不胜感激。
编辑:另外,显然我只是超级不习惯在论坛上提问,我的目标平台是 Windows(具体来说是 7,尽管我认为这并不重要)。
【问题讨论】:
-
所以,我假设是 windows,因为你提到了
beep(),但你真的应该告诉我们你的目标是什么平台。 C++ 没有音频的概念,你使用的任何东西都将依赖于平台(除非你找到一个库可以从你那里抽象出来,但这可能不是必需的)。 -
它将在 Windows 上,感谢您指出我会编辑它。
-
@AniMerrill,我知道没有简单的方法(在 Windows API 中)让您的程序生成要播放的声音数据。做这件事的图书馆可能是你最好的选择。
-
FMOD Ex 应该符合您的要求(自定义 DSP,playback from back from mem buffer)。
-
您可以使用相当简单的 Windows 的 waveOut API。或者您可以选择更完善的库,例如 BASS。