def __init__(self): ScriptedLoadableModuleLogic.__init__(self) # Install pyOSC3 if not installed already try: import pyOSC3.OSC3 as OSC print('pyOSC3 is installed') except ModuleNotFoundError as e: slicer.util.pip_install('pyosc3') import pyOSC3.OSC3 as OSC self.pureDataExecutablePath = None self.pureDataExecutablePathSettingsKey = 'OpenSoundControl/PureDataExecutablePath' self.oscClient = OSC.OSCClient() self.loggingEnabled = False self.pureDataProcess = None
def __init__(self, ip, port, pd_ip, pd_port, d_rs, d_rw, d_e, d_d4, d_d5, d_d6, d_d7, r_clk, r_d, r_sw, button): """Constructor IP addresses and port numbers for OSC connection are needed. Prefix 'd' is for HD44780 compatible display connections connected to the pins of the RPi. Prefix 'r' is for KY040 compatible rotary encoder connections connected to the pins of the RPi. Pin numbers are BCM numbers! (see GPIO.setmode(GPIO.BCM)) Args: ip: IP Address of the OSC server of this menu port: port number of the OSC server of this menu pd_ip: IP Address of the OSC server of the Pd effects patch pd_port: port number of the OSC server of the Pd effects patch d_rs: HD44780 register select pin number d_rw: HD44780 read/write pin number d_e: HD44780 enable pin number d_d4: HD44780 data channel 4 pin number d_d5: HD44780 data channel 5 pin number d_d6: HD44780 data channel 6 pin number d_d7: HD44780 data channel 7 pin number r_clk: rotary encoder clock pin number r_d: rotary encoder data pin number r_sw: rotary encoder internal switch button pin number button: push button pin number """ self.ip = ip self.port = port self.pd_ip = pd_ip self.pd_port = pd_port self.pd_is_connected = False self.rotary_increment = 1 # menu level entry state self.level = 1 # current effect self.fx_nr = 0 # current parameter of the effect self.param_nr = 0 # define effects main = Effect(name="main", params={ 'on': 1, 'in_vol': 127, 'out_vol': 127 }) reverb = Effect(name="reverb", params={ 'on': 0, 'dry': 64, 'wet': 120, 'rev_in_lvl': 100, 'liveness': 80, 'fc': 40, 'hf_damp': 7 }) delay = Effect( "delay", { 'on': 0, 'dry': 64, 'wet': 127, 'delay_time': 64, 'feedback': 100, 'fc_lop': 120, 'fc_hip': 25, 'detune': 10, 'mod_freq': 5 }) lop = Effect("lop", {'on': 0, 'fc': 64}) hip = Effect("hip", {'on': 0, 'fc': 30}) # effects list self.fx = [main, reverb, delay, lop, hip] GPIO.setmode(GPIO.BCM) self.button = Button.Button(button, "falling", self.buttonPressed) # callbacks for encoder and OSC handlers must be defined self.r_encoder = KY040.KY040(r_clk, r_d, r_sw, self.rotaryChange, self.switchPressed) print("DBG: initialize display") # Compat mode is true because slow displays show garbage sometimes. self.lcd = CharLCD(numbering_mode=GPIO.BCM, cols=16, rows=2, pin_rs=d_rs, pin_rw=d_rw, pin_e=d_e, pins_data=[d_d4, d_d5, d_d6, d_d7], compat_mode=True) print("DBG: initialize OSC Server") self.server = OSC3.OSCServer((ip, port)) print("DBG: initialize OSC Client") self.client = OSC3.OSCClient() # first appearance of the menu self.printMenu()
#!/usr/bin/env python3 # osc client from pyOSC3 import OSC3 as OSC c = OSC.OSCClient() c.connect(('127.0.0.1', 7110)) oscmsg = OSC.OSCMessage() oscmsg.setAddress("/startup") oscmsg.append('HELLO') c.send(oscmsg)