是否可能仅使用算法生成乐器声音?或者只能通过预录制的音频样本来实现?
完全有可能 - 这是合成器的功能之一。
虽然可以实现,但并不意味着简单。合成器通常价格昂贵,使用的算法数量复杂 - 我之前链接的维基百科页面中有一些相关链接。
预先录制的声音更简单、更便宜,但它们也有其局限性 - 例如声音听起来更“重复”。
几年前,声音杂志发表了一个名为“合成器秘诀”的系列文章,现在可以免费在线查看。这些文章很好地介绍了硬件合成器(模拟和数字)中使用的技术类型,并包括一些讨论复制某些真实乐器声音的困难的文章,例如弹拨和弓弦乐器、铜管乐器、军鼓、木琴等。
经过几天的搜索,这是我找到的最好的资源:https://ccrma.stanford.edu/~jos/
这是一个关于合成声音主题的宝库。
STK 例如,此页面链接到一个C语言合成字符串的示例,还有一个用于辅助此工作的C++编写的声音工具包STK。
在我挖掘这些内容的几周时间里,这将让我保持安静。
index = (index+1) % bufSize;
outVal = buf[index] = decay * 0.5 * ( buf[index-1] + buf[index-2] );
这个结果字节流就是你的声音。当然,这可以进行大量的优化。
要使你的声波在一秒钟后减弱到其原始强度的0.15倍,你可以这样设置衰减:
#define DECAY_1S =.15
Float32 decay = pow(DECAY_1S, 1.0f / freq);
Chuck
这个PDF详细介绍了SMule如何为iPhone创建Ocarina(我相信每个人都看过广告)。 他们通过移植Chuck-强时序,并发和即时音频编程语言来实现。
该软件可在MacOS X、Windows和Linux上使用。
我在FM合成方面取得了很多成功和乐趣。它是一种计算量较小的方法,也是20世纪80年代流行合成器声音的巨大来源(作为无处不在的Yamaha DX-7的基础)。
我使用它来即时生成声音而不是使用录音。可以从http://philfrei.itch.io/referencenotekeyboard免费下载Win64版本的弦乐合成器声音的简单示例。该程序中的管风琴合成器是一个简单的加法合成算法。
我需要找一些关于这方面的好教程。我知道当我试图弄清楚它并帮助nsigma解决他的FM算法问题时,我们在java-gaming.org上讨论了很多。主要的是如果您想将多个调制器链接到载波,则使用相位而不是频率调制。
这提醒我!有一种令人惊叹的基于Java的声音生成器可供检查,允许生成多种不同形式的合成,并进行实时控制:PraxisLIVE