【问题标题】:Sound Synthesis Framework in C/C++/Objective-C?C/C++/Objective-C 中的声音合成框架?
【发布时间】:2010-11-18 06:17:02
【问题描述】:

我在网上搜索过,但没有发现任何有趣的东西。也许我做错了什么。

我正在寻找用C、C++甚至Objective-C编写的声音合成API,它可以合成不同类型的波,效果是可选的。

【问题讨论】:

    标签: audio synthesizer sound-synthesis


    【解决方案1】:

    这是一个完整的 FM(频率调制)合成库/工具包:

    link1 link2

    如果您有时间...从头开始创建简单的声音合成实际上是一项有趣的工作。如果您创建一个包含 256 个 16 位样本的小缓冲区,这些样本代表正弦。锯齿,块或脉冲,您可以将它们复制到不断循环的实时音频缓冲区(例如一个小缓冲区(例如 16kb))。通过保持在播放位置之前,并不断用新值填充缓冲区,您可以创建声音输出。 您可以使用小缓冲区以有趣的方式组合它们(最简单的方法就是将它们加在一起(加法合成))。

    可以通过小缓冲区使用更大或更小的采样步长来控制音调的频率。在将样本放入输出缓冲区之前,可以通过缩放样本来控制幅度。

    尝试这个非常有趣!

    如果您已经完成了这一步,您可以添加更复杂的效果,例如过滤器(低通、高通等)和效果(混响、回声等)

    R

    【讨论】:

      【解决方案2】:

      您是否查看过综合工具包 (STK)?它在 C++ 中(我不认为 ObjC 是音频合成的正确语言,实际上是音频单元,Apple 自己的音频处理方式,包括生成器/过滤器/效果......在 C++ 中)。

      STK 可以在 Mac OS X 和 iOS 上运行(支持 CoreAudio),但也可以在 Linux 和 Windows(Direct sound 和 ASIO)上运行,使用 RtAudio。它真的做得很好而且很轻,这些家伙花了很多时间思考它,它肯定会给你一个很大的开端。它可以处理大量不同的音频文件格式 + midi(希望 OSC 很快......)。

      还有 Create 和巨大的 CLAM,它们包括 GUI 组件和许多其他您可能想要或可能不想要的东西。如果你只对声音合成感兴趣,我真的推荐 STK。

      【讨论】:

      • 有没有办法用这个创建一个仪器,它有一个适用于原始 wav 数据/样本的 tick()?
      • @paulm 我认为这是一个成熟的 SO 问题,STK 有一个 wav 文件阅读器 ccrma.stanford.edu/software/stk/classstk_1_1FileRead.html
      • 谢谢,它看起来可能只是从原始音频数据填充 STK 帧的情况:)
      【解决方案3】:

      PortAudio 也是我们上学期在音频编程课程中使用的一个很棒的 C API。它提供了一个音频回调......你还需要什么!?

      我还没有尝试将它与 Objective-C 中的任何东西结合起来,但当我这样做时会报告。

      【讨论】:

        【解决方案4】:

        在我看来,用 C/obj-C 编写音频合成算法相当困难。我建议使用PureData 编写信号处理算法,然后使用ZenGardenlibpd 在您的应用中嵌入和解释pd 补丁。

        【讨论】:

          【解决方案5】:

          另一个 C++ 库是 nsound:

          http://nsound.sourceforge.net

          可以使用 Generator 类或提供的 Sine 类生成任何类型的调制信号。每个时间步长都有自己的瞬时频率和相位偏移。

          您还可以尝试使用 Python 模块快速构建算法原型,然后在 C++ 中实现。它可以从 Python 甚至 C++ 生成漂亮的 matplotlib 图!

          【讨论】:

            【解决方案6】:

            你看过CSound吗?这是一个非常灵活的音频生成平台,可以处理从简单的波形生成到 FM 合成和各种滤波器的所有事情。它还提供 MIDI 支持,您可以通过编写自定义操作码来扩展它。还有一个 full C API 和几个 C++ API。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-09-29
              • 2011-07-06
              • 2011-07-18
              • 2012-02-01
              • 2011-01-28
              • 2012-12-26
              相关资源
              最近更新 更多