Переключатель управления структурой для сообщения OSC

Я новичок в SC и во всем музыкальном программировании в целом. Я сделал приложение на Python, которое читает текст и отправляет слово за словом в SC через OSC. Текст состоит только из слов «миау» и «гуау», повторяемых для развлечения и пробы.

Еще одна странная вещь: на консоли SC я получаю три раза одно и то же слово, чем в тексте и на терминале (этот python печатает каждое слово). Таким образом, для каждого «мяу» в txt/терминале я получаю «мяу, миау, мяу» на консоли SC.

Связь 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 работает, сэмплы не воспроизводятся. Любая подсказка приветствуется!


person sophiet    schedule 14.05.2019    source источник


Ответы (1)


Просто используйте одинарные кавычки вместо двойных кавычек в переключателе. Как это:

(
OSCdef(\texto,{ |msg|
    switch ( msg[1],
        'miau', { Synth.new(\playbuf, [\buf, ~b1.bufnum] ) },
        'guau', { Synth.new(\playbuf, [\buf, ~b0.bufnum] ) }
    )
}, '/supercollider' )
)

саудасойнс,

Гил

Отредактировано, чтобы добавить:

Текст, заключенный в двойные кавычки, является строкой. Текст, заключенный в одинарные кавычки, является символом. Это разные классы. В сообщениях OSC вместо строк используются символы, поэтому использование двойных кавычек не работает.

Символы выглядят следующим образом:

'symbol'
\symbol
"symbol".asSymbol
'symbol'.asSymbol

Последние два могут помочь, если по какой-то причине у вас есть текст, но вы не уверены, что это такое.

person skmecs    schedule 13.11.2019