Использование суперколлайдера с питоном
Я хочу сделать обработку звука в реальном времени, и я слышал о supercollider
и это выглядит великолепно, но я хочу придерживаться python, поскольку проблема с "нормальным" программированием является проблемой.
Есть ли способ загрузить python script в качестве модуля для суперколлайдера или oposite?
означает импортирование библиотеки в мой код python и использование функций суперколлидера?
Я не нашел много информации об этом в Интернете, поэтому любая помощь будет большой.
Ответы
Ответ 1
Мне не известно о реализации Python для SuperCollider, однако очень легко установить связь между SC и Python с OpenSoundControl. Вот пример кода из учебника в этих строках, которые я написал для класса в Art Center, который показывает, как отправлять управляющую информацию с Python на SC (используется здесь как звуковой движок). Сначала часть SC:
s.boot;
(
SynthDef( \sin, { | amp = 0.01, freq = 333, trig = 1 |
var env, sig;
env = EnvGen.kr( Env.asr( 0.001, 0.9, 0.001 ), trig, doneAction: 0 );
sig = LFTri.ar( [ freq, freq * 0.999 ], 0.0, amp ) * env;
Out.ar( [ 0 ], sig * 0.6 );
}).add;
h = Synth( \sin, [ \amp, 0.4 ] );
x = OSCFunc( { | msg, time, addr, port |
var pyFreq;
pyFreq = msg[1].asFloat;
( "freq is " + pyFreq ).postln;
h.set( \freq, pyFreq );
}, '/print' );
)
Теперь часть Python:
import OSC
import time, random
client = OSC.OSCClient()
client.connect( ( '127.0.0.1', 57120 ) )
msg = OSC.OSCMessage()
msg.setAddress("/print")
msg.append(500)
client.send(msg)
Итак, вам все равно нужно написать некоторый код в SC (для генерации типа аудио, а также для установления связи между Python и SC), но вы могли бы сделать все остальное в Python. См. Ссылку на учебную страницу для более подробного объяснения (а также базовое объяснение работы с SC).
Ответ 2
FoxDot (http://foxdot.org/) может предоставить то, что вы ищете
Ответ 3
Вы также можете использовать Python-osc. (мне это действительно нравится!) @caseyanderson прав, что не существует реализации python.
вы можете схватить его с помощью pip: pip install python-osc
и импортировать с помощью import pythonosc
или возьмите здесь: https://pypi.python.org/pypi/python-osc
Ответ 4
Я обновляю ответ @caseyanderson, потому что модуль Python OSC кажется устаревшим. Код все еще идет из этого урока, который показывает, как отправлять управляющую информацию из Python в SC (используется здесь как аудио движок). Сначала часть SC (без изменений):
s.boot;
(
SynthDef( \sin, { | amp = 0.01, freq = 333, trig = 1 |
var env, sig;
env = EnvGen.kr( Env.asr( 0.001, 0.9, 0.001 ), trig, doneAction: 0 );
sig = LFTri.ar( [ freq, freq * 0.999 ], 0.0, amp ) * env;
Out.ar( [ 0 ], sig * 0.6 );
}).add;
h = Synth( \sin, [ \amp, 0.4 ] );
x = OSCFunc( { | msg, time, addr, port |
var pyFreq;
pyFreq = msg[1].asFloat;
( "freq is " + pyFreq ).postln; h.set( \freq, pyFreq );
}, '/print' );
)
Затем часть Python (обновленная, основанная на python-osc):
from pythonosc import udp_client
client = udp_client.SimpleUDPClient("127.0.0.1", 57120) #default ip and port for SC
client.send_message("/print", 440) # set the frequency at 440
Вы должны сначала выполнить часть SC. Вы должны услышать синусоидальную волну на частоте 330 Гц. Части питона изменяют частоту синуса до 440 Гц.
Ответ 5
Не пробовал, но supriya выглядит многообещающе...
Ответ 6
Я также не смог найти ничего подходящего, поэтому я создал легкий модуль python-supercollider, который позволяет использовать сервер SuperCollider для синтеза, а Python 3 - для логики управления и последовательности.
Это оболочка для набора команд SuperCollider OSC, следуя тем же шаблонам, что и на языке клиента SC:
from supercollider import Server, Synth
server = Server()
synth = Synth(server, "sine", { "freq" : 440.0, "gain" : -12.0 })
synth.set("freq", 880.0)
Ответ 7
Мой профессор с несколькими сокурсниками разработал эту библиотеку sc3nb, которая может использоваться для адресации, кодирования и манипулирования SuperCollider из Python. Он работает с OSC, но проще синтаксиса.
Библиотечный код
Руководство
Пример (более подробно в учебнике):
import sc3nb as scn
sc = scn.startup() # startup sc3 sclang, boot server, load
#easy communication with Server Command Refs
sc.cmd(r"""
#your SuperCollider-code here
""")
sc.msg(...)
sc.bundle(...)