Skip to content
Open
41 changes: 41 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
*.db binary
*.a binary
*.o binary
*.py[co] binary
*.so binary
*.sw[nop] binary
.xvpics binary
*.pdf binary
*.od[pst] binary
*.sxw binary
*.wpd binary
*.doc binary
*.ppt binary
*.xls binary
*.avi binary
*.swf binary
*.svg binary
*.ico diff=exif
*.gif diff=exif
*.tif diff=exif
*.jpg diff=exif
*.png diff=exif
*.xbm binary
*.xcf binary
*.mpg binary
*.mov binary
*.mp3 binary
*.ogg binary
*.gz binary
*.tgz binary
*.bz2 binary
*.zip binary
*.rpm binary
*.deb binary
*.hqx binary
*.spo binary
*.db binary
*.mdb binary
*.djvu binary
*.fig binary
*.egg binary
186 changes: 98 additions & 88 deletions examples/reaktor_lazerbass.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-

"""Example to drive/show reaktor's lazerbass instrument in pygame."""
import argparse
import pygame
import multiprocessing
import queue
import Queue
import logging

from pygame.locals import *
Expand All @@ -21,94 +24,101 @@


class ReaktorDisplay(multiprocessing.Process):
def __init__(self, bq):
multiprocessing.Process.__init__(self)
self._bq = bq

def run(self):
pygame.init()
font = pygame.font.SysFont("monospace", 15)
screen = pygame.display.set_mode((640, 480)) # FULLSCREEN
running = True
dirty = True
# OSC controlled parameters.
self._parameters = {
'beating': 0.0,
'blocks': 0.0,
'basic_Model': 0.0,
'Do!': 0.0,
}
while running:
for event in pygame.event.get():
if event.type == QUIT:
running = False
if dirty:
screen.fill(_BLACK)
# Draw a gauge using rectangles.
# Left, top, width, height.
pygame.draw.rect(
screen, _WHITE, [10, 10, 50, 100], 2)
pygame.draw.rect(
screen, _WHITE, [10, 110, 50, -int(self._parameters['beating'] * 100)])

# Draw a button-like square for on/off display.
pygame.draw.rect(
screen, _WHITE, [10, 200, 50, 50], 2)
pygame.draw.rect(
screen, _WHITE, [10, 200, 50, 50 if self._parameters['blocks'] >= 0.5 else 0])

# Show actual values.
for index, [key, val] in enumerate(self._parameters.items()):
label = font.render("{0}: {1}".format(key, val), 1, _WHITE)
screen.blit(label, (200, index * 15))
pygame.display.flip()
dirty = False
try:
what, value = self._bq.get(True)
self._parameters[what] = value
def __init__(self, bq):
multiprocessing.Process.__init__(self)
self._bq = bq

def run(self):
pygame.init()
font = pygame.font.SysFont("monospace", 15)
screen = pygame.display.set_mode((640, 480)) # FULLSCREEN
running = True
dirty = True
logging.debug('Received new value {0} = {1}'.format(what, value))
except queue.Empty:
running = False
pygame.quit()
# OSC controlled parameters.
self._parameters = {'beating': 0.0,
'blocks': 0.0,
'basic_Model': 0.0,
'Do!': 0.0}
while running:
for event in pygame.event.get():
if event.type == QUIT:
running = False
if dirty:
screen.fill(_BLACK)
# Draw a gauge using rectangles.
# Left, top, width, height.
pygame.draw.rect(screen, _WHITE, [10, 10, 50, 100], 2)
pygame.draw.rect(screen, _WHITE,
[10, 110, 50,
-int(self._parameters['beating'] * 100)])

# Draw a button-like square for on/off display.
pygame.draw.rect(screen, _WHITE, [10, 200, 50, 50], 2)
pygame.draw.rect(screen, _WHITE,
[10, 200, 50, 50
if self._parameters['blocks'] >= 0.5
else 0])

# Show actual values.
for index, [key, val] in enumerate(self._parameters.items()):
label = font.render("{0}: {1}".format(key, val),
1, _WHITE)
screen.blit(label, (200, index * 15))
pygame.display.flip()
dirty = False
try:
what, value = self._bq.get(True)
self._parameters[what] = value
dirty = True
logging.debug('Received new value {0} = {1}'
.format(what, value))
except Queue.Empty:
running = False
pygame.quit()


if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument(
"--server_ip", default="0.0.0.0",
help="The ip to listen to for reaktor OSC messages")
parser.add_argument(
"--server_port", type=int, default=8000,
help="The port to listen on for reaktor OSC messages")
#parser.add_argument("--client_ip",
# default="127.0.0.1", help="The ip to listen on")
#parser.add_argument("--client_port",
# type=int, default=5005, help="The port to listen on")
args = parser.parse_args()

#client = udp_client.UDPClient(args.client_ip, args.client_port)

bq = multiprocessing.Queue()
reaktor = ReaktorDisplay(bq)

def put_in_queue(args, value):
"""Put a named argument in the queue to be able to use a single queue."""
bq.put([args[0], value])

dispatcher = dispatcher.Dispatcher()
dispatcher.map("/debug", logging.debug)
dispatcher.map("/beating", put_in_queue, "beating")
dispatcher.map("/blocks", put_in_queue, "blocks")
dispatcher.map("/basic_Model", put_in_queue, "basic_Model")
dispatcher.map("/Do!", put_in_queue, "Do!")

server = osc_server.ThreadingOSCUDPServer(
(args.server_ip, args.server_port), dispatcher)
logging.info("Serving on {}".format(server.server_address))

# Exit thread when the main thread terminates.
reaktor.daemon = True
reaktor.start()

server.serve_forever()
parser = argparse.ArgumentParser()
parser.add_argument("--server_ip",
default="0.0.0.0",
help="The ip to listen to for reaktor OSC messages")
parser.add_argument("--server_port",
type=int,
default=8000,
help="The port to listen on for reaktor OSC messages")
# parser.add_argument("--client_ip",
# default="127.0.0.1",
# help="The ip to listen on")
# parser.add_argument("--client_port",
# type=int,
# default=5005,
# help="The port to listen on")
args = parser.parse_args()

# client = udp_client.UDPClient(args.client_ip, args.client_port)

bq = multiprocessing.Queue()
reaktor = ReaktorDisplay(bq)

def put_in_queue(args, value):
"""Put a named argument in the queue to be able to use a single
queue."""
bq.put([args[0], value])

dispatcher = dispatcher.Dispatcher()
dispatcher.map("/debug", logging.debug)
dispatcher.map("/beating", put_in_queue, "beating")
dispatcher.map("/blocks", put_in_queue, "blocks")
dispatcher.map("/basic_Model", put_in_queue, "basic_Model")
dispatcher.map("/Do!", put_in_queue, "Do!")

server = osc_server.ThreadingOSCUDPServer((args.server_ip,
args.server_port),
dispatcher)
logging.info("Serving on {}".format(server.server_address))

# Exit thread when the main thread terminates.
reaktor.daemon = True
reaktor.start()

server.serve_forever()
37 changes: 21 additions & 16 deletions examples/simple_client.py
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-

"""Small example OSC client

This program sends 10 random values between 0.0 and 1.0 to the /filter address,
waiting for 1 seconds between each value.
This program sends 10 random values between 0.0 and 1.0 to the /debug
address, waiting for 1 seconds between each value.
"""
import argparse
import random
Expand All @@ -10,20 +13,22 @@
from pythonosc import osc_message_builder
from pythonosc import udp_client


if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--ip", default="127.0.0.1",
help="The ip of the OSC server")
parser.add_argument("--port", type=int, default=8000,
help="The port the OSC server is listening on")
args = parser.parse_args()
parser = argparse.ArgumentParser()
parser.add_argument("--ip",
default="127.0.0.1",
help="The ip of the OSC server")
parser.add_argument("--port",
type=int,
default=8000,
help="The port the OSC server is listening on")
args = parser.parse_args()

client = udp_client.UDPClient(args.ip, args.port)
client = udp_client.UDPClient(args.ip, args.port)

for x in range(10):
msg = osc_message_builder.OscMessageBuilder(address = "/filter")
msg.add_arg(random.random())
msg = msg.build()
client.send(msg)
time.sleep(1)
for x in range(10):
msg = osc_message_builder.OscMessageBuilder(address="/debug")
msg.add_arg(random.random())
msg = msg.build()
client.send(msg)
time.sleep(1)
51 changes: 31 additions & 20 deletions examples/simple_server.py
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,31 +1,42 @@
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-

from __future__ import print_function

import argparse
import math

from pythonosc import dispatcher
from pythonosc import osc_server


def print_volume_handler(unused_addr, args, volume):
print("[{0}] ~ {1}".format(args[0], volume))
print("[{0}] ~ {1}".format(args[0], volume))


def print_compute_handler(unused_addr, args, volume):
try:
print("[{0}] ~ {1}".format(args[0], args[1](volume)))
except ValueError: pass
try:
print("[{0}] ~ {1}".format(args[0], args[1](volume)))
except ValueError:
pass

if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--ip",
default="0.0.0.0", help="The ip to listen on")
parser.add_argument("--port",
type=int, default=5005, help="The port to listen on")
args = parser.parse_args()

dispatcher = dispatcher.Dispatcher()
dispatcher.map("/debug", print)
dispatcher.map("/volume", print_volume_handler, "Volume")
dispatcher.map("/logvolume", print_compute_handler, "Log volume", math.log)

server = osc_server.ThreadingOSCUDPServer(
(args.ip, args.port), dispatcher)
print("Serving on {}".format(server.server_address))
server.serve_forever()
parser = argparse.ArgumentParser()
parser.add_argument("--ip",
default="0.0.0.0",
help="The ip to listen on")
parser.add_argument("--port",
type=int,
default=5005,
help="The port to listen on")
args = parser.parse_args()

dispatcher = dispatcher.Dispatcher()
dispatcher.map("/debug", print)
dispatcher.map("/volume", print_volume_handler, "Volume")
dispatcher.map("/logvolume", print_compute_handler, "Log volume", math.log)

server = osc_server.ThreadingOSCUDPServer((args.ip, args.port),
dispatcher)
print("Serving on {0}".format(server.server_address))
server.serve_forever()
6 changes: 3 additions & 3 deletions pythonosc/osc_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ class BlockingOSCUDPServer(socketserver.UDPServer):
"""

def __init__(self, server_address, dispatcher):
super().__init__(server_address, _UDPHandler)
socketserver.UDPServer.__init__(self, server_address, _UDPHandler)
self._dispatcher = dispatcher

def verify_request(self, request, client_address):
Expand All @@ -121,7 +121,7 @@ class ThreadingOSCUDPServer(
"""

def __init__(self, server_address, dispatcher):
super().__init__(server_address, _UDPHandler)
socketserver.UDPServer.__init__(self, server_address, _UDPHandler)
self._dispatcher = dispatcher

def verify_request(self, request, client_address):
Expand All @@ -144,7 +144,7 @@ class ForkingOSCUDPServer(
"""

def __init__(self, server_address, dispatcher):
super().__init__(server_address, _UDPHandler)
socketserver.UDPServer.__init__(self, server_address, _UDPHandler)
self._dispatcher = dispatcher

def verify_request(self, request, client_address):
Expand Down
Loading