【问题标题】:ADSR Envelope - formula needed to fade in and out whole, half, quarter, eighth notes (dsp.js)ADSR Envelope - 淡入和淡出全音符、二分音符、四分音符、八分音符所需的公式 (dsp.js)
【发布时间】:2011-01-10 06:59:11
【问题描述】:

我正在应用 ADSR 信封来淡入和淡出音符,因此我在每个音符后都听不到爆音。我正在使用 Firefox 4 音频数据 API 在 JavaScript 中编程。我正在使用的 dsp.js 库 (https://github.com/corbanbrook/dsp.js) 有一个 ADSR Envelope 函数,如下所示:ADSR(attack, decay,sustainLevel,sustain,release,sampleRate)(以秒为单位)。

下面的四分音符听起来不错(假设每分钟 120 拍):

var envelope = new ADSR(0.01, 0.1, 0.5, 0.1, 0.2, 44100);

我可以使用什么公式来确定适用于全音符、二分音符、四分音符或八分音符的正确 ADSR 参数?

我是数字信号处理的新手,我需要计算以根据音符的持续时间增加/减少起音、衰减、延音和释音。

【问题讨论】:

  • 您在 audio.stackexchange.com 上的运气可能会更好。

标签: api audio signal-processing


【解决方案1】:

我从初中就没有上过钢琴课,但我记得全音、二分音符、四分音符和八分音符之间的唯一区别是你听到音符的长度。所以我认为您需要调整sustain. 如果您对四分音符的值感到满意,请将其加倍为二分之一,将其加倍为全音,然后将其减半为八分之一。

您可能会发现要获得更自然的声音,您需要更改一些其他参数,但我猜您需要通过实验来解决这个问题。你可能会发现你也想减少八分音符的释放时间,但这应该是一个小的调整。另一方面,断奏需要很短的释放,也可能需要很短的起音,并且可能需要更高的延音水平。

【讨论】:

    【解决方案2】:

    两个方便的功能
    - SyncToSamples 将音乐时间转换为 X 采样率的样本。
    - SamplesToSeconds 顾名思义转换。

    function SyncToSamples(SyncFactor, BPM, SampleRate: single): single; 
    begin
      result := (SyncFactor * 4) * SampleRate * 60 / BPM;
    end;
    
    function SamplesToSeconds(Samples, SampleRate: single): single; 
    begin
      result := Samples / SampleRate;
    end;
    

    计算长度
    - 一个完整的音符使用 SyncFactor = 1
    - 二分音符使用 SyncFactor = 1/2
    - 四分音符使用 SyncFactor = 1/4

    以上函数可用于计算四分音符的长度(以秒为单位)。从那里可以调整各个 ADSR 阶段的时间以满足时间要求。

    正如其他人所建议的那样,仅根据速度变化调整延音时间可能听起来更自然。改变起音、衰减和释放时间将改变音符字符。

    【讨论】:

    • 所有的回答都是正确的,最重要的参数是音符持续时间的延音时间。听起来可以通过尝试听起来最好和最自然的方式来更改其他参数。我选择此作为正确答案,因为它考虑了 BPM 和 SampleRate。
    【解决方案3】:

    如果您希望音符听起来大致相同,但仅在四分之一、二分之一、八分之一音符等之间改变持续时间,请尝试仅改变延音时间,使起音、衰减和延音时间加倍、减半等。这大致对应于指法乐器时从手指向下到手指向上的时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      相关资源
      最近更新 更多