From 293a2e87fd9d0cb3803958d2eeab17ef5db64ce5 Mon Sep 17 00:00:00 2001 From: Pete Shadbolt Date: Mon, 29 Dec 2014 10:42:24 +0000 Subject: [PATCH] Small changes --- main.ck | 36 +++++++++++++++++++ main.py | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 main.ck create mode 100644 main.py diff --git a/main.ck b/main.ck new file mode 100644 index 0000000..aa1fd15 --- /dev/null +++ b/main.ck @@ -0,0 +1,36 @@ +// 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 +spork ~ inputEventHandler(9000); + +// Loop forever +while(true) { 1::second => now; } + + +inputEventHandler => awd.handler; + +// Event loop to deal with ADC input +fun void inputEventHandler(int port) { + OscRecv recv; + port => recv.port; + recv.listen(); + recv.event( "/input, f f" ) @=> OscEvent oe; + while (true) { + oe => now; + while (oe.nextMsg() != 0) { + oe.getFloat() => g.gain; + oe.getFloat() => float a; + } + } + me.yield(); +} + + diff --git a/main.py b/main.py new file mode 100644 index 0000000..1ed8fd6 --- /dev/null +++ b/main.py @@ -0,0 +1,109 @@ +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): + value=self.slider.GetValue()/100. + if self.show_value: self.indicator.SetLabel("%s" % value) + + +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) + + self.gain.slider.Bind(wx.EVT_SCROLL, self.update) + self.thru.slider.Bind(wx.EVT_SCROLL, self.update) + self.update(None) + + def update(self, evt): + """ Send OSC messages """ + a=self.gain.slider.GetValue()/100. + b=self.thru.slider.GetValue()/100. + try: + sendOSCMsg("/input", [a, b]) + except OSCClientError: + pass + + + +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()