2016-10-02 69 views
0

我通过马克·欧文的“Practical Signal Processing”,并在第二章的练习读说要“建立一个包含在32kHz的一个400Hz的正弦波的几秒钟样品的载体。”(question 2.3如何从音调样本创建和播放矢量?

由于本书没有按不支持任何一种技术,我试图在Supercollider中做到这一点:

“Pbind(\ freq,Pseq([400,400,400,400,400,400,400,400,400,400,400,]),\ dur,0.15;); play;”

但我有两个问题:在模式播放过程中如何消除音符之间的间隙,以及如何在特定采样率下生成模式中的音调?

谢谢!

回答

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 
+0

谢谢你的回应!我尝试了你的最后一个例子,(sin((0..1000));)但是在我的左声道中听到了一个快速的唧唧声。完整的问题其实很长(如果你检查链接),他确实想要回放;我只是想弄清楚最初的步骤。听起来像我的另一种选择,使用PortAudio,可能是更好的选择,因为低水平。 – mjbraun