Noisefunge:Befunge的一个音乐编程环境

2020-09-22 08:27:28

NoiseFunge是一种用于音乐现场编码的模糊语言。它是最棒的语系中的一员。该语言的一些功能包括:

目前推荐的NoiseFunge安装方式是使用Cabal将可执行文件安装到沙箱中。可以使用以下步骤安装NoiseFunge。但是,此方法可能仍然需要安装ALSA和ncurses的系统软件包。

如果NoiseFunge安装在CABAL沙箱中,则可以使用noisefunge.env文件将可执行文件添加到PATH中,并配置环境变量,以便通过环回网络(端口4545)与正在运行的NoiseFunge程序通信。

这是NoiseFunge运行时守护进程。它需要指定节拍和网络接口的配置文件。源库中提供了一个名为test.cfg的示例。

此程序将NoiseFunge文件加载到VM中。所需的命令行参数是文件名以及输入和输出缓冲区的名称。

此程序会终止VM中的NoiseFunge进程。有三种方法可以运行此操作。

NoiseFunge支持A-F的操作码,这些操作码的工作方式与0-9操作码类似,但会将相应的十六进制值推送到堆栈上。

K操作码派生一个新进程。数字0被压入父堆栈,数字1被压入子堆栈。

C操作码类似于g操作码,但是c操作码不是从内存访问字节并将其推入堆栈,而是将该字节作为操作码执行。

E操作码从堆栈中弹出一个值,并将其作为操作码执行。

NoiseFunge使用非标准形式的输入和输出。每个进程被分配给一个输入缓冲区和一个输出缓冲区。操作码可用于从这些缓冲区读取和写入。每个进程也有自己的文本缓冲区,用于书写字符和数字。

~从输入缓冲区读取一个字节并将其压入堆栈。如果没有进程写入缓冲区,则此字段将阻塞。

。从堆栈中弹出一个字节并将其写入输出缓冲区。如果没有进程从缓冲区读取,则此字段将阻塞。

;从堆栈中弹出一个字节,并将其发送到等待输出缓冲区的所有进程。这不会阻塞。

&;弹出一个字节并将其作为基数10输出到文本缓冲区。

笔记缓冲器是一个虚拟设备,可以通过使用操作码进行读、写或播放。

';弹出一个值并跳过下一个操作码当值为0。

[操作码的工作方式类似于引用运算符。[导致字节被压入函数定义堆栈。另一个[从函数定义堆栈中弹出第一个值,并将其用作正在定义的操作码的名称。堆栈中的其余项按照它们从堆栈中弹出的顺序成为函数使用的操作码。

函数定义是全局的。一个线程中定义的函数将对另一个线程可见。当多个线程重写一个函数时,这可能会导致有趣的行为。这也使得函数成为NoiseFunge支持的另一种IPC类型。

这个特性的语义考虑得相当糟糕,一些组合可能会导致奇怪或不可预测的行为。下面列出了一些注释。

一旦遇到第二个[,就计算操作码定义。此时,操作码是基于定义操作码时操作码的功能定义的。

用户定义的操作码在单个时钟节拍内执行。例外情况是使用量化/睡眠操作码的操作码:q、q和s。

';和#将在操作码执行结束时生效。