我是SC和整个音乐编程领域的新手。 我已经完成了一个python应用程序,该应用程序读取文本并通过OSC逐字发送给SC。 文字只是重复“ miau”和“ guau”两个词,以供娱乐和尝试。
另一种奇怪的情况是,在SC控制台上,我得到的同一个单词是文本和终端(Python打印每个单词)的三倍。因此,对于txt /终端上的每个“ miau”,我在SC控制台上都会看到“ miau miau miau”。
OSC通讯正常,但是我听不到声音。我已经分别播放了缓冲区,它们正在工作。 播放缓冲区或SynthDef时,我可以听到正在播放的样本,因此我认为问题出在开关上。
s.boot;
~b0 = Buffer.read(s, "/path/to/bd/BT0A0A7.wav")
~b1 =Buffer.read(s, "/path/to/hh/000_hh3closedhh.wav")
~b0.play;
(
SynthDef.new(\playbuf, {|amp=1, out=0, buf, da=2, rate =1|
var sig;
sig = PlayBuf.ar(2, buf, BufRateScale.kr(buf) * rate, doneAction:da);
sig = sig*amp;
Out.ar(out, sig);
}).add;
)
Synth.new(\playbuf, [\buf, ~b1.bufnum]);
(
OSCdef.new("texto",{
|msg, time, addr, port|
msg[1].postln;
switch(msg[1],
"miau", {Synth.new(\playbuf, [\buf, ~b1.bufnum])},
"guau", {Synth.new(\playbuf, [\buf, ~b0.bufnum])}
);
},
'/supercollider',
)
)
尽管它复制了文本,所以我知道OSC正在运行,但示例将无法播放。 任何提示表示赞赏!
答案 0 :(得分:0)
只需在开关中使用单引号而不是双引号即可。像这样:
(
OSCdef(\texto,{ |msg|
switch ( msg[1],
'miau', { Synth.new(\playbuf, [\buf, ~b1.bufnum] ) },
'guau', { Synth.new(\playbuf, [\buf, ~b0.bufnum] ) }
)
}, '/supercollider' )
)
saudações,
吉尔