Использование суперколлайдера с питоном

Я хочу сделать обработку звука в реальном времени, и я слышал о 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(...)