将超级编译器与python结合使用

将超级编译器与python结合使用,python,audio,mp3,sound-synthesis,supercollider,Python,Audio,Mp3,Sound Synthesis,Supercollider,我想做一些实时声音处理,我听说 它看起来很棒,但我想坚持使用python,因为“正常”编程是个问题 有没有办法将python脚本作为模块加载到Supercallider或oposite 这意味着要将一个库导入到我的python代码中并使用超级编译器特性吗 我在网上没有找到太多关于它的信息,所以任何帮助都会很好。我不知道Supercallider的python实现,但是它很容易在SC和python之间进行通信。下面是一些示例代码,演示如何将控制信息从Python发送到SC(此处用作音频引擎)。首先

我想做一些实时声音处理,我听说

它看起来很棒,但我想坚持使用python,因为“正常”编程是个问题

有没有办法将python脚本作为模块加载到Supercallider或oposite

这意味着要将一个库导入到我的python代码中并使用超级编译器特性吗


我在网上没有找到太多关于它的信息,所以任何帮助都会很好。

我不知道Supercallider的python实现,但是它很容易在SC和python之间进行通信。下面是一些示例代码,演示如何将控制信息从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 pyOSC3
import time, random
client = pyOSC3.OSCClient()
client.connect( ( '127.0.0.1', 57120 ) )
msg = pyOSC3.OSCMessage()
msg.setAddress("/print")
msg.append(500)
client.send(msg)


因此,您仍然需要在SC中编写一些代码(以生成音频类型,以及在Python和SC之间建立连接),但您可以在Python中完成其他所有工作。有关更深入的说明(以及使用SC的基本说明),请参见教程页面的链接。

您也可以使用Python osc。(我真的很喜欢这个!)@caseyanderson关于没有python实现的说法是正确的。 你可以用pip抓取它:
pip安装pythonsoc
并使用
import pythonosc

或者从这里抓取:

FoxDot()可能提供您想要的内容

我更新了@caseyanderson的答案,因为OSC python模块似乎过时了。 代码仍然来自于演示如何将控制信息从Python发送到SC(这里用作音频引擎)。首先是SC部分(未更改):

然后是Python部分(已更新,基于):


你必须先完成SC部分。你应该听到330赫兹的正弦波。python部分将正弦频率更改为440 Hz。

我的教授和一些同学开发了这个库sc3nb,可用于从python中寻址、编码和操作超级编译器。它与OSC一起工作,但语法更简单

示例(教程中有更多详细信息):


还没有尝试过,但看起来很有希望……

我也找不到任何合适的,所以我创建了一个轻量级模块,它允许您使用SuperCollider服务器进行合成,使用Python 3进行控制和排序逻辑

它是围绕超级准直器OSC命令集的包装器,遵循与SC客户端语言相同的模式:

from supercollider import Server, Synth

server = Server()
synth = Synth(server, "sine", { "freq" : 440.0, "gain" : -12.0 })
synth.set("freq", 880.0)

你已经知道了吗?另外,通过谷歌搜索
pythonsupercallider
还可以得到一些其他有趣的结果。我们将同时查找这两个结果。我在导入sc 0.3.1软件包时遇到了一些问题,我使用的是mac os 10.8。将更新问题,如果一个解决方案将通过。非常感谢!还有教程!我找到了,但您的链接需要更新。=)很高兴这是有帮助的,谢谢你指出链接断开了@caseyanderson很棒的指南,谢谢你-但是我遇到了一个问题:超级对撞机似乎收到了消息,但我得到了一个错误:
服务器故障:/print命令在SC中找不到。
。有什么线索我可能做错了吗?@ToivoSäwén请原谅我的延迟,只是现在看到了,但很高兴你已经弄明白了。谢谢你对本教程的好话!您好,您也可以使用pyOSC3,这就是我最近使用的。我在上面更新了答案,这与SimpleUpClient的更改类似。
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
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(...)
from supercollider import Server, Synth

server = Server()
synth = Synth(server, "sine", { "freq" : 440.0, "gain" : -12.0 })
synth.set("freq", 880.0)