Browse Source

Multichannel OSC

master
Pete Shadbolt 10 years ago
parent
commit
f5fe60cf08
4 changed files with 2 additions and 177 deletions
  1. +0
    -65
      chuck.ck
  2. +0
    -10
      interface.py
  3. +0
    -100
      osctest.py
  4. +2
    -2
      run.sh

+ 0
- 65
chuck.ck View File

@@ -1,65 +0,0 @@
// Effects chain
adc => Gain g => dac;
g => Gain feedback => DelayL delay => g;

// Delay parameters
10::second => delay.max;
5::second => delay.delay;
1 => feedback.gain;
1 => delay.gain;

// Create our OSC receiver
OscRecv recv;
9000 => recv.port;
recv.listen();
recv.event( "/test, f" ) @=> OscEvent oe;

// Event loop
while (true) {
// Wait for event to arrive
oe => now;

// Grab the next message from the queue.
while ( oe.nextMsg() != 0 ) {
float val;
<<<val>>>;
oe.getFloat() => val;
val::second => delay.delay;
}
}


/*
// Listen for messages regarding ADC input
fun void oscListener( int port, string osctype ) {
// create our OSC receiver
OscRecv recv;
port => recv.port;
recv.listen();

int val;
string type;

// create an address in the receiver, store in new variable
recv.event( osctype ) @=> OscEvent oe;

while( true ) {
// wait for osc event to arrive
oe => now;

while( oe.nextMsg() ) {
oe.getInt() => val;
osctype => type;

if( type == leftraw ) {
val => raw.freq;
}
else if( type == leftavg ) {
val => avg.freq;
}

me.yield();
}
}
}
*/

+ 0
- 10
interface.py View File

@@ -1,10 +0,0 @@
from libs.simpleosc import *

server = OSCServer (("127.0.0.1", 9000))
server.addDefaultHandlers()


initOSCClient(port=9000)
sendOSCMsg("/test", [.1])
closeOSC()


+ 0
- 100
osctest.py View File

@@ -1,100 +0,0 @@
from libs.simpleosc import *
import wx

class OSCSlider(wx.Panel):
''' A GUI slider '''
def __init__(self, parent, label, min_value=0, max_value=1, default_value=0, show_value=True, align=True):
''' Constructor '''
self.show_value=show_value
wx.Panel.__init__(self, parent)
sizer=wx.BoxSizer(wx.HORIZONTAL)
label=wx.StaticText(self, label=label, size=(100,15) if align else None)
sizer.Add(label, 0, wx.RIGHT, 10)
self.slider=wx.Slider(self, value=default_value*100, minValue=min_value*100, maxValue=max_value*100)
sizer.Add(self.slider, 1, wx.EXPAND)
if show_value:
self.indicator=wx.StaticText(self, label="--", size=(50,15))
sizer.Add(self.indicator, 0, wx.LEFT, 10)
self.SetSizerAndFit(sizer)
self.slider.Bind(wx.EVT_SCROLL, self.update)
self.update(None)

def update(self, evt):
""" Send OSC messages """
value=self.slider.GetValue()/100.
if self.show_value:
self.indicator.SetLabel("%s" % value)
try:
sendOSCMsg("/test", [value])
except OSCClientError:
pass

class InputPanel(wx.Panel):
''' Handle the ADC input settings '''
def __init__(self, parent):
''' Constructor '''
wx.Panel.__init__(self, parent)
sizer = wx.BoxSizer(wx.HORIZONTAL)

label = wx.StaticText(self, label="Line In:")
font = label.GetFont(); font.SetWeight(wx.BOLD); label.SetFont(font)
sizer.Add(label, 0, wx.TOP|wx.BOTTOM|wx.RIGHT, 5)

self.gain=OSCSlider(self, "Gain", default_value=.5, show_value=False, align=False)
sizer.Add(self.gain, 1, wx.ALL, 5)
self.thru=OSCSlider(self, "Thru", default_value=.5, show_value=False, align=False)
sizer.Add(self.thru, 1, wx.ALL, 5)

self.button=wx.Button(self, 1, "Kill input")
sizer.Add(self.button, 0)
self.SetSizerAndFit(sizer)


class MainGUI(wx.Frame):
""" A simple GUI to talk to Chuck """
def __init__(self):
""" Constructor """
# Build the interface
self.app = wx.App(False)
self.build()
self.app.MainLoop()

def build(self):
""" Builds the various pieces of the GUI """
wx.Frame.__init__(self, None, title="DELAY LORD")
self.Bind(wx.EVT_CLOSE, self.quit)

# The main sizer
self.mainsizer = wx.BoxSizer(wx.VERTICAL)

self.inputPanel = InputPanel(self)
self.mainsizer.Add(self.inputPanel, 0, wx.EXPAND|wx.ALL, 5)

line=wx.StaticLine(self)
self.mainsizer.Add(line, 0, wx.EXPAND|wx.ALL, 5)

self.delayTime=OSCSlider(self, "Delay time (s)", default_value=5, max_value=10)
self.mainsizer.Add(self.delayTime, 0, wx.EXPAND|wx.ALL, 5)

self.feedback=OSCSlider(self, "Feedback", default_value=.95)
self.mainsizer.Add(self.feedback, 0, wx.EXPAND|wx.ALL, 5)

# Put things together
self.SetSizerAndFit(self.mainsizer)
self.Show()
self.SetSize((400,500))


def populate_left_panel(self):
""" Populate the left panel """
# Status boxes

def quit(self, *args):
""" Close down gracefully, and then destroy the window """
self.Destroy()


if __name__ == "__main__":
initOSCClient(ip="127.0.0.1", port=9000)
g=MainGUI()
closeOSC()

+ 2
- 2
run.sh View File

@@ -1,5 +1,5 @@
#!/bin/bash
chuck --bufsize64 chuck.ck &
python ./osctest.py
chuck --bufsize64 main.ck &
python ./main.py
pkill -SIGINT chuck


Loading…
Cancel
Save