0

我正在尝试用两个函数表制作一个音高包络。一个表保存音高值,另一个保存相应的持续时间。这两个表的长度相等,但该长度可以是任何值。有谁知道创建具有任意数量点的线的任何好方法?还是一种将两个信封一个接一个地连接在一起的方法?谢谢!

4

1 回答 1

0

这是一种可能性:

instr test
 kPitches[] fillarray 60, 62, 61, 63
 kDurations[] fillarray 1, 2, 3, 1
 kTime init 0
 kIndx init 0
 if kTime <= 0 then
  kPitchLine = kPitches[kIndx]
  kTime = kDurations[kIndx]
  kIndx += 1
 endif
 kTime -= 1/kr
 aTest poscil .2, mtof(kPitchLine)
 out aTest, aTest
endin
schedule("test",0,7)

如果您愿意,可以使用函数表而不是数组。您可以将其包装到 UDO 中(有关更多信息,请参见http://write.flossmanuals.net/csound/g-user-defined-opcodes/)。

也许您考虑加入 csound 邮件列表。你会在那里得到更多建议:https ://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND

于 2019-03-16T15:11:15.040 回答