首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弯曲弦(例如小提琴)合成算法

弯曲弦(例如小提琴)合成算法
EN

Stack Overflow用户
提问于 2021-11-28 10:58:03
回答 2查看 199关注 0票数 3

是否有一种众所周知的合成弯曲弦乐器(如小提琴)的算法?

我知道弹拨字符串(例如吉他)有karplus-强算法,这是我在过去成功实现的。

理想情况下,我想要一个算法来描述一个用于生成/合成数字信号的计算机程序。

例如,karplus-强算法可以概括如下:

  • 确定要合成的频率的周期长度,并创建完全相同大小的缓冲区。
  • 用随机数填充缓冲区(白噪声)
  • 在缓冲区中进行迭代,每次平均每个poitn中的下一个点,然后将其输出到输出流。
  • 重复所需的时间,同时施加一些阻尼。

我想知道类似的东西是否存在于鞠躬琴弦。

脚注:

现在,我对弦是如何产生声音的物理一无所知,所以我不知道如何推导出这样的算法。对于karplus-强算法,我只是在原始论文中阅读并“盲目地”应用它。我从来没有想过,从一段时间的噪音和不断的阻尼开始,它会产生一个非常类似于弹拨线的声音。

编辑

和往常一样,近距离游行也开始了。

在表决结束此问题之前,请考虑以下几点:

  • 这个问题与物理学无关。它不是关于弦振动的力学或与弓和空气的相互作用,以产生声音。
  • 这个问题是关于是否存在一个特定的、众所周知的合成声音的算法。严格来说,这是一个关于编程的问题。
EN

回答 2

Stack Overflow用户

发布于 2021-11-29 00:24:07

奇怪的是,我在史丹福查克网站上找到了一些东西。

代码是用一种叫做ChucK的语言编写的,它显然是音频编程的专用语言。您必须运行才能使用此代码段。但它在查克中的实施情况如下:

代码语言:javascript
复制
// patch
Bowed bow => dac;

// scale
[0, 2, 4, 7, 8, 11] @=> int scale[];

// infinite time loop
while( true )
{
    // set
    Math.random2f( 0, 1 ) => bow.bowPressure;
    Math.random2f( 0, 1 ) => bow.bowPosition;
    Math.random2f( 0, 12 ) => bow.vibratoFreq;
    Math.random2f( 0, 1 ) => bow.vibratoGain;
    Math.random2f( 0, 1 ) => bow.volume;

    // print
    <<< "---", "" >>>;
    <<< "bow pressure:", bow.bowPressure() >>>;
    <<< "bow position:", bow.bowPosition() >>>;
    <<< "vibrato freq:", bow.vibratoFreq() >>>;
    <<< "vibrato gain:", bow.vibratoGain() >>>;
    <<< "volume:", bow.volume() >>>;

    // set freq
    scale[Math.random2(0,scale.size()-1)] + 57 => Std.mtof => bow.freq;
    // go
    .8 => bow.noteOn;

    // advance time
    Math.random2f(.8, 2)::second => now;
}

编辑:上面的只是实现,它的源文件是这里。

票数 3
EN

Stack Overflow用户

发布于 2021-12-08 15:21:54

不是一个算法,但是有一个开源库(在一个非常自由执照下),它在C++中为包括弯曲字符串在内的几个工具实现合成算法。

合成ToolKit (STK)

官方主页:https://ccrma.stanford.edu/software/stk/

Github链接:https://github.com/thestk/stk

包含与弓弦乐器合成相关代码的文件:

守则中的评论提到了两篇论文:

朱利叶斯·史密斯( Julius Smith )也在他的(斯坦福)网站上找到了关于弓弦合成的信息:

“物理音频信号处理”一书中的弯弦部分

弯弦的MUS420讲座数字波导建模

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70142713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档