Skip to main content

MaxOsc is a package designed to conveniently call python code from MaxMSP over OSC. It's a wrapper of the python-osc package with a built-in parser.

The python code should be run independently of Max (in a terminal or similar) and can be used in conjuncture with the set of Max abstractions available here or directly through the CNMAT externals for OSC (also available through the Max package manager).

Project Status

Development of this project is largely stalled. Minor fixes will be released when necessary.

The project is stable but documentation is limited.

Minimal Example

Run the following code in a separate terminal. Note that MaxOsc.run() will instantiate a blocking OSC server, hence no code below that point will ever be executed.

from maxosc import MaxOsc

class Flipper(MaxOsc):

    def __init__(self):
        super().__init__()
        self.run()

    def flip(self, a1: int, a2: int):
        return a2, a1

    def flip_list(self, a: [int]):
        return list(reversed(a))

if __name__ == '__main__':
    Flipper()

If the pyosc abstractions are available in your path, the following Max patcher can be used:

Show Max patcher
<pre><code>
----------begin_max5_patcher----------
432.3ocwU9saBBCEF+Z3onoWyL.BLcWs2ikESEqtZv1l1hhw369n+AmNItlg
QuvZ5omxW+w2oGNDF.myZvRH3MvGfffCgAAlP5.At4AvMnlxJjzjFjh2wluF
FYWRgaTlv78LY4nJhTsSf3cKSq2vpUUXkYuItnjElsz9XdI40tTs4o1yw1SC
DB9zsDGoJ+hPWMSfKU1UGmlNJNBLMWONISOpibZKsBSnmzUG6XXndHZfXJHT
E3cNiWyAI8iYbOXV.+SVRiiMHkb+gYCVJQqvWQSBHELFjAx82uxGjeUXPLO+
1Hl978q3a3WIYOQ+xamZ5+ynbvYMpzoixeTFko+wxZZIXYEgOS2IoeVytl0a
zDI5redTfl39Kt3w0R4Rx8F5hgCsyrcPOI2elMY.qHze+wCiJ53W9hPxpEkc
mutF+feDZAVpHTjhvnmkjKmdeW6sP4dHTx8PIeHR+gfAKTgOBEeGDZpGBcMP
1ZCDmuEKjtjMRzdcXMSnmNIxLkPsSMsufB7VRW91HHQaEqpsbsVXNVvlhLnc
qrEXAsl3pKagqURyUMJps6IGY4vbiL7X32.J7svT
-----------end_max5_patcher-----------
</code></pre>

Elaborate Example

Python Code:
from maxosc import MaxOsc


class Instrument:
    def __init__(self, name: str, midi_range: (int, int), supported_techniques: [str], concert_pitch: float,
                 transposing: bool):
        self.name: str = name
        self.midi_range: (int, int) = midi_range
        self.supported_techniques: [str] = supported_techniques
        self.concert_pitch: float = concert_pitch
        self.transposing: bool = transposing

    def max_getter(self):
        return self.name, self.midi_range, self.supported_techniques, self.concert_pitch, self.transposing


class InstrumentBank(MaxOsc):
    def __init__(self):
        super().__init__()
        self.instruments: [Instrument] = []
        self.run()

    def add_instrument(self, name: str, midi_range: (int, int), supported_techniques: [str],
                       concert_pitch: float = 440.0, transposing: bool = False):
        instrument = Instrument(name, midi_range, supported_techniques, concert_pitch, transposing)
        self.instruments.append(instrument)
        print(f"Added instrument '{name}' with range={midi_range}, techniques={supported_techniques}, "
              f"concert pitch={concert_pitch} and transposing={transposing}.")

    def get_instruments(self):
        return [instr.max_getter() for instr in self.instruments]


if __name__ == '__main__':
    InstrumentBank()
Max Code:
Show Max patcher

----------begin_max5_patcher----------
1581.3ocyZF0bahCDG+YmOE6vKocFWeHDfgNSd35C2SW6K2My8PhmLXrrM4v
HJRjX2N86dWIgcH01Dpwl1YRLFYEzt+j1c+K470qFXMkulIrf2C2BCF70qFL
P2jpgAU2OvZUz53zHgtaVw7UqXYRqglOSxVK0s+wxTYx6dhWLCDxhjrEBPf8
Cjb3iQqgmRRSgoLHOpPvlAQBcqhMqlxSEPxH1HXFubZJC9bIWFIS3Yvpnh+W
.uQTN8AVr9IEuLJaA6si1N5oIYrXdYl1DbqZLqbEuTlxjZC1tp0jYZyjO8g2
E5s8uOORFuDs06KvAvPA5X+Q1CApuq5BwOPcw2djML44meR11GOQ012t5J0K
C6HB+DOigTfIxtVBr0IBIjjo3zH3+1Ce2g1QZ5cVWB9PZfOiscqyGGR+wmOv
4ornLAxn8IztOr4Uc1.u.HW.nED1.z777pCMZOtn5CafYr4QXz4PHiIjHFRQ
tI1wl4oQRIKCa+okrr53aD7OLFFEtdIKMGlifaEufgDGe6JSHJ9ihsn2BlFE
cEiia.ijPZcLNdb+Fa9dnTvTAd36UAdwQBEMPhIRjIOxd6AccZqc8lRKE3ZR
KENxaHXbb2w8YP2VmWVTpbdbwvcVyiREWDRPaJADw4YRPrI8GJ9yhEkpO.xh
VwDXfwFU7inLOOMACeRv+pYIQRV5FLXHMk+D13zMHmt4NqQv+tD6adTLChlK
YEllgDAvyUgRQocjYMkz1MztFyB6QlkugKhGox37TQTNDGkoXVAKOEIAlxIQ
tDsuICAF9NjJ5F3lqnCaHlnanYbSoloNg0PC0t+PyeqRC+Gxxb0C2Dd8RZcP
u1o0dcSYR88pGCYRsP6CmdeYhFOWUBYewecj.MkPk35ncdSdUBkd9YvzRojm
YcPykb.ysVVuBLCClj3dVVDpItt+YdFxM4LieXMEUuXsynOToCmZA+N5RmpW
+04mNWF+zOv62K+jbY7SWi7mee7S6Kie5DFn7vKmedrbT+UYVrJGjXWUnHck
eUmeOfYsVrXakJsSzojT9AMklVKzyIPq3gXt7KMGku+kYtl5WyQuDy0nfMQz
B1dy0W+ItR3JppUM6dM7Fk3dP8xagaUh9mzn1i7BlZCS5RV22hE.GBotVGCa
sIsdnFYUR5BOFxbNmHC6BV4lo268GldsZ+s1PnGLAtcd5WlfQH39Ex4pR52n
1tvEmfzSifUELLDjPr6OD9XBGcUXUxrj6KTm9vMvsddnRrwSz6mfWf6S+dIK
dYVxmKYhatMpHlC4Ie4Kv0w7THksHie8ot1j1ZxRNMxVUhphrlC+nWIqAlvy
T6NqcXC20kqq8HvV03KVJiehYkLtL1zGB1mWjg.6h5b2p8h4YcvYBu1xYO6S
iylzlTOiFVOMtUme44iyYrmPC7HaqaNVnDVvj2+LeDGtTh699rq2w84g09sE
9OIn15LGm9ntwAiGacYTWmSa9l3SUhgL6lmXNHji6umy3JS.U6cvSbAs4v2M
9mqW+4dlzFs18nAcIds5vX7O+t2OoZN5EUM2kS3diIk9wSO40ofamBFIlrOA
tm+jOGwOefiUqns2+b5xh0pCHILrY2i9qeZjzkTNWvYwWQpxNge2BGrnBL4m
XClGfKNm3x6pseWUqw787Q85WsEQylUSaQqkV3etTV33FVSYU6VVn6gdt5G9
d00ihp8WhDAurHdq8s8b.gmGnYLgLISqhuVmT6ZT0oCh8VORNsYjnmiQhzlQ
hbNFI6VLRNmC5oNKjWcjTpb69H41F58h9fasLGKSHEaOr.SwXmwpKnxps2zU
Ki1UKyOz0XLg0srvNaYaAeiVlZeW3d7NhoYLFpqlYjwA6tqqPizUn4NlZ3TP
cnEzYKi1FKSomPAstM8zlvT54HgfaaRxQOGIDntskdNccjb57JncAZ10i55L
BBZKB57H0pruNuNCpNb8w5u.vf5k34EyXE5cB0CVpcaszfcueeCkb4MzeXFt
AC0sAC0oSFpSmqGRsCLJ5Zb8uQJWTd9irBQ0SWaTnN1G3ZGIXn91jLysZ82V
ErGS11eSKnx9kIRTcYYg1QrVWcr+Vq3HRxJSpl9PbfCoVir9+xD0+9Cls1iR
ou5aW8cPshRPJ
-----------end_max5_patcher-----------

Metadata

Release files for maxosc 0.0.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for maxosc 0.0.6
File Size Uploaded
maxosc-0.0.6.tar.gz 18.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for maxosc 0.0.6
File Interpreter ABI Platform
maxosc-0.0.6-py3-none-any.whl Python 3 none any Details

Total release size: 32.5 kB

Release files / maxosc-0.0.6.tar.gz

Download URL maxosc-0.0.6.tar.gz
Size 18.5 kB
Tags Source
SHA-256 checksum
How to use checksums
72f8a7415f7b83521e2ad0c82c624934256ee2bdd78d38e0ad8855e82dcea30a
BLAKE2b-256 checksum
How to use checksums
6a2d44865f97c537d2b0d6d4970e129b792523f5c77e191026a003c5a7aa68ed
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.6

Release files / maxosc-0.0.6-py3-none-any.whl

Download URL maxosc-0.0.6-py3-none-any.whl
Size 14.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
286fb5f6f5d5d7ecbd02f86f8892a49dc0ff96c272439d3ca24367257c31aa4a
BLAKE2b-256 checksum
How to use checksums
ddca733fc0f1bad4237592ab6a34b53f9d73e4de65749999aff53cce7d54e624
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.6

Release history Release notifications | RSS feed

This release

0.0.6 This release

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page