编程乐器仿真器?

时间:2010-07-09 16:47:24

标签: instruments sampling audio

有人可以向我提供有关编程乐器模拟器的信息。例如,请参阅here(适用于iPhone的Smule's Ocarina应用程序)。

我要找到关于这个主题的足够信息。以ocarina应用程序运行为例,单个音符是如何产生的?由于结果是基于呼吸强度以及哪些“孔”被按下,其中一些必须以编程方式处理,但是整个声音是以编程方式生成的,或者它会在后端使用声音样本并修改它(或者那些,如果使用多个样本)?

此主题是否有任何资源?我的所有搜索都提供了有关如何播放音乐(仅标准音频)或如何制作音乐(在音乐编辑软件中)的信息,但没有关于如何进行该视频中显示的内容的信息。

响应不一定与ocarinas严格相关,但我不介意它们。

2 个答案:

答案 0 :(得分:3)

这个特殊的乐器听起来像是一个相当简单的合成模块,可能基于方波或FM,并附有混响滤波器。所以我猜它是人工生成的声音。如果您打算自己构建其中一种乐器,可以使用样本集作为基础,如果您愿意的话。还有另一种可能性,我将在下面提到一些方法。

处理呼吸输入:呼吸输入通常转换为表示输入麦克风上的气压的值。这可以通过获取输入音频信号的小块并计算每个块的峰值或RMS来完成。我更喜欢RMS,它的计算方法如下:

int BUFFER_SIZE = 1024; // just for purposes of this example
float buffer[BUFFER_SIZE]; // 1 channel of float samples between -1.0 and 1.0
float rms = 0.0f;
for (int i=0; i<BUFFER_SIZE; ++i) {
    rms += buffer[i]*buffer[i];
}
rms = sqrt(rms/BUFFER_SIZE);

在MIDI中,此值通常在通道CC2上传输为0到127之间的值。然后,该值用于连续控制输出声音的音量。 (在iPhone上,MIDI可以在内部使用,也可以不在内部使用,但概念是相同的。无论如何,我都会从这里将这个值称为CC2。)

处理按键操作:在这种情况下按键可能只是直接映射到它们对应的音符。然后将这些作为新的音符事件发送到乐器。我不认为那里有任何花哨的造型。

其他形式的控制: Ocarina乐器使用iPhone的倾斜来控制颤音的频率和音量。这通常仅通过低频振荡器(LFO)进行建模,该振荡器通过仪器其余部分的输出进行缩放,偏移和乘以产生颤动音量效果。它还可用于控制乐器的音高,从而导致音高波动。 (如果您正在使用样本,这可能很难做到,但如果您使用波形则相对容易。)花式MIDI风控制器还可以跟踪手指压力和咬合压力,并可以将这些作为参数公开给您同样塑造你的声音。

呼吸器具201:当呼吸控制器控制声音时,人们可以通过一些技巧使声音更具表现力:

  • 确保您的输出一次只播放一个音符;切换到新音符会自动结束之前的音符。
  • 如果呼吸压力恒定且按键连接,请确保从旧音符到新音符的音量保持平滑。这使您可以区分连奏演奏和分离演奏。

呼吸仪器301:然后我们得到了有趣的东西:如何模拟吹气,音色变化,部分指法等,就像真正的管乐器一样。我可以在这里想到几种方法:

  • 混合呼吸输入本身的声音,或许以某种方式过滤,为你的声音带来自然的气息或气息。
  • 使用速度层之间的交叉渐变将高速声音转换为完全不同的声音。换句话说,当你褪色新声音时,你会逐渐淡出旧声音;他们的音调相同,但新音的新音调特征会逐渐显现出来。
  • 使用含有大量高频成分的复杂声音。连接一个低通滤波器,其截止频率由CC2控制。随着CC2值的增加,截止频率会增加。当您在输入上更加努力时,这可以以有趣的方式增加高频内容。
  • 执行此操作的核心方法称为物理建模。它涉及创建一个详细的数学模型,模拟您试图模拟的仪器的物理行为。这样做可以为您提供非常逼真的过吹效果,它可以捕捉到呼吸输入和指法如何塑造声音的许多微妙效果。在Princeton's Sound Lab快速概述了这种方法,并在in the STK C++ library进行了一个示例工具 - 但要注意,这不是数学上的微弱之处!

答案 1 :(得分:0)

首先,我不太确定你的问题是什么。

有很多种声音合成。我知道的一些是:

  • 频率调制
  • 振荡波
  • 表格(基于样本)

振荡非常简单,可能是开始的地方。如果您生成440Hz的方波,则会有“A”或更具体的中间A。

这种简单的合成非常有趣且容易做到。也许你可以开始为PC扬声器制作一个简单的合成器。哦,但我不知道是否所有操作系统都允许您访问它。 LADSPA有一些很好的例子。有很多用于Linux的文件库可以帮助您入门。你可能想看看Csound的初学者:http://www.csounds.com/chapter1/index.html

我玩了一下,并且有几个老套合成器正在进行......