Esempio n. 1
0
 def setParameter(self):
     msg = OSC3.OSCMessage()
     keys = list(self.fx[self.fx_nr].params.keys()
                 )  # TODO: this should be more efficient and convenient
     key = keys[self.param_nr]
     msg.setAddress("/pd/" + self.fx[self.fx_nr].name + "/set/" + key)
     msg.append(self.fx[self.fx_nr].params[key])
     self.client.send(msg)
Esempio n. 2
0
    def oscSendMessage(self, address, content):
        import pyOSC3.OSC3 as OSC

        if self.loggingEnabled:
            logging.info("Send OSC message to " + address + ": " +
                         str(content))

        osc_message = OSC.OSCMessage()
        osc_message.setAddress(address)
        osc_message.append(content)
        self.oscClient.send(osc_message)
Esempio n. 3
0
    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
Esempio n. 4
0
    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()
Esempio n. 5
0
 def oscSend(self, address, data):
     msg = OSC3.OSCMessage()
     msg.setAddress(address)
     msg.append(data)
     self.client.send(msg)
Esempio n. 6
0
 def getParameter(self, key):
     msg = OSC3.OSCMessage()
     msg.setAddress("/pd/" + self.fx[self.fx_nr].name + "/get/" + key)
     msg.append("bang")
     self.client.send(msg)
Esempio n. 7
0
#!/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)
Esempio n. 8
0
Manuel Planton 2019
"""

from pyOSC3 import OSC3 as OSC
import RPi.GPIO as GPIO
from time import sleep
from classes import KY040

if __name__ == "__main__":
    CLOCKPIN = 26
    DATAPIN = 20
    SWITCHPIN = 21
    BUTTON = 5

    # connect client to OSC server
    c = OSC.OSCClient()
    c.connect(('127.0.0.1', 7110))
    # different ip for PC
    #c.connect(('169.254.178.186', 7110))

    # OSC messages
    switch_msg = OSC.OSCMessage()
    switch_msg.setAddress("/rotary/switch")
    switch_msg.append("1")

    rotary_msg = OSC.OSCMessage()
    rotary_msg.setAddress("/rotary/encoder")

    # define callbacks
    def rotaryChange(direction):
        print("turned - ", str(direction))
Esempio n. 9
0
    # OSC message handlers
    def encoder_handler(addr, tags, data, client_address):
        txt1 = "%s of %s" % (addr, client_address)
        txt2 = str(data)
        d.message(d.LINE_1, txt1)
        d.message(d.LINE_2, txt2)

    def switch_handler(addr, tags, data, client_address):
        d.message(d.LINE_1, 16 * '*')
        d.message(d.LINE_2, 16 * '*')

    def rand_handler(addr, tags, data, client_address):
        d.message(d.LINE_1, "rand")
        d.message(d.LINE_2, "value: " + str(data))

    d.message(d.LINE_1, "Starting OSC")
    d.message(d.LINE_2, "ip: " + ip)

    # listen on localhost, port 7110
    s = OSC3.OSCServer((ip, port))

    # call handler() for OSC messages received with the given address
    s.addMsgHandler('/rotary/encoder', encoder_handler)
    s.addMsgHandler('/rotary/switch', switch_handler)
    s.addMsgHandler('/rand', rand_handler)

    print("OSC Server listening...")

    s.serve_forever()
    GPIO.cleanup()