Sampler in ChucK
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
3.3KB

  1. from libs.simpleosc import *
  2. import wx
  3. class OSCSlider(wx.Panel):
  4. ''' A GUI slider '''
  5. def __init__(self, parent, label, min_value=0, max_value=1, default_value=0, show_value=True, align=True):
  6. ''' Constructor '''
  7. self.show_value=show_value
  8. wx.Panel.__init__(self, parent)
  9. sizer=wx.BoxSizer(wx.HORIZONTAL)
  10. label=wx.StaticText(self, label=label, size=(100,15) if align else None)
  11. sizer.Add(label, 0, wx.RIGHT, 10)
  12. self.slider=wx.Slider(self, value=default_value*100, minValue=min_value*100, maxValue=max_value*100)
  13. sizer.Add(self.slider, 1, wx.EXPAND)
  14. if show_value:
  15. self.indicator=wx.StaticText(self, label="--", size=(50,15))
  16. sizer.Add(self.indicator, 0, wx.LEFT, 10)
  17. self.SetSizerAndFit(sizer)
  18. self.slider.Bind(wx.EVT_SCROLL, self.update)
  19. self.update(None)
  20. def update(self, evt):
  21. """ Send OSC messages """
  22. value=self.slider.GetValue()/100.
  23. if self.show_value:
  24. self.indicator.SetLabel("%s" % value)
  25. try:
  26. sendOSCMsg("/test", [value])
  27. except OSCClientError:
  28. pass
  29. class InputPanel(wx.Panel):
  30. ''' Handle the ADC input settings '''
  31. def __init__(self, parent):
  32. ''' Constructor '''
  33. wx.Panel.__init__(self, parent)
  34. sizer = wx.BoxSizer(wx.HORIZONTAL)
  35. label = wx.StaticText(self, label="Line In:")
  36. font = label.GetFont(); font.SetWeight(wx.BOLD); label.SetFont(font)
  37. sizer.Add(label, 0, wx.TOP|wx.BOTTOM|wx.RIGHT, 5)
  38. self.gain=OSCSlider(self, "Gain", default_value=.5, show_value=False, align=False)
  39. sizer.Add(self.gain, 1, wx.ALL, 5)
  40. self.thru=OSCSlider(self, "Thru", default_value=.5, show_value=False, align=False)
  41. sizer.Add(self.thru, 1, wx.ALL, 5)
  42. self.button=wx.Button(self, 1, "Kill input")
  43. sizer.Add(self.button, 0)
  44. self.SetSizerAndFit(sizer)
  45. class MainGUI(wx.Frame):
  46. """ A simple GUI to talk to Chuck """
  47. def __init__(self):
  48. """ Constructor """
  49. # Build the interface
  50. self.app = wx.App(False)
  51. self.build()
  52. self.app.MainLoop()
  53. def build(self):
  54. """ Builds the various pieces of the GUI """
  55. wx.Frame.__init__(self, None, title="DELAY LORD")
  56. self.Bind(wx.EVT_CLOSE, self.quit)
  57. # The main sizer
  58. self.mainsizer = wx.BoxSizer(wx.VERTICAL)
  59. self.inputPanel = InputPanel(self)
  60. self.mainsizer.Add(self.inputPanel, 0, wx.EXPAND|wx.ALL, 5)
  61. line=wx.StaticLine(self)
  62. self.mainsizer.Add(line, 0, wx.EXPAND|wx.ALL, 5)
  63. self.delayTime=OSCSlider(self, "Delay time (s)", default_value=5, max_value=10)
  64. self.mainsizer.Add(self.delayTime, 0, wx.EXPAND|wx.ALL, 5)
  65. self.feedback=OSCSlider(self, "Feedback", default_value=.95)
  66. self.mainsizer.Add(self.feedback, 0, wx.EXPAND|wx.ALL, 5)
  67. # Put things together
  68. self.SetSizerAndFit(self.mainsizer)
  69. self.Show()
  70. self.SetSize((400,500))
  71. def populate_left_panel(self):
  72. """ Populate the left panel """
  73. # Status boxes
  74. def quit(self, *args):
  75. """ Close down gracefully, and then destroy the window """
  76. self.Destroy()
  77. if __name__ == "__main__":
  78. initOSCClient(ip="127.0.0.1", port=9000)
  79. g=MainGUI()
  80. closeOSC()