0

我对 midipolyaftertouch 操作码不太走运。基本上

kPea init 0.1
midipolyaftertouch kPea, 1, 0.1, 0.9
printk2 kPea

实际上并不响应复音触后消息。另一方面,手动编码的粗略等价物

kPea init 0.1
kstatus,kchan,kdata1,kdata2 midiin
if (kstatus==160 && kchan==1) then
    kPea = kdata2 * 0.007
    printk2 kPea
endif     

工作正常。那么这是一个已知的错误midipolyaftertouch吗?除了手册中的那些,我找不到任何使用示例midipolyaftertouch,所以我猜几乎没有人使用它...顺便说一句aftouch,获取通道而不是每个音符的触后(压力),即aftouch查询 kstatus = = 208(实际上确实有效,但当然不是每个音符)。有关差异,请参阅

我在 Windows 上的 Cabbage 2.3.0 中使用 Csound 6.13 beta 版(因为那是 Cabbage 版本附带的)。

4

1 回答 1

0

在文档之后,还有另一个操作码polyaft实际上可以工作

kPea init 0.1
inote   notnum          ; note number
kPea    polyaft inote, 0.1, 0.9
printk2 kPea

查看midipolyaftertouch它的 C 源代码实际上与 for 的索引方式完全相同polyaft。因此,基于此,我尝试了:

kPea init 0.1
inote   notnum          ; note number
midipolyaftertouch kPea, inote, 0.1, 0.9
printk2 kPea

这实际上也有效。

在 MIDI API 行话中,“MIDI 控制器 [编号]”(通常)表示键/音符 [编号]……不像 DAW 世界中使用“多个 MIDI 控制器”来表示多个键盘,而不是相同的键盘...此外,Csound 具有后一种/DAW 意义上的多个控制器的概念,由 -M 启动开关选择,尽管它它们为“MIDI 设备”。

除非您仅使用 D0 作为键/注释来尝试,否则文档中的代码示例midipolyaftertouch可能无法工作;在这里插入关于坏时钟的笑话。有趣的是,文档是由该操作码的源代码作者编写的,所以这不是其他人误解代码的情况......

于 2020-02-15T08:48:58.840 回答