3个版本
0.1.2 | 2021年2月9日 |
---|---|
0.1.1 | 2021年1月6日 |
0.1.0 | 2020年11月29日 |
#853 in 音频
320KB
8K SLoC
Loopers
Loopers是一个图形化的现场循环播放器,使用Rust编写,专为易用性和稳定的性能而设计。它可以作为练习工具、作曲辅助工具或在现场环境中表演循环作品。
目前它作为一个独立的Jack应用程序在Linux上运行,这使得它可以与其他Jack客户端(如效果架、软件乐器和DAW)接口,或在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 上运行,这是 MacOS 的原生音频系统(您也可以在 MacOS 上通过 jack 运行,目前对 jack 的支持更好)。要在 Mac 上使用 CoreAudio 构建
$ brew install jack sdl2
$ cargo install loopers
$ loopers
默认情况下,它将使用 CoreAudio 运行。要使用 jack 运行,
$ loopers --driver jack
注意:目前不支持通过 CoreAudio 使用 midi,也无法选择音频源和目标(使用默认设备)。
文档
用户界面导览
用户界面分为两部分:顶部包含一组 loopers,底部包含引擎的控件和设置。将鼠标悬停在每个 looper 上会显示该 looper 的控件,包括设置 looper 所属的部分和控制模式。
每个 looper 显示一些关键信息,以便表演者快速了解其状态
将鼠标悬停在 looper 上会显示 looper 的控件(尽管大多数表演者更愿意使用硬件按钮)
底部是我们找到的引擎控件
Loopers 模式
在任何给定时间,每个 looper 都可以处于几种模式之一,每种模式在 UI 中都用颜色标识
- 播放
- 在播放模式下,loopers 的输出与其他所有 loopers 的输出混合在一起,发送到全局输出。这是默认模式。
- 录音
- 开始录音时,将清除 loopers 中现有的所有样本。然后记录新的音频,直到录音完成,从而确定循环长度。
- 叠加
- 在叠加模式下,我们在 loopers 中现有的样本之上添加新的输入,而不会改变循环长度。
除了这些专有模式外,looper 还可以有一个或多个以下 修饰符
- 独奏
- 如果启用独奏,所有其他 loopers 都将被静音(除了那些也处于独奏模式的 loopers)。
- 静音
- 当启用静音时,looper 将被静音。
模式和修饰符可以通过 UI 或通过发送 midi 命令来控制。
量化
使用多个 loopers 时,通常希望它们同步在一起。在 Loopers 中,这是通过使用跨越所有 loopers 的单个时间控制来实现的。循环长度必须是彼此的精确倍数(例如,您可能有一个 4 倍于节奏 loop 的 bass loop)。如果长度相差甚至只有几毫秒,经过几次重复后就会很快被注意到。
为了帮助表演者将循环长度精确对齐,Loopers 提供了 量化 功能。这允许您将命令(例如,停止录音从而设置循环长度)同步到某些计量事件。
它支持三种量化模式,通过 UI 底部的按钮设置
- 自由 这将禁用量化,并使所有命令立即生效
- 节拍 命令在发布后的下一个节拍上生效,由节奏决定
- 小节 命令在下一个小节的开始处生效,由节奏和拍号决定
一些命令受量化影响,而另一些则立即生效。有关更多信息,请参阅 命令参考。
命令
系统各个方面都可以通过命令进行控制,无论是在UI中还是通过MIDI。有关配置MIDI控制的详细信息,请参阅设置。
有两种类型的命令:循环命令,作用于一个或多个循环器,和引擎命令,作用于整个系统。命令可以接受参数,以控制命令的行为。
循环命令都接受一个第一个参数,该参数确定哪个循环器将被目标化
- 选中:仅针对通过UI或通过一个
Select*Looper
命令控制的循环器 - Id:接受一个id参数,并针对具有该id的循环器
- 索引:接受一个索引参数,并针对当前可见部分中的该索引处的循环器,从0开始。
- 所有:针对所有循环器
其他命令也可能接受参数来控制它们的行为。
命令的量化影响方式也有所不同
- 即时命令在接收到后立即执行,不受量化设置或系统状态的影响
- 队列命令将在队列中等待其他(可能量化的)命令生效后执行。这允许您,例如,发送切换到下一部分的命令(一个量化的命令),然后发送SelectNextLooper命令(一个队列命令),它将在部分切换之前等待执行。
- 量化命令将等待到下一个量化边界(例如,下一个小节的开始,详情请参阅量化)才执行。
循环命令
命令 | 参数 | 量化 | 描述 |
---|---|---|---|
录音 | 循环器目标 | 量化 | 将选定的循环器移至录音模式 |
覆盖 | 循环器目标 | 量化 | 将选定的循环器移至覆盖模式 |
播放 | 循环器目标 | 量化 | 将选定的循环器移至播放模式 |
录音覆盖播放 | 循环器目标 | 量化① | 循环从录音 -> 覆盖 -> 播放 -> 覆盖 |
静音 | 循环器目标 | 即时 | 切换选定循环器的静音修饰符 |
独奏 | 循环器目标 | 即时 | 切换选定循环器的独奏修饰符 |
删除 | 循环器目标 | 即时 | 删除选定的循环器 |
清除 | 循环器目标 | 量化 | 清除选定循环器上的所有样本 |
设置平衡 | 循环器目标,一个从-1(完全左)到1(完全右)的平衡值 | 即时 | 设置循环器的平衡 |
设置级别 | 循环器目标,一个从0(无声)到1(全音量)的级别值 | 即时 | 设置循环器的输出级别 |
1/2x | 循环器目标 | 即时 | 将循环器设置为1/2x速度 |
1x | 循环器目标 | 即时 | 将循环器设置为1x速度 |
2x | 循环器目标 | 即时 | 将循环器设置为2x速度 |
① RecordOverdubPlay从录音 -> 覆盖和覆盖 -> 播放进行量化,但从播放 -> 覆盖进行队列。
引擎命令
命令 | 参数 | 量化 | 描述 |
---|---|---|---|
开始 | 无 | 即时 | 启动引擎 |
停止 | 无 | 即时 | 停止引擎,重置时间 |
开始停止 | 无 | 即时 | 如果引擎停止,则启动它,否则停止它 |
播放暂停 | 无 | 即时 | 如果引擎处于活动状态,则暂停它,否则重新启动它 |
暂停 | 无 | 即时 | 停止引擎但不会重置时间 |
重置 | 无 | 即时 | 重置引擎时间 |
设置时间 | 时间(以样本为单位) | 即时 | 将时间设置为指定的样本数 |
添加循环器 | 无 | 即时 | 将循环器添加到当前部分的末尾 |
根据Id选择循环器 | 循环器Id | 即时 | 选择具有给定id的循环器 |
根据索引选择循环器 | 索引 | 即时 | 选择当前部分中给定索引处的循环器(从0开始) |
选择上一个循环器 | 无 | 队列 | 选择当前部分的上一段循环,从第一段到最后一段循环 |
SelectNextLooper | 无 | 队列 | 选择当前部分的下一段循环,从最后一段到第一段循环 |
PreviousPart | 无 | 量化 | 跳过没有循环的部分,转到上一部分 |
NextPart | 无 | 量化 | 跳过没有循环的部分,转到下一部分 |
GoToPart | 以下之一:A ,B ,C ,或 D |
量化 | 转到指定的部分 |
SetQuantizationMode | 以下之一:Free ,Beat ,或 Measure |
即时 | 为引擎设置量化模式 |
SetMetronomeLevel | 0-100 | 即时 | 将节拍器的音量设置为给定的百分比 |
SetTempoBPM | bpm (浮点数) | 即时 | 将引擎的节奏设置为给定的BPM值 |
SetTimeSignature | 上,下 | 即时 | 根据参数(例如3,4)设置引擎的拍号 |
SaveSession | 路径 | 即时 | 将当前会话保存到给定的路径 |
LoadSession | 路径 | 即时 | 从给定的路径加载会话,替换现有的会话 |
设置
配置存储在标准系统用户配置位置(通常这将是 ~/.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
依赖项
~28–41MB
~737K SLoC