|
|
@@ -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() |