Metlivi 博客

按键释放后如何让采样保持恒定音量一段时间

若要在释放按键后让采样以稳定音量继续播放固定时长,请延迟其 MIDI 释放音符消息,同时让采样器的振幅包络保持在延音电平。延迟结束后再让包络进入释音阶段。增大常规的 Release(释音)控件会产生渐弱效果,而不是稳定的平台段。有些乐器提供专用的释放后保持功能,但“Hold”(保持)在不同设备上的含义并不相同。FabFilter One:包络发生器。

本指南适用于希望在抬起手指后让采样继续以稳定音量播放一段时间(例如两秒)的键盘演奏者或制作人。指南将说明如何找到合适的控件,并在采样器缺少该功能时提供完整的 Logic Pro Scripter 实现方案。

2026年10月29日阅读时间:7 分钟作者:Metlivi Editorial Team
第 1 节

释放按键后究竟应该发生什么?

调整控件前,先明确时序。目标行为是:按键按下时播放采样;释放按键后,在选定时长内保持既定电平;然后停止播放或开始短暂渐弱。无论最初按住音符多久,这段时长都必须从释放按键时开始计算。

以两秒设置为例,在 0.35 秒时释放按键,应该在 2.35 秒时开始结束播放;在 3 秒时释放,则应该在 5 秒时开始结束播放。这些是时序示例,并非实测性能结果。如果设置让播放总是在最初按下按键两秒后结束,那实现的是另一种行为。

还要区分恒定的包络增益与恒定的可听响度。平坦的振幅包络会保留采样本身的动态变化。如果录音渐弱、包含静音或已经播放到结尾,保持包络开启也无法提供连续稳定的声音。请使用持续发声的录音或合适的循环片段。

第 2 节

为什么 Release 和 Hold 经常无法得到正确效果?

在 Logic Pro Sampler 中,Sustain(延音)指定按键持续按下时保持的电平。Release(释音)指定从该电平降至零的过程。AHDSR 中的 Hold 阶段位于 Attack(起音)之后、Decay(衰减)之前;它不是抬起手指时启动的计时器。ENV 1 控制振幅。这些定义说明,延长 Release 或初始 Hold 阶段并不能直接产生所需的平台段。Apple:使用 Sampler 包络。

真正的释放后保持功能则有所不同。FabFilter One 文档将 Hold 定义为额外时长:在这段时间里,即使按键已释放,其包络仍将按键视为按下状态;之后才进入 Release 阶段。查阅手册时应寻找这种行为。这里引用 FabFilter One 来说明控件的含义;下文采用的采样播放实现并非来自 FabFilter One。FabFilter One:包络发生器。

Ableton 的 Drum Sampler 文档说明了为什么需要核实控件名称。它将 Trigger 模式中的 Hold 定义为相对于起音峰值的时长,同时也说明释放音符后播放会继续。Gate 模式则在释放后渐弱,且 Hold 在该模式下不可用。在确认 Trigger 模式的 Hold 值是否从释放按键时开始计时之前,应先测试其时序。Ableton Live 12:Drum Sampler。

第 3 节

应该选择哪种方法?

可用功能 实用选择
手册明确说明保持时长从释放按键时开始计算 使用该功能,并设置稳定的延音电平。
Hold 从 Attack 之后开始,或播放时长从触发时固定计算 将释放音符延迟设为从释放按键时开始计算的时长。
正在编辑现有的 MIDI 演奏 将每个音符的结束时间延长所需时长,然后使用较短的释音。
音源录音渐弱或过早结束 调整音符时序前,先准备持续发声的音源或循环片段。

这个判断方法基于区分两种控制:采样器负责塑造振幅,MIDI 音符时序决定何时请求释音。只延迟释放音符,就能保留原始的起音时序。如果同时延迟两条消息,整段音符只会整体后移。

第 4 节

如何在 Logic Pro 中准备采样和包络?

创建一条软件乐器轨道,插入 Sampler 并载入采样。Apple 的文档说明,可以将音频拖到 Sampler 的导航栏中以创建映射区域。在 Zone(区域)窗格中,可以调整播放边界、循环点和循环交叉淡化。选择一段相对稳定的音频作为持续播放内容,并聆听它循环数次。Apple:使用 Sampler 创建采样器乐器。

初次测试时,使用一个保持音,并将其设为原始音高。如果没有设置循环,请确保采样时长足以覆盖整个测试:按键按住的时间、额外的保持时长,以及结束阶段。短录音无法支持任意长的按键保持。

在 Modulators(调制器)中,选择 ENV 1 并选用 AHDSR。将 Delay(延迟)和 Hold 设为零,Attack 设为较短时长,Sustain 设为最大值,Release 设为较短的结束时长。Sustain 达到最大值时,Decay 不会影响电平。这些设置适合作为诊断起点;之后如果声音需要,可以保留较长的起音时间。Apple:使用 Sampler 包络。

第 5 节

如何用 Scripter 将释放音符延迟两秒?

将 Scripter 插入轨道的 MIDI FX 区域,并置于采样器之前。打开 Script Editor(脚本编辑器),用下方完整程序替换现有脚本,然后点击 Run Script(运行脚本)。Apple 的文档介绍了这一编辑和运行流程。Apple:使用 Scripter 脚本编辑器。

此程序需要 Logic Pro 的 Scripter 环境,该环境提供 MIDI 事件类和调度方法。无需导入模块,也不需要音频文件路径。输入为常规键盘按下音符消息,随后是释放音符消息;速度为零的按下音符消息也会作为另一种释放音符表示方式处理。Apple 的文档介绍了这些事件类型以及 sendAfterMilliseconds()。Apple:使用 JavaScript Event 对象。

// Complete Logic Pro Scripter program.
// Additional hold after physical key release, in milliseconds.
var HOLD_MS = 2000;

function HandleMIDI(event) {
    if (event instanceof NoteOff) {
        event.sendAfterMilliseconds(HOLD_MS);
    } else if (event instanceof NoteOn && event.velocity === 0) {
        var off = new NoteOff(event);
        off.sendAfterMilliseconds(HOLD_MS);
    } else {
        event.send();
    }
}

将 HOLD_MS 改为其他非负时长,例如将其设为 750,即可得到四分之三秒。脚本会立即发送按下音符消息,并在稍后调度释放音符消息。其他传入消息会直接通过。脚本不会立即转发原始释放音符消息,因为那会让采样器过早进入释音阶段。

我们用一个小型 JavaScript 模拟程序检查了事件路由分支:按下音符消息和控制器事件会立即通过,而两种释放音符表示方式都会延迟 2,000 毫秒调度。这验证的是路由逻辑,并未测量 Logic Pro 的音频时序,也未实际试听采样器。

第 6 节

如何验证计时从释放按键时开始?

请按以下步骤测试,确保延音踏板未启用,并旁通音频效果。每次只测试一个音符,等声音结束后再重复同一音高。

  1. 将 HOLD_MS 设为 2000,然后运行脚本。
  2. 短暂按下一个键。聆听结束前是否有一段稳定的延续播放。
  3. 按住同一个键约三秒,然后释放。
  4. 检查释放后的延续播放时间是否仍约为两秒。
  5. 将 HOLD_MS 改为 500,再次运行脚本,然后重复这两种按键方式。

若要更仔细地检查,可以录制采样器的输出,并将其结束时刻与原始 MIDI 音符的结束时刻进行比较。按键保持三秒并延长两秒的示例中,释音应在按下音符约五秒后开始。如果增加了较短的包络释音,最终静音时刻会晚于平台段的结束时刻。

例如,两秒的平台段之后接一个示例性的 10 毫秒释音,从释放按键到结束的标称时长就是 2.01 秒。请确认你要求的时长是指“开始渐弱之前的时间”还是“直到静音的时间”,并相应调整。

第 7 节

如果采样渐弱、过早停止或重新触发不正确,应该检查什么?

如果声音在这段时间内渐弱,请暂时使用稳定的音源进行测试,并停用额外的振幅调制或效果。比较按键按下期间与释放后的播放情况。如果两者都以相似方式渐弱,应检查录音或循环设置,而不是延长 MIDI 延迟。

如果播放过早结束,请检查采样终点和循环设置。如果播放时间超出预期,请缩短采样器的释音时长,并在不添加效果尾音的情况下测试。每次只更改一个因素,便于区分调度的音符结束与之后产生的音频。

重复音符需要单独检查。这个简单脚本不会取消已调度的释放音符消息,也不会为每个发声音色分配唯一标识。因此,如果在延迟的释放音符到达前,于同一声道重放同一音高,视乐器的发声音色处理方式而定,可能会导致声音意外截断。使用此实现时,应等一个音高的声音结束后再重放;快速重复演奏音符需要使用专门处理这些重叠情况的处理器。

短按和长按测试都能在释放后得到相同的时长后,请将 Scripter 设置与乐器音色一同保存。确保音源能够持续发声、包络电平保持稳定,并让结束阶段足够短,以符合预期声音效果。这三项设置能让延迟释放音符实现实用且可重复的保持效果。

第 8 节

来源

相关阅读

继续探索这个主题