【问题标题】:Programming Musical Instrument Emulators? [closed]编程乐器模拟器? [关闭]
【发布时间】:2010-07-09 16:47:23
【问题描述】:

谁能提供有关编程乐器模拟器的信息。例如,请参阅here(适用于 iPhone 的 Smule 的 Ocarina 应用程序)。

我要找到有关此主题的足够信息。以 ocarina 应用为例,各个音符是如何产生的?由于结果是基于呼吸的强度和哪些“洞”被按住,其中一些必须以编程方式处理,但整个声音是通过编程方式生成的,还是会在后端使用声音样本并对其进行修改(或那些,如果使用多个样本)?

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

响应不必与陶笛严格相关,但我不介意。

【问题讨论】:

  • 人们对着 iphone 吹口哨?这个苹果业务每天都变得越来越荒谬......无论如何,乐器合成是一项艰巨的业务,需要一些扎实的物理或数学知识。谷歌搜索“FM 合成”可能会有所帮助。

标签: instruments sampling audio


【解决方案1】:

在我看来,那个特定的乐器听起来像是一个相当简单的合成模块,可能基于方波或 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 中,此值通常作为 0 到 127 之间的值在通道 CC2 上传输。该值随后用于持续控制输出声音的音量。 (在 iPhone 上,MIDI 可能会或可能不会在内部使用,但概念是一样的。不管怎样,我将把这个值称为 CC2。)

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

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

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

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

Breath Instruments 301: 然后我们开始讨论有趣的事情:如何像真正的管乐器一样模拟吹气、音色变化、部分指法等。我可以在这里想到几种方法:

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

【讨论】:

    【解决方案2】:

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

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

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

    振荡非常简单,可能是开始的地方。如果你生成一个 440Hz 的方波,你会得到音符“A”或更具体地说是中间 A。

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

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

    【讨论】:

      猜你喜欢
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      • 2010-09-20
      相关资源
      最近更新 更多