instruments - 编程乐器模拟器?

标签 instruments sampling audio

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

2年前关闭。




Improve this question




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

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

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

响应不必与陶笛严格相关,尽管我不介意它们是。

最佳答案

那个特殊的乐器对我来说听起来像是一个相当简单的合成模块,可能基于方波或 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 之间的值在 channel CC2 上传输。然后该值用于连续控制输出声音的音量。 (在 iPhone 上,MIDI 可能会或可能不会在内部使用,但概念是相同的。不管怎样,从现在开始,我都会将此值称为 CC2。)

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

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

呼吸仪器 201:当人们被呼吸 Controller 控制时,人们会使用一些技巧来使声音更具表现力:
  • 确保您的输出一次只播放一个音符;切换到新音符会自动结束上一个音符。
  • 如果呼吸压力恒定且按键已连接,请确保从旧音符到新音符的音量保持平稳。这使您可以区分连奏演奏和分离演奏。

  • 呼吸乐器 301:然后我们开始有趣的事情:如何像真正的管乐器一样模拟过度吹奏、音色变化、部分指法等。我可以在这里想到几种方法:
  • 混入呼吸输入本身的声音,也许以某种方式过滤,为您的声音赋予自然的啁啾或呼吸声。
  • 使用力度层之间的交叉渐变将高力度的声音转换为完全不同的声音。换句话说,当你淡入新的声音时,你实际上淡出旧的声音;他们演奏相同的音高,但新声音的新音调特征会逐渐显现出来。
  • 使用具有大量高频成分的复杂声音。连接截止频率由 CC2 控制的低通滤波器。截止频率随着 CC2 值的增加而增加。当您在输入上用力吹气时,这可以以一种有趣的方式增加高频内容。
  • 执行此操作的核心方法称为物理建模。它涉及为您尝试模拟的仪器的物理行为创建详细的数学模型。这样做可以为您提供非常逼真的过吹效果,并且可以捕捉呼吸输入和指法如何塑造声音的许多微妙效果。在 Princeton's Sound Lab 上有此方法的快速概述。和 sample 仪器戳 in the STK C++ library – 但请注意,这不适合数学上胆小的人!
  • 关于instruments - 编程乐器模拟器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3214768/

    相关文章:

    python - 当窗口切换时,Pygame音频会停止吗?

    java - 再次按下按钮时声音停止

    html - MP3 音频在 Firefox 浏览器/Android Firefox 浏览器中无法工作

    xcode - 调试 Mac/Cocoa 文件描述符泄漏

    iphone - UIAutomation 脚本示例

    algorithm - 如何对直线(或曲线)进行等距重采样?

    verilog - 将 14 位字缩放为 8 位字

    iOS 应用程序因内存限制而被杀死

    objective-c - 如何追踪内存峰值? (这是带有 p 的峰,而不是 l。)

    c# - XNA动态音频的C#环绕弧度角