Featured post

new redirect for blender.org bpy docs.

http://www.blender.org/api/blender_python_api_current/ As of 10/11 november 2015 we can now link to the current api docs and not be worr...

November 19, 2014

Blender PyNodes and SuperCollider and OSC

Super Collider in Blender

SoundPetal is a node system for Blender which thinly wraps SuperCollider Ugens and lets you compose them into SynthDefs. ScSynth needs to be running and OSC listeners need to be initialized. The repo contains the SuperCollider .scd files which define the OSC listeners. The Blender nodes send OSC information using the pythonosc library, this means you need to have your own local Python 3.4 with pythonosc installed.

It makes sound already, but the implementation is primitive. The next step is to implement a script node which lets me define a synthdef with code, but in such a way that the arguments can be updated in realtime using sliders on nodes (keyframe able sound!). A primitive sequencer and pianoroll could happen if the attention-span doesn't drop.

I was thinking about doing this for a while, then stumbled into this video by Zach Aikman who implemented this in Unity Node 2 years ago. I'm not that interested in Unity, but the talk was good and provided some insight.

Blender OSC Panel

Here's something I've had some success with. It allows you to set up a listener (non blocking) and call handler functions whenever an OSC/PATH is sent data. Read here for more:

definitely see the docs


I haven't had a lot of time to experiment and code more on SoundPetal. I'm still learning SuperCollider and want to understand it better before adding more code. Early conclusion is that it might be more convenient to write the SynthDef in advance or in a .scd directory and load the synthdef into SoundPetal, introspecting the args and exposing them as parameter inputs to a synthdef script node.

If anyone is interested please let me know, also you can do me a favour by sharing this post so that it may attract people already interested in OSC and SuperCollider.