00 翻译自 Cycling74 的 Max/MSP/Jitter 官方文档: What is a Matrix?
矩阵即网格,网格的每个格子都包含一些信息。例如,棋盘是一个矩阵,每个方格包含特定的信息:有某个棋子,或没有棋子。
方便起见,假设矩阵中每个格子的「信息」都是数字。
电子表格是二维矩阵
水平的数据组称为行
,垂直的数据组称为列
。在路线图、棋盘或电子表格中,通常会使用字母和数字标记行和列,这样就可以表示任意一个单元格的位置。在上面例子中,单元格 C3 的数值为 0.319。
上面的矩阵例子是二维的——宽度和高度。在 Jitter 中,矩阵维度范围在 1~32 维之间。(一维矩阵对应编程中的数组 array。Max 中有一些对象用于存储数组,例如 table
和 multislider
。不过有时候 Jitter 中的一维矩阵更适用)虽然在纸上描绘起来有点困难,但我们仍然可以想象一个有宽度/高度/深度的立方体三维矩阵。(例如,矩阵宽/高/深 分别有 3 个单元,总共 3x3x3 = 27个单元)
一个 3x3x3 维矩阵共有 27 个单元
四维或更高维度的矩阵,相当挑战我们的视觉想象力和描述能力,但它们确实存在。
视频屏幕作为矩阵
视频屏幕由微小的单个像素组成,每个像素都显示特定的颜色。在计算机显示器上,屏幕的分辨率通常是 1024 像素宽,768 像素高,也可能是800x600 或 640x480。在电视监视器中,分辨率大约为 640×480。上述屏幕的宽高比为 4:3。
在较宽的 DV 格式中,宽高比为3:2,图像通常为 720x480 像素。高清晰度电视(HDTV)指定了另一种宽高比 16:9。在教程中通常使用 4:3 的宽高比,最常见的尺寸小于 320x240 甚至 160x120,这样可以节省 Max patch 的大小。
常见的像素尺寸
单帧标准视频由 640×480 = 307,200 个像素组成。每个像素显示一种颜色。为了用数字表示眼睛可分辨的像素的颜色,我们需要范围非常大的颜色值。
用数字表示颜色值有许多方式。描述计算机中每个像素颜色的标准方法,是将颜色分解为红色、绿色和蓝色(也称为RGB),以及透明度(称为Alpha通道)。因此,大多数计算机程序将单个像素的颜色,存储为四个单独的数字,分别表示 α,红色,绿色和蓝色。这种四通道颜色表示方案通常称为 ARGB 或 RGBA。
Jitter 也遵循这个惯例。为了使矩阵的每个单元表示一个颜色像素,每个单元都包含四个数值(α/红/绿/蓝)。因此存储视频帧数据的矩阵,实际上在每个单元格中包含四个数值。
矩阵的每个单元格包含多个数字
因此,视频帧在 Jitter 中是二维矩阵,每个单元表示帧的像素,并且每个单元包含 α/红/绿/蓝 四个值,范围从 0 到 255。为了区分多单元格与矩阵维度的概念,Jitter 引入了平面(plane)的概念。
什么是 plane?
为矩阵中的数字分配内存时,Jitter 需要知道每个维度的范围 - 例如,320x240 - 以及每个单元格中要保存的值的数量。为了跟踪单元格中的不同值,Jitter 把单元格看做位于某个单独平面上,因此我们将视频帧视为四个数据平面的二维矩阵。
矩阵每个单元中的值存在于四个虚拟平面上
使用这个概念框架,我们可以在需要时单独处理每个平面(以及颜色信息的每个通道)。例如,想要增加图像的红色,只需增加矩阵红色平面中的所有值,保持其他值不变。
一般在 Jitter 中用四个矩阵的数据-α/红/绿/蓝的 表示视频。这些平面的编号从 0 到 3,因此 Alpha 通道位于平面 0 中,RGB 通道位于平面 1,2 和 3 中。
矩阵中的数据
计算机用不同格式来存储数字。如果知道想要存储的数字类型,就可以仅为每个数字分配真正需要的空间来节省内存。例如,用 ASCII 0~255 存储字母字符,只需要 8 位(2 的 8 次方)的空间来存储每个字符。如果想要存储更大范围的数字,可能会使用 32 位(包含的整数范围从 -2,147,483,648 到 2,147,483,647)。为了表示带小数部分的数字,例如 3.1416,我们使用浮点数二进制系统,32 位或 64 位数字的某些位表示值的尾数,其他位表示指数。
用 Max 编程的大多数情况下,不需要知道 Max 如何存储数字。但是用 MSP 处理数字音频时,最好了解 MSP 什么情况下使用浮点数(如果不小心用整数替代了浮点数,程序可能会报错)。在 Jitter 中,了解计算机的存储类型非常有帮助。
Jitter 矩阵可以将数字存储为 64 位浮点(也称为双精度浮点或双精度),32 位浮点(简称浮点数),32 位整数(称为long int,或者只是int)和 8 位字符(称为char)。某些 Jitter 对象仅以一种格式存储,因此不必指定存储类型。但是其他 Jitter 对象允许多种方式存储,因此必须指定数据类型为 char / long / float32 / float64 等。
重要概念:在使用 Jitter 操作视频时,需要了解矩阵中数据存储的知识。矩阵默认以 ARGB 格式保存视频数据,每个单元的数值范围是 0~255 (一般在四个平面中)。最常见的数据存储类型是 char,并不是因为存储的是字符。最常存储的值通常是数字,只需要 256 个不同的可能值来表示,因此 8 位的 char 就足够了。视频数据量一般较大,所以 Jitter 中大多数矩阵对象默认使用 char 存储类型,以减少存储空间。对于单色(灰度)图像或视频,单个 char 数据平面就足够了。
友情提示:独自折腾 Max 易患上癔症……不妨入群互助
👇👇👇
MakeNoise 系列