1 个不稳定版本
0.2.0 | 2021年11月15日 |
---|
#445 在 音频 中
320KB
8K SLoC
Loopers
Loopers 是一个图形化的 实时循环器,使用 Rust 编写,设计简单易用,稳定可靠。它可以作为一个练习工具、作曲辅助工具,或用于现场表演中的循环作品。
目前它作为独立的 Jack 应用程序在 Linux 上运行,允许它与效果架、软件乐器和 DAW 等其他 Jack 客户端进行交互,或在 MacOS 上使用 Jack 或(实验性)直接与 CoreAudio 交互。
系统被模拟为一系列硬件循环单元(如 Boss Loop Station),这些单元通过单个时间控制同步。循环单元的数量仅受您的显示大小限制,循环长度仅受可用内存限制。
功能
- 由公共时间控制同步的多个循环
- 循环可以录制(设置循环长度)、叠加、清除、静音和独奏
- 最多可以使用四个部分来分割表演的各个部分
- 支持循环命令的节拍、小节和自由量化,使其易于同步
- 无限撤销/重做
- 双倍速度和半倍速度播放(以及叠加!)
- 每个操作都可以通过 GUI 或 MIDI 控制
- 可以保存和恢复会话
- 内置的节拍器(在单独的 Jack 输出上)有助于您在循环中保持准确的时间
- 循环长度不受限制,仅受计算机内存限制
- 交叉淡入确保每次都能完美循环
- 很有趣!
入门指南
Linux
要构建 loopers,您将需要 jack 和 sdl2。
对于 Ubuntu/Debian,可以使用以下命令安装它们
$ sudo apt install jackd2 libjack-jackd2-dev libgl1-mesa-dev libsdl2-dev
现在您可以安装 loopers 本身了。首先安装 rust 工具链(https://rustup.rs),然后
$ cargo install loopers
然后使用以下命令启动它
$ loopers
(如果您收到关于 Jack 没有运行的错误,您需要首先启动 Jack 服务器。有关详细信息,请参阅 Jack 文档。)
这将创建一个 Jack 客户端,可以与任何数量的工具(我推荐来自 KXStudio 的 Claudia)连接到您的输入/输出/效果。
Loopers 也应与 PipeWire 完全兼容,这消除了需要单独的 Jack 服务器的需求。
MacOS
Loopers 对在 CoreAudio 上运行提供实验性支持,CoreAudio 是 MacOS 的原生音频系统(您也可以在 MacOS 上在 jack 上运行它,目前对它的支持更好)。要在 Mac 上使用 CoreAudio 构建
$ brew install jack sdl2
$ cargo install loopers
$ loopers
默认情况下,它将使用 CoreAudio 运行。要使用 jack 运行
$ loopers --driver jack
注意:目前通过 coreaudio 不支持 midi,并且无法选择音频源和输出端(使用默认设备)。
文档
用户界面导览
用户界面分为两部分:顶部包含一组 loopers,底部包含引擎的控件和设置。将鼠标悬停在每个 loopers 上会显示该 loopers 的控件,包括设置 loopers 所参与的片段和控制模式。
每个 loopers 都会显示一些关键信息,以便表演者快速了解其状态
将鼠标悬停在 loopers 上会生成 loopers 的控件(尽管大多数表演者更愿意使用硬件按钮)
底部是引擎控件
Loopers 模式
在任何给定时间,每个 loopers 可以处于几种模式之一,每种模式在 UI 中都有颜色标识
- 播放
- 在播放模式下,loopers 的输出与其他所有 loopers 的输出混合,并发送到全局输出。这是默认模式。
- 录音
- 当开始录音时,loopers 中所有现有的样本都会被清除。然后,直到录音完成,新的音频会被记录到一个样本中,从而确定循环长度。
- 叠加
- 在叠加模式下,我们在 loopers 中现有的样本上添加新的输入,而不改变循环长度。
除了这些独家模式之外,loopers 还可以有以下一个或多个 修饰符
- 独奏
- 如果启用独奏,所有其他 loopers 都会被静音(除了那些也处于独奏模式的外)。
- 静音
- 当启用静音时,loopers 会被静音。
模式和修饰符可以通过 UI 或通过发送 midi 命令来控制。
量化
当使用多个 loopers 时,通常希望它们同步在一起。在 Loopers 中,这是通过一个跨所有 loopers 使用的时间控制来实现的。同时,循环长度必须是彼此的确切倍数(例如,您可能有一个 4 倍于节奏 loop 的 bass loop)。如果长度偏差超过几毫秒,在几次重复之后就会很快被发现。
为了帮助表演者使循环长度完全同步,Loopers 提供了一个 量化 功能。这允许您将命令(例如,停止录音从而设置循环长度)同步到某些度量事件。
它支持三种量化模式,通过 UI 底部的按钮设置
- 自由:禁用量化,使所有命令立即生效
- 节拍:命令在发布后的下一个节拍生效,由速度决定
- 小节:命令在下一个小节的开始生效,由速度和拍号决定
一些命令受量化影响,一些命令立即生效。有关更多信息,请参阅命令参考。
命令
系统的各个方面都可以通过命令进行控制,无论是通过UI还是通过midi。有关配置midi控制的详细信息,请参阅设置。
有两种命令:loop器命令,应用于一个或多个loop器,以及引擎命令,应用于整个系统。命令可以接受参数来控制命令的行为。
loop器命令都接受一个第一个参数,用于确定将针对哪个loop器
- 已选:仅针对通过UI或通过
Select*Looper
命令之一控制的已选loop器 - Id:接受一个id参数,并针对具有该id的loop器
- Index:接受一个index参数,并针对当前可见部分中该索引处的loop器,从0开始。
- 所有:针对所有loop器
其他命令也可能接受控制其行为的参数。
命令在量化方面也有区别
- 即时命令在收到后立即执行,不受量化设置或系统状态的约束
- 排队命令将在队列中等待其他(可能是量化的)命令生效后执行。例如,您可以发送切换到下一部分(量化的命令),然后发送SelectNextLooper命令(排队的命令),它将在部分切换之前执行。
- 量化命令将在下一个量化边界(例如,下一个小节的开始,有关详细信息,请参阅量化)执行。
loop器命令
命令 | 参数 | 量化 | 描述 |
---|---|---|---|
录音 | loop器目标 | 量化 | 将选定的loop器移动到录音模式 |
覆盖录音 | loop器目标 | 量化 | 将选定的loop器移动到覆盖录音模式 |
播放 | loop器目标 | 量化 | 将选定的loop器移动到播放模式 |
录音/覆盖录音/播放 | loop器目标 | 量化① | 从录音 -> 覆盖录音 -> 播放 -> 覆盖录音 |
静音 | loop器目标 | 即时 | 切换所选loop器的静音修饰符 |
独奏 | loop器目标 | 即时 | 切换所选loop器的独奏修饰符 |
删除 | loop器目标 | 即时 | 删除所选loop器 |
清除 | loop器目标 | 量化 | 清除所选loop器的所有样本 |
设置Pan | loop器目标,一个从-1(完全左侧)到1(完全右侧)的pan值 | 即时 | 为loop器设置pan |
设置级别 | loop器目标,一个从0(静音)到1(全音量)的级别值 | 即时 | 为loop器设置输出级别 |
1/2x | loop器目标 | 即时 | 将loop器设置为1/2x速度 |
1x | loop器目标 | 即时 | 将loop器设置为1x速度 |
2x | loop器目标 | 即时 | 将loop器设置为2x速度 |
① RecordOverdubPlay从录音 -> 覆盖录音和覆盖录音 -> 播放量化,但从播放 -> 覆盖录音排队。
引擎命令
命令 | 参数 | 量化 | 描述 |
---|---|---|---|
开始 | 无 | 即时 | 启动引擎 |
停止 | 无 | 即时 | 停止引擎,重置时间 |
开始/停止 | 无 | 即时 | 如果已停止则启动引擎,否则停止它 |
播放/暂停 | 无 | 即时 | 如果已激活则暂停引擎,否则重新启动它 |
暂停 | 无 | 即时 | 停止引擎但不清除时间 |
重置 | 无 | 即时 | 重置引擎时间 |
设置时间 | 时间(样本数) | 即时 | 将时间设置为指定的样本数 |
添加loop器 | 无 | 即时 | 将loop器添加到当前部分的末尾 |
按ID选择loop器 | loop器ID | 即时 | 选择具有给定ID的loop器 |
按索引选择loop器 | 索引 | 即时 | 选择当前部分中给定索引处的loop器(从0开始) |
选择前一个循环器 | 无 | 已排队 | 选择当前部分中的上一个循环器,从第一个循环器循环到最后一个循环器 |
选择下一个循环器 | 无 | 已排队 | 选择当前部分中的下一个循环器,从最后一个循环器循环到第一个循环器 |
上一个部分 | 无 | 量化 | 跳过没有循环器的部分,转到上一个部分 |
下一个部分 | 无 | 量化 | 跳过没有循环器的部分,转到下一个部分 |
转到指定部分 | 以下之一:A ,B ,C 或D |
量化 | 转到指定的部分 |
设置量化模式 | 以下之一:Free ,Beat 或Measure |
即时 | 为引擎设置量化模式 |
设置节拍器级别 | 0-100 | 即时 | 将节拍器音量设置为给定的百分比 |
设置节拍器BPM | bpm (浮点数) | 即时 | 将引擎的节拍设置为给定的BPM值 |
设置拍号 | 上,下 | 即时 | 根据参数设置引擎的拍号(例如,3, 4) |
保存会话 | 路径 | 即时 | 将当前会话保存到指定的路径 |
加载会话 | 路径 | 即时 | 从指定的路径加载会话,替换现有的会话 |
设置
配置存储在标准系统用户配置位置(通常这将是 ~/.config/loopers/)。当前配置由一组从MIDI消息到循环器命令的映射组成。这些应放置在配置目录中的名为midi_mappings.tsv
的文件中,该文件将在循环器第一次运行后自动创建。
此文件的每一行非空行应包含以下制表符分隔的列
- MIDI通道(可以是
*
表示任何通道或通道号) - MIDI控制器号
- MIDI数据(可以是
*
表示任何数据,单个值如50
或范围如0-100
) - 命令名称(参见上面的表格)
- 命令参数(多个参数应使用制表符分隔;特殊值
$data
可以在某些数值参数的位置使用,以使用MIDI事件的数值,例如用于表情踏板)
MIDI值(通道、控制器、数据)可以被视为对传入MIDI事件的过滤器;对于每个事件,所有匹配的命令都会触发。
配置用于与Behringer FCB1010(一个出色的踏板板)的示例
Channel Controller Data Command Arg1 Arg2 Arg3
* 22 127 RecordOverdubPlay Selected
* 22 0 RecordOverdubPlay Selected
* 23 127 SelectNextLooper
* 23 0 SelectNextLooper
* 24 127 NextPart
* 24 0 NextPart
* 25 127 Clear Selected
* 25 0 Clear Selected
* 26 127 PlayPause
* 26 0 PlayPause
* 27 0-127 SetPan Selected $data
依赖关系
~29–42MB
~740K SLoC