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.

110 lines
3.6KB

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