maiden
sections
maiden 是norns的基于浏览器的门户。它可以通过norns托管的热点访问,或者如果norns和您的浏览器在同一个WiFi网络上。
要开始使用,请在您的网络浏览器中指向 norns.local 来查看maiden界面。如果找不到网站,请尝试直接连接到norns屏幕上显示的IP地址,例如:192.168.0.100。
Windows:如果这些URL都无法解析,请尝试 IP-ADDRESS-OF-YOUR-NORNS/maiden/,例如 192.168.1.100/maiden/

界面包括最左侧边栏中的元导航器,从下到上允许您:
- 访问项目管理器,您可以在其中管理、发现和安装norns上的社区脚本
- 切换repl(读取-评估-打印循环),您的脚本+系统都会打印有用的信息
- 切换文件查看器,您可以在其中查看和选择要编辑的脚本
- 注意maiden只能读取/写入
/home/we/dust内的文件:audio、code和data——无法访问其他系统文件。 - 使用SFTP访问
/home/we/dust之外的文件
- 注意maiden只能读取/写入
让我们从项目管理器开始,这样我们就可以下载一些新的社区脚本!
项目管理器
maiden具有项目管理器功能,帮助您发现和下载新项目。项目包含引擎和脚本。
您可以通过左侧边栏中的书籍图标访问基础(来自monome的项目)和社区(来自其他艺术家的项目)存储库。
已安装
此选项卡显示当前在您的norns上安装的项目。

每个条目都有两个操作:更新和删除。
如果您选择更新通过maiden下载的项目,请注意您所做的本地修改将被覆盖。如果您希望保留项目的多个版本,请参考SFTP指南。
一旦您通过项目管理器更新项目,您将在项目图块的右侧看到列出的提交号(如 34d225b)。点击项目的提交号将跳转到项目的GitHub页面,您可以在那里了解更多关于项目的信息并验证您拥有的版本是最新的。
如果您通过项目管理器更新不是使用项目管理器安装的项目,您将收到项目在目录中找不到的错误。请删除之前安装的版本并通过项目管理器重新安装,这将为将来的更新建立必要的git文件。
可用
此选项卡显示通过基础和社区存储库可用的项目。
每当maiden加载时,它会自动刷新两个目录。如果在您加载maiden后发布了脚本,只需按页面顶部的 refresh all 按钮,所有新条目都会被添加。
许多项目将具有信息标签,如 crow、drum、looper,以及项目描述。请注意,lib 标签专门用于指示项目包含脚本和引擎,这将需要设备重启。
每个条目都有一个安装操作,可用于安装选定的脚本。
如果新安装的项目包含引擎,您将必须重启norns
repl
消息打印在底部面板中。有两个选项卡:matron是主要的lua环境,sc是supercollider,这是引擎环境。
您可以使用底部提示输入将由系统解释的命令。例如:
print("hello there")
将在上方的窗口中显示预期的消息。
右侧的清除图标将清除当前消息。
如果您需要出于任何原因重启matron/crone环境(即菜单系统无法访问),您可以通过REPL发出命令:
;restart
这将断开maiden的连接,但一旦matron重启,您就可以重新连接。
从GitHub安装脚本(需要WiFi连接)
有时,脚本不会进入社区目录。要从开发者的GitHub获取仅托管在那里的脚本:
- 复制单独项目的URL(例如
https://github.com/tehn/test-update) - 在maiden的REPL中执行:
;install https://github.com/tehn/test-update
例如。

如果获取成功,您将看到:
starting...
installed "test-update"!
如果新安装的项目包含引擎,您将必须重启norns
如果获取不成功,原因是已经安装了同名脚本。您将看到:
starting...
install failed: project test-update already exists in /home/we/dust/code
在这种情况下,您只需要删除冗余脚本并重新获取。
手动安装脚本
如果您无法连接到maiden + 其项目管理器,您仍然可以通过SMB或SFTP手动安装脚本,方法是将文件下载到非norns计算机并将其迁移到norns上的 code 文件夹。
要开始,找到您希望安装的脚本的GitHub存储库,并将项目的zip文件下载到您的非norns计算机:

在您的非norns计算机上解压文件:

重命名结果文件夹以删除任何 -main 或 -master 的实例——换句话说,我们希望脚本文件夹只反映脚本的名称:

现在,您准备将文件夹迁移到norns!通过SMB或SFTP连接到norns,并将重命名的脚本文件夹拖放到norns的 code 文件夹中,与设备上的所有其他脚本一起。重启您的设备以确保注册任何引擎更改,您应该能够开始播放!
故障排除
在您的norns旅程中,您可能会遇到打印到norns屏幕的错误,如:
error: load failerror: missing <EngineName>error: SUPERCOLLIDER FAIL
当知道原因时,这些错误很容易解决——但由于norns屏幕只有128 x 64像素,强大的错误日志记录必须找到不同的途径。这就是maiden的 matron(管理Lua脚本层)和 supercollider(管理合成器引擎层)选项卡发挥作用的地方:


如果您在使用脚本时遇到任何错误(无论是您自己的还是其他人的),maiden将根据哪个层遇到问题向这些REPL中的每一个打印消息。这超出了脚本的初始化——例如,如果在播放期间变量计算错误并导致脚本内不稳定,maiden也会显示这些错误。
收集日志
如果在播放期间发生错误,很容易假设如果您描述一般消息(例如”我很兴奋地想玩这个脚本,但当我尝试运行它时norns说’error: SUPERCOLLIDER FAIL’“),其他人会知道问题所在。但是,那些想要帮助的人只有在您与他们分享更完整的错误报告时才能做到。
如果我们想看到运行脚本、mods和SuperCollider的错误消息的更全面的实时视图,我们可以通过SSH直接登录到我们的norns并发出以下命令:
journalctl -f
这不仅会显示最后几个系统消息(包括错误),还会在新消息出现时更新。
当我们完成后,我们可以通过按 Ctrl+C 关闭流。确保也通过执行 exit 关闭到norns的SSH连接。
注意:如果您第一次遇到此问题,请在尝试收集日志之前对设备进行电源循环。
提供此信息将使其他人更容易理解您遇到问题的具体原因,并使他们能够建议有用的下一步。
示例阅读
在收集此信息时,您可能还会发现某些情况会产生非常清晰的消息——例如,这是 supercollider REPL在常见的 error: SUPERCOLLIDER FAIL / error: DUPLICATE ENGINES 发生期间的输出:

compiling class library...
Found 738 primitives.
Compiling directory '/usr/local/share/SuperCollider/SCClassLibrary'
Compiling directory '/usr/local/share/SuperCollider/Extensions'
Compiling directory '/home/we/.local/share/SuperCollider/Extensions'
Compiling directory '/home/we/norns/sc/core'
Compiling directory '/home/we/norns/sc/engines'
Compiling directory '/home/we/dust'
ERROR: duplicate Class found: 'Engine_PolyPerc'
/home/we/norns/sc/engines/Engine_PolyPerc.sc
/home/we/dust/code/other-stuff-i-installed/PolyPerc.sc
ERROR: There is a discrepancy.
numClassDeps 1517 gNumClasses 3032
虽然前8行可能没有太大意义(每次SuperCollider在norns上加载时都会打印),但确实有一组可以解释的错误:
ERROR: duplicate Class found: 'Engine_PolyPerc'
/home/we/norns/sc/engines/Engine_PolyPerc.sc
/home/we/dust/code/other-stuff-i-installed/PolyPerc.sc
当分块时,我们可以更好地注意到SuperCollider提供的信息:
- 有一个
PolyPerc的重复 - 第一个在
/home/we/norns/sc/engines/,名为Engine_PolyPerc.sc - 另一个在
/home/we/dust/code/other-stuff-i-installed/,名为PolyPerc.sc
可能有助于提醒maiden访问和管理 /home/we/dust/ 内的文件和文件夹(audio、code 和 data),但不能访问任何其他系统文件夹。所以,/home/we/dust/code/other-stuff-i-installed/ 位置一定是在安装另一个脚本时创建的。另外,PolyPerc 默认安装在norns上的 /home/we/norns/sc/engines/,这是我们无法通过maiden访问的位置。
要解决此问题,我们要么删除安装在 /home/we/dust/code/other-stuff-i-installed/ 文件夹中的那个,要么完全删除整个文件夹。
文件查看器
文件查看器的大部分专门用于编辑器,您可以在其中查看和编辑选定脚本的代码。
此面板允许您选择在编辑器中编辑的文本。
顶部栏有各种操作的图标:新建、删除、复制、新建文件夹和重命名。
注意:如果您重命名文件,请确保在替换文件名时保留其扩展名(例如 .lua)。否则,maiden将不知道它是什么类型的文件,也不会按预期加载它。
> 可以展开以显示文件树。当您选择文件时,它将在编辑器中显示:

编辑器
这是您可以编辑选定脚本的地方。
右侧有一个带有三个图标的栏:磁盘是保存,播放将运行当前脚本,停止将停止并清除当前运行的脚本。
这些操作绑定到以下键盘快捷键:
-
CMD/CTRL-
S: 保存 -
CMD/CTRL-
P: 播放 -
CMD/CTRL-
.: 停止
除了标签大小和浅色/深色模式外,编辑器还可以配置为各种模式(默认、vim、emacs)。点击屏幕左下角的齿轮图标。有关maiden键绑定的更多信息,请参阅maiden存储库中的文档。
实时行评估
maiden的编辑器还支持实时行评估,这为从maiden进行实时编码开辟了新途径。
要评估一行代码,请将光标放在该行上并(在键盘上)执行:
command+return: MacCtrl+Enter: Windows / Linux
要一次评估多行代码,请高亮显示每一行并执行评估键组合——maiden将自动将换行符注册为离散命令。
想试试吗?在maiden中打开一个新文件并粘贴这个,然后开始执行:
engine.load('PolyPerc') -- 加载PolyPerc引擎
base = 440 -- 控制基础频率,可以在序列运行时修改!
-- 执行整个块:
function notes()
while true do
engine.pan(math.random(-1,1))
clock.sync(1)
engine.hz(base * math.random(3))
clock.sync(1/3)
engine.hz(base / math.random(6))
clock.sync(2/3)
engine.hz((base*3) / math.random(6))
end
end
--- ^ 如果它是时钟协程的一部分,那将随机创建音符,这是下一个!
seq = clock.run( notes ) -- 启动一个seq时钟并将其分配给'notes'函数
clock.cancel(seq) -- 取消最后启动的'seq'
params:set("clock_tempo", 94 * math.random(3)) -- 加速/减速
-- 玩'base'!
-- 尝试取消时钟并重新定义'notes'中的'clock.sync'值!
编程参考
左下角的 ? 图标可用于导航到板载编程参考。
您可以手动在 norns.local/doc 打开API参考。
另请参阅脚本参考。
高级访问
如果您更喜欢将norns集成到现有的IDE工作流程中,您可以加载maiden的REPL并通过更底层的工具管理项目。
终端REPL
要从终端会话访问maiden的REPL,SSH或screen到norns并执行:
maiden repl
命令行界面
maiden Web UI中暴露的几乎所有项目管理操作都可以在命令行界面(CLI)中完成。
要访问:
ssh we@norns.local
...
maiden/maiden
web editor for norns scripts
Usage:
maiden [command]
Available Commands:
catalog manage the script catalog
help Help about any command
project manage dust projects
repl matron/crone repl
server run the backend server for maiden
version print maiden version
Flags:
--config string use specific config file
--debug enable debug logging
-h, --help help for maiden
Use "maiden [command] --help" for more information about a command.
maiden后端服务器也有子命令:
ssh we@norns.local
...
#
# catalog子命令对于更新"we"和"community"很有用
#
~/maiden/maiden catalog help
manage the script catalog
Usage:
maiden catalog [command]
Available Commands:
init init an empty catalog file
list list projects
update update configured catalogs
Flags:
-h, --help help for catalog
Global Flags:
--config string use specific config file
--debug enable debug logging
Use "maiden catalog [command] --help" for more information about a command.
#
# project子命令是安装和更新项目目录
#
~/maiden/maiden project help
manage dust projects
Usage:
maiden project [command]
Available Commands:
install install a script/project
list list installed script/project(s)
push push a git based project
remove remove a project dir
update update a script/project
Flags:
-h, --help help for project
Global Flags:
--config string use specific config file
--debug enable debug logging
Use "maiden project [command] --help" for more information about a command.
Have further usage questions? Visit the [norns: maiden](https://llllllll.co/t/norns-maiden/14052) topic on lines.