norns 脚本参考
此脚本参考是完整 norns API 的补充。在这里,您将找到探索 API 单个组件的示例,这些示例可以复制/粘贴到您自己的脚本中并根据您的需求进行修改。这些示例假设您熟悉 norns 学习 中涵盖的脚本编写概念。
要访问完整的 norns API,您可以:
- 连接到 maiden 并在浏览器中导航到
norns.local/doc - 访问 静态 API
章节
模块
下面的链接模块名称指向扩展参考示例,这些示例说明了如何在不同上下文中使用命令。(api) 链接指向静态 API。
| 模块 | API | 描述 |
|---|---|---|
| arc | (api) | 将脚本连接到硬件 arc |
| audio | (api) | 直接设置系统音频电平 |
| clock | (api) | 协程系统,在节拍同步和自由运行的调度上执行函数 |
| controlspec | (api) | 带有预设的 PARAM 菜单控制构造函数 |
| crow | (api) | 将脚本连接到硬件 crow |
| encoders | (api) | 解析 norns 板载编码器 |
| engine | (api) | 注册 SuperCollider 引擎 |
| gamepad | (api) | 将脚本连接到游戏手柄控制器 |
| grid | (api) | 将脚本连接到硬件 grid |
| hid | (api) | 将脚本连接到 HID 硬件 |
| keyboard | (api) | 解析键盘(打字,非钢琴)输入 |
| metro | (api) | 高分辨率基于时间的计数器 |
| midi | (api) | 将脚本连接到 MIDI 硬件 |
| norns | (api) | 系统实用工具 |
| osc | (api) | 将脚本连接到 OSC 流 |
| params.binary | (api) | 二进制(切换)参数 |
| params.control | (api) | 对参数值的精细控制 |
| params.file | (api) | 通过参数将文件加载到脚本中的简单方法 |
| params.group | (api) | 参数组 |
| params.number | (api) | 定义需要离散递增值的参数 |
| params.option | (api) | 从列表中选择参数 |
| params.separator | (api) | 参数之间的分隔符 |
| params.taper | (api) | 使用 @catfact 的 taper 函数的非线性参数 |
| params.text | (api) | 文本输入参数 |
| params.trigger | (api) | “开/关”动作触发参数 |
| paramset | (api) | 创建脚本参数,例如在 PARAMETERS 菜单中 |
| poll | (api) | 系统轮询 CPU、传入/传出幅度和传入音高 |
| screen | (api) | 绘制到 norns 板载屏幕 |
| softcut | (api) | 两个音频缓冲区,可以录制并由六个独立声道播放 |
| lib/beatclock | (api) | 较旧的时钟库 - 请参见 clock |
| lib/elca | (api) | 基本细胞自动机生成器 |
| lib/envgraph | (api) | 包络图绘制模块 |
| lib/er | (api) | 欧几里得节奏生成器 |
| lib/fileselect | (api) | 文件选择实用工具 |
| lib/filtergraph | (api) | 滤波器图绘制模块 |
| lib/filters | (api) | 值平滑器 |
| lib/formatters | (api) | PARAM 菜单格式化函数 |
| lib/graph | (api) | 图绘制模块 |
| lib/intonation | (api) | 各种调音库,包括 12 音和音阶 |
| lib/lattice | (api) | 由超级时钟驱动的简单且可扩展的序列器 |
| lib/lfo | (api) | 在脚本内生成运动(节拍同步或自由)的单时钟框架 |
| lib/listselect | (api) | 列表选择实用工具 |
| lib/musicutil | (api) | 常用音乐数学实用工具模块 |
| lib/pattern_time | (api) | 定时事件模式录制器/播放器 |
| lib/reflection | (api) | 记录时钟同步的数据变化,具有可变速率播放、叠加和模式管理工具 |
| lib/sequins | (api) | 构建和修改序列器 + 琶音器 |
| lib/tabutil | (api) | 表格实用工具,也可在全局变量 tab 中使用 |
| lib/timeline | (api) | 按时间序列事件 |
| lib/textentry | (api) | 文本输入 UI |
| lib/ui | (api) | UI 小部件模块 |
| lib/util | (api) | 有用的实用函数,也可在全局变量 util 中使用 |
| lib/voice | (api) | 实验性声道分配模块 |
文件夹结构
脚本位于 ~/dust/code/ 中,是让 norns 执行操作的内容。脚本至少包含一个 Lua 文件,但还可以包含支持 Lua 库、SuperCollider 引擎和数据。
myscript/
myscript.lua -- 主版本,显示为 MYSCRIPT
mod.lua -- 替代版本,显示为 MYSCRIPT/MOD
README.md -- 主文档/说明
data/
myscript-01.pset -- pset,通过 params:read(1) 或菜单加载
lib/
somelib.lua -- 任意库,通过 require 'lib/somelib' 导入
some-engine.sc -- 引擎文件
some-engine.lua -- 引擎库,require lib/some-engine'
docs/ -- 更多文档
more-docs.md
test/ -- 可选的测试脚本
test-somelib.lua
test-some-engine.lua
通常,任何 Lua 脚本都会出现在 norns 的 SELECT 菜单中。但名为 crow、data、docs、lib 或 test 的文件夹中的 Lua 脚本将从该菜单中隐藏。
基本脚本
-- scriptname: 简短脚本描述
-- v1.0.0 @author
-- llllllll.co/t/22222
engine.name = 'PolySub'
function init()
-- 初始化
end
function key(n,z)
-- 按键操作:n = 数字,z = 状态
end
function enc(n,d)
-- 编码器操作:n = 数字,d = 增量
end
function redraw()
-- 屏幕重绘
end
function cleanup()
-- 反初始化
end
设置最低要求版本
每次 norns 更新都会带来新功能,包括脚本编写和一般可用性。如果您分享的脚本依赖于特定 norns 更新的功能,您可以指定最低版本要求,如果脚本在软件的前一版本上加载,将在 norns 屏幕上显示消息。
要指定最低要求版本,请在脚本的 init() 之前将 norns.version.required 设置为 YYMMDD 值,例如:
-- 最低要求版本检查
norns.version.required = 221214 -- 可以是数字或字符串,格式为 YYMMDD
function init()
print('hello, welcome to the script')
end
如果此脚本在运行早于 221214 软件的 norns 上加载,您将在 norns 屏幕上看到:
error: version 221214 required
try 'SYSTEM > UPDATE'
这将在 maiden 中打印:
### SCRIPT ERROR: version 221214 required
### try 'SYSTEM > UPDATE'
### or check for new disk image
有用的系统命令和变量
有一些命令和变量对常见的脚本编写任务很有用。请注意,虽然这些表格可能包含额外的命令和变量,但本节中未提及的任何内容对标准脚本编写都没有用。
这些以分号开头的命令是从 maiden 直接运行的快捷方式:
| 命令 | 描述 |
|---|---|
;restart | 在 maiden 中执行时,此命令重启环境 – 在 matron 标签页中运行此命令以重启 Lua 层,或在 supercollider 标签页中运行以重启 SuperCollider |
;install GITHUB_URL | 在 maiden 中执行时,此命令安装 GitHub 仓库 – 有关更多信息,请参见这些文档 |
norns 表包含有用的系统命令和变量:
| 命令 | 描述 |
|---|---|
norns.expand_filesystem() | 将文件系统扩展到磁盘的全部容量,在全新安装后很有用 : function |
norns.blank() | 关闭 norns 屏幕 : function |
norns.rerun() | 重新运行当前加载的脚本 : function |
norns.shutdown() | 让 norns 休眠(但不会显示 UI 状态信息) : function |
norns.system_cmd(command) | 异步执行系统 command : function |
norns.script 表包含用于脚本生命周期管理的函数:
| 命令 | 描述 |
|---|---|
norns.script.load(filename) | 运行 filename 处的脚本 : function |
norns.script.clear() | 清除当前运行的脚本 : function |
norns.state 表包含有用的状态数据:
| 变量 | 描述 |
|---|---|
norns.state.path | 当前运行脚本的 code 文件夹路径 : string |
norns.state.data | 当前运行脚本的 data 文件夹路径 : string |
norns.state.lib | 当前运行脚本的 lib 文件夹路径 : string |
norns.state.shortname | 脚本名称,用作 PSET + PMAP 文件系统的默认名称 : string |
norns.state.name | 在 SELECT 菜单和 HOME 屏幕上显示的脚本名称 : string |
_path 表包含常用文件路径的有用别名:
| 变量 | 描述 |
|---|---|
_path.code | /home/we/dust/code/ 的别名 : string |
_path.data | /home/we/dust/data/ 的别名 : string |
_path.audio | /home/we/dust/audio/ 的别名: string |
_path.tape | /home/we/dust/audio/tape/ 的别名: string |
库
Lua 库可以通过使用 include("path/to/library") 来使用。记住不要在库名称中包含 .lua。
本地库
include() 将首先在当前脚本的目录中查找。这允许使用相对路径来使用脚本本地的库。例如,使用以下结构:
myscript/
myscript.lua
lib/
somelib.lua
myscript.lua 可以使用以下方式包含 somelib.lua:
include("lib/somelib")
第三方库
第三方库可以使用从 ~/dust/code/ 目录开始的完整路径来包含。例如,在 ~/dust/code/ 中使用以下结构:
myscript/
myscript.lua
lib/
somelib.lua
otherscript/
otherscript.lua
lib/
otherlib.lua
myscript.lua 可以使用以下方式包含 otherlib.lua:
include("otherscript/lib/otherlib")
引擎
在脚本顶部指定引擎。有关更多详细信息,请参见 引擎文档。
engine.name = 'PolySub'
如果您想使用来自另一个项目的引擎,请确保首先安装该项目。 如果引擎带有配套的 Lua 文件,请确保导入它:
engine.name = 'R'
local R = require 'r/lib/r'
engine.list_commands()显示命令。
例如,将命令 cutoff 设置为 500:
engine.cutoff(500)
要查看所有本地安装引擎的列表:
tab.print(engine.names)
屏幕
屏幕 API 处理在 norns 屏幕上的绘制。有关更多详细信息,请参见 屏幕文档。
function redraw()
screen.clear()
screen.move(10,10)
screen.text("hello world")
screen.update()
end
metro
metro API 允许高分辨率调度。有关更多详细信息,请参见 metro 文档。
re = metro.init()
re.time = 1.0 / 15
re.event = function()
redraw()
end
re:start(),启动 metro。re:stop(),停止 metro。
paramset
paramset API 允许读取和写入临时数据和文件。有关更多详细信息,请参见 paramset 文档。
可以使用以下方式安装参数:
params:add{
type = "number",
id = "someparam",
name = "Some Param",
min = 1,
max = 48,
default = 4,
}
params:set(index, value),写入参数。params:get(index),读取参数。
系统全局变量
不要覆盖这些变量。这样做可能会破坏事物。
系统全局变量:
_G, _VERSION, assert, bit32, collectgarbage, dofile , error, getmetatable, ipairs, io, load,
loadfile, next, math, os, pairs, pcall, print, rawequal, rawget, rawlen, rawset, require,
select, setmetatable, tonumber, tostring, table, type, utf8, xpcall
norns 全局变量:
_menu, _norns, _path, _startup, arc, audio, cleanup, clock, controlspec, coroutine, crow,
debug, enc, engine, grid, hid, include, inf, key, metro, midi, mix, norns, osc, package,
params, paramset, paths, poll, redraw, screen, softcut, string, tab, util, wifi
设备
grid
grid.connect(n) 创建设备,返回带有处理程序的对象。有关更多详细信息,请参见 grid 文档。
g = grid.connect()
g:led(x, y, val),设置此网格设备上单个 LED 的状态。g:all(val),设置此网格设备上所有 LED 的状态。g:refresh(),更新此网格设备上的任何脏四边形。g.key(x, y, state),按键事件处理函数。
arc
arc.connect(n) 创建设备,返回带有处理程序的对象。有关更多详细信息,请参见 arc 文档。
a = arc.connect()
a:led(ring, x, val),设置此 arc 设备上单个 LED 的状态。a:all(val),设置此 arc 设备上所有 LED 的状态。a:segment(ring, from, to, level),在特定 LED 环上创建抗锯齿的点到点弧 - 段/范围。a:refresh(),更新此 arc 设备上的任何脏四边形。a.delta(n, delta),编码器事件处理函数。
midi
midi.connect(n) 创建设备,返回带有处理程序的对象。有关更多详细信息,请参见 midi 文档。
m = midi.connect()
m:note_on(value,velocity,channel),发送note_on消息。m:note_off(value,velocity,channel),发送note_off消息。m.event,midi 事件处理函数。
hid
hid.connect(n) 创建设备,返回带有处理程序的对象。有关更多详细信息,请参见 hid 文档。
h = hid.connect()
osc
通过 Open Sound Control 发送网络数据。有关更多详细信息,请参见 osc 文档。
osc.send(to, path, args),发送 osc 事件。osc.event(path, args, from)当接收到 osc 事件时调用的处理函数。
crone

贡献
欢迎对脚本参考的贡献,我们非常感谢任何帮助涵盖这些主题的协助。
对如何贡献有疑问?请随时发送电子邮件至 help@monome.org,我们可以合作!
非常感谢 @fardles (网站) 为 er、fileselect、musicutil、textentry 和 ui 构建参考页面。