#looper #loopers #quantization #command #engine #loops #length

loopers-engine

Loopers 项目核心引擎。有关主项目,请参阅 loopers-jack。

4 个版本

0.2.0 2021 年 11 月 15 日
0.1.2 2021 年 2 月 9 日
0.1.1 2021 年 1 月 6 日
0.1.0 2020 年 11 月 29 日

#2 in #looper


2 crates 中使用

MIT/Apache

170KB
4.5K SLoC

Loopers

master status Crate

Loopers 是一个基于 Rust 编写的图形化实时循环器,设计简单易用,稳定性高。它可以作为练习工具、作曲辅助或现场循环表演使用。

目前它作为独立的 Jack 应用程序在 Linux 上运行,允许它与效果架、软件乐器和 DAW 等其他 Jack 客户端进行交互,或在 MacOS 上使用 Jack 或(实验性)直接与 CoreAudio 交互。

video of loopers

系统模拟一系列硬件循环单元(如 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 运行它,目前对 jack 的支持更好)。要在 Mac 上使用 coreaudio 构建

$ brew install jack sdl2
$ cargo install loopers
$ loopers

默认情况下,它将使用 CoreAudio 运行。要使用 jack 运行,

$ loopers --driver jack

注意:目前通过 coreaudio 不支持 midi,也没有选择音频源和目的地的能力(默认使用设备)。

文档

用户界面导游

Full UI

用户界面分为两部分:顶部包含一组 Loopers,底部包含引擎的控制和设置。将鼠标悬停在每个 Loopers 上会显示该 Loopers 的控制,包括设置 Loopers 所包含的部分和控制模式。

每个 Loopers 会显示一些关键信息,以便表演者快速了解其状态

Looper View

将鼠标悬停在 Loopers 上会产生 Loopers 的控制(尽管大多数表演者更喜欢使用硬件按钮)

Looper Controls

底部是我们找到的引擎控制

Engine Controls

Loopers 模式

在任何给定时间,每个 Loopers 都可以处于几种模式之一,每种模式都在 UI 中用颜色标识

play color 播放
在播放模式下,Loopers 的输出与所有其他 Loopers 混合后发送到全局输出。这是默认模式。
record color 录音
开始录音时,将清除 Loopers 的所有现有样本。然后记录新的音频到样本中,直到录音完成,从而建立循环长度。
overdub color 叠录
在叠录模式下,我们添加新的输入到 Loopers 中的现有样本之上,而不改变循环长度。

除了这些专有模式外,Loopers 还可以有下列一个或多个 修饰符

solo color 独奏
如果启用了独奏,所有其他 Loopers 都会被静音(除了那些也处于独奏模式之外的 Loopers)。
mute color 静音
当启用了静音时,Loopers 会静音。

模式和修饰符可以通过 UI 或通过发送 midi 命令来控制。

量化

当使用多个 Loopers 时,通常希望它们同步在一起。在 Loopers 中,这是通过使用一个用于所有 Loopers 的单个时间控制来实现的。循环长度必须是彼此的精确倍数(例如,您可能有一个比您的节奏循环长 4 倍的低音循环)。如果长度偏差只有几毫秒,几遍之后就会很快被察觉。

为了帮助表演者将循环长度精确同步,Loopers 提供了一个 量化 功能。这允许您将命令(例如,停止录音从而设置循环长度)同步到某些度量事件。

它支持三种量化模式,通过 UI 底部的按钮设置

  • 自由 这将禁用量化,并使所有命令立即生效
  • 节拍 命令在发布后下一个节拍生效,由节拍确定
  • 小节 命令在下一个小节的开始生效,由节拍和时间签名确定

一些命令受量化影响,而另一些则立即生效。有关更多信息,请参阅命令参考

命令

可以通过命令控制系统的各个方面,无论是通过UI还是通过midi。有关配置midi控制的详细信息,请参阅设置

有两种类型的命令:循环命令,应用于一个或多个循环器;以及引擎命令,应用于整个系统。命令可以接受参数,以控制命令的行为。

循环命令都接受一个第一个参数,该参数确定要针对哪个循环器

  • 已选:仅针对通过UI或通过其中一个Select*Looper命令控制的已选循环器
  • Id:接受一个id参数,并针对具有该id的循环器
  • Index:接受一个index参数,并针对当前可见部分中的该索引处的循环器,从0开始。
  • 所有:针对所有循环器

其他命令也可能接受控制它们行为的参数。

命令在受量化影响方面也有所不同

  • 立即命令在收到时立即执行,不受量化设置或系统状态的影响
  • 排队命令将在其他(可能已量化的)命令生效后等待在队列中,然后执行。这允许您,例如,发送切换到下一部分的命令(一个已量化的命令),然后发送SelectNextLooper命令(一个排队命令),该命令将在部分切换之前执行。
  • 量化命令将等待到下一个量化边界(例如,下一个小节的开始,有关详细信息,请参阅量化)才执行。

循环命令

命令 参数 量化 描述
记录 循环器目标 量化 将所选循环器移动到记录模式
覆盖 循环器目标 量化 将所选循环器移动到覆盖模式
播放 循环器目标 量化 将所选循环器移动到播放模式
记录覆盖播放 循环器目标 量化① 循环从记录 -> 覆盖 -> 播放 -> 覆盖
静音 循环器目标 立即 切换所选循环器的静音修饰符
独奏 循环器目标 立即 切换所选循环器的独奏修饰符
删除 循环器目标 立即 删除所选循环器
清除 循环器目标 量化 清除所选循环器中的所有样本
设置平衡 循环器目标,从-1(完全左)到1(完全右)的平衡值 立即 设置循环器的平衡
设置级别 循环器目标,从0(静音)到1(全音量)的级别值 立即 设置循环器的输出级别
1/2x 循环器目标 立即 将循环器的速度设置为1/2x
1x 循环器目标 立即 将循环器的速度设置为1x
2x 循环器目标 立即 将循环器的速度设置为2x

RecordOverdubPlay从记录 -> 覆盖和覆盖 -> 播放量化,但从播放 -> 覆盖排队。

引擎命令

命令 参数 量化 描述
开始 立即 启动引擎
停止 立即 停止引擎,重置时间
开始停止 立即 如果引擎已停止,则启动引擎,否则停止它
播放暂停 立即 如果引擎处于活动状态,则暂停引擎,否则重新启动它
暂停 立即 停止引擎但不重置时间
重置 立即 重置引擎时间
设置时间 时间(样本数) 立即 将时间设置为指定的样本数
添加循环器 立即 将循环器添加到当前部分的末尾
按Id选择循环器 循环器Id 立即 选择具有给定id的循环器
按Index选择循环器 索引 立即 在当前部分中选择给定索引处的循环器(从0开始)
选择上一个循环器 排队 选择当前部分中的上一个循环器,从第一个循环器绕回到最后一个循环器
选择下一个循环器 排队 选择当前部分的下一个循环器,从最后一个循环器循环到第一个循环器
PreviousPart 量化 转到上一个部分,跳过没有循环器的部分
NextPart 量化 转到下一个部分,跳过没有循环器的部分
GoToPart 其中之一 ABCD 量化 转到指定的部分
SetQuantizationMode 其中之一 FreeBeatMeasure 立即 为引擎设置量化模式
SetMetronomeLevel 0-100 立即 将节拍器音量设置为给定的百分比
SetTempoBPM bpm (浮点数) 立即 将引擎的节拍设置为给定的BPM值
SetTimeSignature 上,下 立即 根据参数(例如3,4)设置引擎的拍号
SaveSession 路径 立即 将当前会话保存到指定的路径
LoadSession 路径 立即 从指定的路径加载会话,替换现有的会话

设置

配置存储在标准系统用户配置位置(通常这将是在 ~/.config/loopers/)。目前配置包括从midi消息到循环器命令的映射集合。这些应该放在该配置目录中的一个名为 midi_mappings.tsv 的文件中,该文件将在第一次运行循环器后自动创建。

此文件的每一行(非空行)应包含以下制表符分隔的列

  1. Midi通道(可以是*表示任何通道或通道号)
  2. Midi控制器编号
  3. Midi数据(可以是*表示任何数据,单个值如50,或范围如0-100
  4. 命令名称(见上面的表格)
  5. 命令参数(多个参数应以制表符分隔;特殊值$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

依赖项

~6–16MB
~203K SLoC