Orca

创建于:2019-01-29

创建人: Humble Ray

8 信息 5 成员
由 Hundred Rabbits 开发的实时编程音序器
【介绍】Orca
Humble Ray 2019-01-29

简介:

Orca 是一个可以进行现场实时编程(Livecoding) 的环境,开源且免费。由 Hundred Rabbits 开发,并称 Orca 是一个可视化编程游乐园(Visual Programming Playground)。你可以自己编写音序器(Sequencer),来控制数字音乐工作站(DAW)或者其他软件。简单来说,Orca 是一个类似于 Max/MSP、PureData 这样的实时编程工具,结合 DAW 或者其他软件可以用来制作音乐。

关于:

Hundred Rabbits 是一个漂浮在水上的工作室,由 Rekka 和 Devine 组成,两人一直在海上航行的同时进行艺术创作,大家或许比较熟悉的是他们曾入围 IGF 的 Oquonie,然而他们不仅仅在做游戏,还在制作工具、插画、美食等等,Orca 就是其中之一。

特点:

  • 界面和操作简洁优雅
  • 运算符为26个英文字母
  • 新的音乐制作方式
  • 支持 MIDI/OSC/UDP

实例演示:https://twitter.com/hashtag/ORC%CE%9B

官方网站:https://100r.co/pages/orca.html

Github:https://github.com/hundredrabbits/Orca

界面:


可以

界面可以更改颜色,上图为 Pico-8 的配色。

官方教程:https://github.com/hundredrabbits/Orca/blob/master/TUTORIAL.md

英文教程:ORCA Sequencer Intro by Allieway Audio

中文教程:

0. 准备工作

1. 运算符(Operators)分类介绍及快捷键

2. 数学(Mathematics)运算符的使用

3. 移动(Movements)运算符的使用

4. 读写(Reads and Writes)运算符的使用

5. 运行帧数(Runtime Frame)运算符的使用

6. 其他(Other)运算符的使用

7. 常用的鲸歌(Vocalization)结构

【教程】0. 准备工作
Humble Ray 2019-01-30

在开始鼓捣 Orca 之前,你需要先进行一些设置。

我这里介绍一下我自己的设置,我使用的是系统是 macOS, Ableton Live 10 搭配 Orca。

Ableton Live 应该也是最为流行的 DAW 之一了,可以下载一个试用版直接用,下面是先打开 Ableton Live 进行设置。

1. 创建一个 MIDI 轨道Image title


2. MIDI From 选择 IAC Driver,Windows 下是 LoopMIDI

Image title

3. Channel 选择好1,2,3... 

Image title

4. In 选项选择好

Image title

5. 接下来打开 Orca,右下角应该出现 IAC Driver,就设置好了

Image title

6. 来一段最简单的试试声音

Image title

或者可以先在这里试试这些实例:https://github.com/hundredrabbits/Orca/tree/master/examples

【教程】6. 其他(Other)运算符的使用
Humble Ray 2019-01-29

其他 Other:

  • J jumper(val): 在 J 的南方输出从北方输入的运算符
  • Y jymper(val): 在 Y 的东方输出从西方输入的运算符
  • K konkat('len): 输出多个变量
  • L loop('len): 出现在 L 的东方,循环指定数量的运算符

J & Y:

J 的作用是将运算符从北方传到南方,Y 的作用是将运算符从西方传到东方

Image title

K:

len K val

len 表示要输出变量的个数,val 要输入你要输出的变量是哪些,如下图就要输出 4 个变量 a,b,c,d

Image title

L:

len L val

L 可以创造一个不断循环的队列,len 表示队列的长度,val 需要输入想要循环的运算符,如下图循环队列长度为 5,正在循环的是 1 和 3

Image title

【教程】5. 运行帧数(Runtime Frame)运算符的使用
Humble Ray 2019-01-29

运行帧数 Runtime Frame:

  • C clock('rate, mod): 根据运行帧数输出恒定的值
  • D delay('rate, mod): 根据运行帧数来触发

C:

rate C mod

想象成一个表盘,rate 表示指针的速率,mod 表示表盘的数字数量,比如 2 C 8 表示,2f(帧)走一个数字,表盘数字是 0-7,C 的南方会随着帧数依次从 0-7 一直循环

Image title

D:

rate D mod

每隔 rate 和 mod 相乘结果的帧数,就会在 D 的南方发生一次触发(Bang),比如 4 D 5 表示,每次触发相隔 20f(帧),第一次触发是 27201f,下一次触发就是 27221f

Image title

Image title


【教程】4. 读写(Reads and Writes)运算符的使用
Humble Ray 2019-01-29

读写 Reads and Writes:

  • V variable('write, read): 读取或写入全局变量
  • G generator('x, 'y, 'len): 在指定坐标位置写入多个运算符
  • Q query('x, 'y, 'len): 在指定坐标位置读取多个运算符
  • P push('len, 'key, val): 写入一个在东方向的运算符
  • T track('len, 'key, val): 读取一个在东方向的运算符
  • O offset('x, 'y, val): 读取一个指定坐标位置的运算符
  • X teleport('x, 'y, val): 写入一个指定坐标位置的运算符

V:

写入 var1 V var2

读取 V var

写入时,相当于 var2 赋值给 var1,读取时 var 的值会出现在 V 的南方格子中

如下图,给 c 写入 1,再读取 c,则为 1;给 a 写入 b,再读取 a,则为 b

Image title

G:

x y len G op...

x y 1 G op1

x y 2 G op1 op2

(x,y)为写入运算符的坐标,坐标原点(0,0)是 G 南方的第一个格子,len 是要写入的运算符数量,G 的东方要写出每个运算符(也可以空着)

如下图写入坐标为(2,1),要写入两个运算符,分别是 A 和 1,A 同时又是相加,在 A 的东方第二个格子可以继续输入需要的内容

Image titleQ:

x y len Q

(x,y)为读取运算符的坐标,坐标原点(0,0)是 Q 东方的第一个格子,len 是要写入的运算符数量,Q 的南方会显示读取到的运算符,Q 的正下方是倒数第一个,依次倒着向西方

如下图读取坐标为(3,4),要读取三个运算符,在读取坐标上是 1,a 和 3,于是在 Q 的南方会显示读取到的运算符

Image title

G & Q:

当 G 和 Q 同时使用,用 Q 来读取 G 写入的,G 在相对于 G 的坐标(2,1)下写入 A 和 1,A 和 1 相对于 Q 的坐标为(4,0),所以 Q 读取(4,0)的运算符就为 A 和 1

Image title

P:

len key P val

P 可以创建一个队列,如下图的粉色,key 代表这个队列的长度,len 代表当前队列的顺序,这个队列是从 0 开始的,下图中 2 就代表着队列中的第 3 个,4 就代表着队列中第 5 个,val 为写入的运算符,图一是把第 3 个写入为 2,图二则是把第 5 个也写入为2

结合一些变化运算符就可以创造出一个不断变化的队列

Image title

Image title


Image title

T:

len key T val

P 可以创建队列,那么 T 就是来读取队列的,key 代表这个队列的长度,len 代表当前队列的顺序,这个队列是从 0 开始的,下图中 1 就代表着队列中的第 2 个,3 就代表着队列中第 4 个,val 为要读取的运算符,读取出的运算符出现在 T 的南方第一个格子中,图一读取的为 a,图二读取的为 b

同样地加入一些变化运算符,就可以读取整个或者部分队列

Image title

Image title

Image title

P & T:

当 P 和 T 同时使用,用 T 来读取 P 写入的,P 写入的第 3 个是 d,T 读取同一个队列的第 3 个,也就是 d

Image title

O:

x y O val

(x,y)为读取运算符的坐标,坐标原点(0,0)是 O 东方的第一个格子,val 是要读取的运算符,O 的南方第一个格子会显示读取到的运算符

如下图读取坐标为(1,2),在读取坐标上是 3,于是在 O 的南方会显示读取到的运算符

Image title

X:

x y X val

(x,y)为写入运算符的坐标,坐标原点(0,0)是 X 南方的第一个格子,val 是要写入的运算符

如下图写入坐标为(1,2),就是要在(1,2)上写入运算符 A,相应的也可以进行 A 的运算

Image title

O & X:

当 O 和 X 同时使用,用 X 来读取 O 写入的,X 在其相对坐标(1,2)下写入 A,同时相对于 O 的坐标为(3,1),O 的读取也就为 A

Image title

【教程】3. 移动(Movements)运算符的使用
Humble Ray 2019-01-29

移动 Movements:

  • E east: 出现一个 E 向东移动,并可以触发
  • N north: 出现一个 N 向北移动,并可以触发
  • S south: 出现一个 S 向南移动,并可以触发
  • W west: 出现一个 W 向西移动,并可以触发
  • H halt: 出现在 H 的南方,停止正在运动的运算符
  • U uturn('n, 'e, 's, 'w): 反转输入运算符的运动
  • Z zoom: 出现一个 Z 向东移动,在发生碰撞后,从西方重新出现

E/N/S/W:

从光标发射出一个 E/N/S/W 向东/北/南/西移动,如果遇到待触发的运算符可以触发

Image title

Image title

Image title

Image title

H:

主要针对 E/N/S/W/Z 这类可移动的运算符使用,输入到 H 南方位置,可以停止其移动,多和其他运算符结合使用

Image title

Image title

U:

主要针对 E/N/S/W/Z 这类运动运算符使用,当可运动运算符运动到 U 的东南西北方时,可以反转其运动

Image title

Image title

Image title

Z:

从光标发射出一个 Z 向东移动, 如果碰撞到运算符,则从西方同一行出现一个 Z

Image title

【教程】2. 数学(Mathematics)运算符的使用
Humble Ray 2019-01-29

数学 Mathematics:

  • A add(a, b): a 和 b 的和
  • B bool(val): 如果非0的值输入,则触发
  • F if(a, b): 如果输入的两个值相等,则触发
  • increment(min, max): 在 I 的南方,数值由最小值到最大值依次增加
  • M modulo(val, mod): 输出输入数值的模
  • R random(min, max): 输出最大值和最小值范围内的随机值

A:

A a b

将 a 和 b 相加

Image title

B:

B val

如果 val 为非零的值,则触发(Bang),否则不触发

Image title

Image title

Image title

F:

F a b

如果 a 和 b 值相等,则触发(Bang),否则不触发

Image title

Image title

I:

I min max

数值从 min 到 max 依次增加,输出到 I 的南方的一个格子中,下图中为 1,2,3,4 依次增加

Image title

M:

M val mod

val 对 mod 取模,即 val 除以 mod 的余数

Image title

R:

R min max

数值在 min 到 max 之间取一个随机数,输出到 R 的南方的一个格子中,下图为 1 到 4 之间的随机数

Image title

Image title


【教程】1. 运算符(Operators)分类介绍及快捷键
Humble Ray 2019-01-29

官方教程:https://github.com/hundredrabbits/Orca/blob/master/TUTORIAL.md

我采用了一种和官方 Github 上不同的分类方法,哪个适合你来选哪个就好。

数学 Mathematics:

  • A add(a, b): a 和 b 的和
  • B bool(val): 如果非0的值输入,则触发
  • F if(a, b): 如果输入的两个值相等,则触发
  • increment(min, max): 显示在 I 的南方,数值由最小值到最大值依次增加
  • M modulo(val, mod): val 对 mod 取模
  • R random(min, max): 输出最大值和最小值范围内的随机值

移动 Movements:

  • E east: 出现一个 E 向东移动,并可以触发
  • N north: 出现一个 N 向北移动,并可以触发
  • S south: 出现一个 S 向南移动,并可以触发
  • W west: 出现一个 W 向西移动,并可以触发
  • H halt: 显示在 H 的南方,停止正在运动的运算符
  • U uturn('n, 'e, 's, 'w): 反转输入运算符的运动
  • Z zoom: 出现一个 Z 向东移动,在发生碰撞后,从西方重新出现

读写 Reads and Writes:

  • V variable('write, read): 读取或写入全局变量 
  • G generator('x, 'y, 'len): 在指定坐标位置写入多个运算符
  • Q query('x, 'y, 'len): 在指定坐标位置读取多个运算符
  • P push('len, 'key, val): 写入一个在东方向的运算符
  • T track('len, 'key, val): 读取一个在东方向的运算符
  • O offset('x, 'y, val): 读取一个指定位置的运算符
  • X teleport('x, 'y, val): 写入一个指定位置的运算符

运行帧数 Runtime Frame:

  • C clock('rate, mod): 根据运行帧数输出恒定的值
  • D delay('rate, mod): 根据运行帧数来触发

其他 Other:

  • J jumper(val): 在 J 的南方输入从北方输入的数值
  • Y jymper(val): 在 Y 的东方输出从西方输入的数值
  • K konkat('len): 输出多个变量
  • L loop('len): 出现在 L 的东方,循环指定数量的运算符

以下顺序均按英文字母排序。

无分类:

  • A add(a, b): a 和 b 的和
  • B bool(val): 如果非0的值输入,则触发
  • C clock('rate, mod): 根据运行帧数输出恒定的值
  • D delay('rate, mod): 根据运行帧数来触发
  • E east: 出现一个 E 向东移动,并可以触发
  • F if(a, b): 如果输入的两个值相等,则触发
  • G generator('x, 'y, 'len): 在指定坐标位置写入多个运算符
  • H halt: 出现在 H 的南方,停止正在运动的运算符
  • I increment(min, max): 出现在 I 的南方,数值由最小值到最大值依次增加
  • J jumper(val): 在 J 的南方输入从北方输入的数值
  • K konkat('len): 输出多个变量
  • L loop('len): 出现在 L 的东方,循环指定数量的运算符
  • M modulo(val, mod): 输出输入数值的模
  • N north: 出现一个 N 向北移动,并可以触发
  • O offset('x, 'y, val): 读取一个指定位置的运算符
  • P push('len, 'key, val): 写入一个在东方向的运算符
  • Q query('x, 'y, 'len): 在指定坐标位置读取多个运算符
  • R random(min, max): 输出最大值和最小值范围内的随机值
  • S south: 出现一个 S 向南移动,并可以触发
  • T track('len, 'key, val): 读取一个在东方向的运算符
  • U uturn('n, 'e, 's, 'w): 反转输入运算符的运动
  • V variable('write, read): 读取或写入全局变量
  • W west: 出现一个 W 向西移动,并可以触发
  • X teleport('x, 'y, val): 写入一个指定位置的运算符
  • Y jymper(val): 在 Y 的东方输出从西方输入的数值
  • Z zoom: 出现一个 Z 向东移动,在发生碰撞后,从西方重新出现
  • * bang: 触发附近的运算符
  • # comment: 注释,单个出现注释整行,成对出现注释之间的字母
  • : midi('channel, 'octave, 'note, velocity, length): 发送一个 MIDI 音符
  • ; udp: 发送一条 UDP 信息
  • = osc(path): 发送一条 OSC 信息

快捷键:

Terminal Controls

  • enter 切换插入/写入
  • space 切换播放/暂停
  • > 提高 BPM
  • < 降低 BPM
  • shift+方向键 扩展光标
  • ctrl+方向键 跳跃光标
  • alt+方向键 移动已选

编辑:

  • ctrl+c 复制已选
  • ctrl+x 剪切已选
  • ctrl+v 粘贴已选
  • ctrl+z 撤销
  • ctrl+shift+z 重做

网格控制:

  • ] 增加网格垂直尺寸
  • [ 减小网格垂直尺寸 
  • } 增加网格水平尺寸
  • { 减小网格水平尺寸 
  • ctrl/meta+] 增加程序垂直尺寸
  • ctrl/meta+[ 减小程序垂直尺寸
  • ctrl/meta+} 增加程序水平尺寸
  • ctrl/meta+{ 减小程序水平尺寸

窗口:

  • ctrl+= 放大
  • ctrl+- 缩小
  • ctrl+0 缩放重制
  • tab 切换界面
  • backquote 切换背景
  • ctrl+. 打开控制台

加入 indienova

  • 建立个人/工作室档案
  • 建立开发中的游戏档案
  • 关注个人/工作室动态
  • 寻找合作伙伴共同开发
  • 寻求线上发行
  • 更多服务……
登录/注册