实时 MIDI 输入

现在,假设您已经正确安装了 MIDI 接口,您可以通过更改 sco 文件来演奏您的第一个乐器,如下所示:

f1 0 8192 10 1
f0 10000 ; dummy table, keeps the instrument
         ; active for 10000 seconds
e
并编译您的 orc/sco 文件,如下所示:
csound -o devaudio -W -dm6 -M /dev/midi my.orc my.sco
其中-M /dev/midi告诉 Csound 寻找 MIDI 输入,而不是乐谱声音事件。

触发 my.orc 的另一种方法是使用标准 MIDI 文件。 orc/sco 可以像上一个示例一样使用,但命令行更改为

csound -o devaudio -W -dm6 -F my.mid my.orc my.sco
其中-F my.mid告诉 Csound 期望从 MIDI 文件输入。

如果我们想让我们的声音更有趣,我们可以将 MIDI 值映射到 orc 文件中,并任意地利用这些数据,如清单 1 所示。

清单 1

我们的乐谱文件 (sco) 仍然和以前一样,但增加了一个函数表

f1 0 8192 10 1 ; sine wave
f2 0 8192 10 1 .9 .8 .7 .6 .5 .4 .3 .2 .1
                   ; ramp wave
f0 10000
e
再次声明,这些文件可以被编译以通过 MIDI 输入设备或 MIDI 文件进行控制。 它们表明,简单的 Csound 组件可以很容易地构建成精巧的声音和控制结构。 我在这里使用了最简单的乐器,但它已经迅速发展到更高的复杂性。

实时 MIDI 输出

清单 2

使用 Gabriel Maldonado 的 MIDI 输出 opcode 有点不同。 以下示例演示了一个更复杂的控制系统,如清单 2 所示。 该乐器的 sco 文件如下:

; MIDI OUT opcodes
; mussle.sco

t 0 60 ; tempo indicator
i1 1.0 1.0 ; the different p3 durations will
; stretch out
i1 2.0 7.0 ; the play of the notes indicated by
; knum
i1 9.0 18.0
i1 18.0 17.0
i11 0.0 1
i100 0 1
e
编译这些文件的命令行如下所示:
csound -Q0 -n -dm6 mussle.orc mussle.sco
其中-Q0选择第一个 MIDI 设备,并且-n禁止写入磁盘(为了提高性能)。

如果 CPU 和磁盘足够快,就有可能组合各种实时 I/O 选项。 我已经测试了同时进行实时音频和 MIDI 输出 opcode;它可以工作,但性能会受到很大影响。 考虑到我的机器是一台低端的 AMD 486/120,希望快速的 Pentium 能够减轻这种影响。

© . All rights reserved.