我正在通过Mark Owen" Practical Signal Processing"第二章中的练习是指"在32kHz处创建一个包含几秒400Hz正弦波样本的矢量。"(question 2.3)
由于本书并不支持任何一项技术,我试图在Supercollider中执行此操作:
" Pbind(\ freq,Pseq([400,400,400,400,400,400,400,400,400,400,]),\ dur,0.15;)。play;"
但是我有两个问题:如何在模式播放期间消除音符之间的间隙以及如何以特定采样率生成模式中的音调?
谢谢!
答案 0 :(得分:2)
听起来你在“错误”的水平上工作。使用Pbind是非常高级的,指定音乐事件的模式,而作者可能希望您考虑生成单个音频数据样本所涉及的数学。
由于这是读者的练习,我不会给出完整的答案,但是:SuperCollider有许多其他语言的sin()
运算符。您可以生成值列表,然后应用sin()
,例如通过
sin([0,1,2,3,4,5])
或
sin((0..100))
这些都是简单的例子;他们没有得到您指定的频率或采样率或持续时间。
问题似乎并没有要求你回放结果,但如果你想这样做,你可以通过将计算出的音频加载到缓冲区中来实现:
x = sin((0..1000));
b = Buffer.sendCollection(s, x);
b.play