2009-08-10 32 views

回答

9

下面是FM(调频)一个完整的图书馆/工具包合成:

link1 link2

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

音调的频率可以通过在较小的缓冲区中使用更大或更小的采样步骤来操纵。幅度可以通过在将样本放入输出缓冲区之前缩放样本来操纵。

很好玩的尝试这个!

如果你这一步钉,你可以添加像过滤器的更多复杂的效果(低通,高通等)和效果(混响,回声等)

[R

-1

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

2

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

4

你看过综合工具包(STK)吗?它采用C++语言(我不认为ObjC是用于音频合成的正确语言,实际上音频单元,Apple自己的做音频内容的方式,包括生成器/过滤器/效果......都是C++)。

STK将在Mac OS X上运行,并且iOS没有问题(CoreAudio支持),但也可以在Linux和Windows(Direct sound和ASIO)上使用RtAudio运行。它做得非常好,很轻便,这些人花了很多时间考虑它,它肯定会给你一个很好的开始。它可以处理不同音频文件格式+ MIDI的负载(希望OSC很快......)。

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

+0

有没有一种方法可以创建一个具有tick()的工具,该工具可以处理原始的wav数据/样本? – paulm 2015-10-06 13:00:48

+1

@paulm我认为这是一个完整的SO问题,STK有一个wav文件阅读器https://ccrma.stanford.edu/software/stk/classstk_1_1FileRead.html – jbat100 2015-10-06 13:05:00

+0

谢谢,它看起来可能只是一个填充来自原始音频数据的STK帧:) – paulm 2015-10-06 13:25:48

4

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

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

1

另一C++库是nsound:

http://nsound.sourceforge.net

人们可以使用发电机类或使用所提供的正弦类生成任何种类的调制信号的。每个时间步可以有它自己的瞬时频率和相位偏移。

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