Skip to content

Commit

Permalink
Merge pull request #13 from monome/2023-update
Browse files Browse the repository at this point in the history
Python 3.11 / 2023 update (re-do)
  • Loading branch information
dndrks committed Feb 2, 2023
2 parents cee4c1d + 90ee611 commit 5cd21e0
Show file tree
Hide file tree
Showing 7 changed files with 185 additions and 105 deletions.
6 changes: 4 additions & 2 deletions README.md
Expand Up @@ -9,6 +9,8 @@ This repository holds the Grid Studies for Python:
* [grid-studies-2-4.py](files/grid-studies-2-4.py)
* [grid-studies-2-5.py](files/grid-studies-2-5.py)

The latest release of this repository can be donwloaded [here](https://github.com/monome/grid-studies-python/releases).
The latest release of this repository can be downloaded [here](https://github.com/monome/grid-studies-python/releases).

The complete monome docs are hosted at [monome.org/docs/](https://monome.org/docs/) and developed at [github.com/monome/docs](https://github.com/monome/docs).
These files correspond to [this long-form walkthrough](https://monome.org/docs/grid/studies/python/) of scripting for grids + Python.

The complete monome docs are hosted at [monome.org/docs/](https://monome.org/docs/) and developed at [github.com/monome/docs](https://github.com/monome/docs).
13 changes: 8 additions & 5 deletions files/grid-studies-1.py
Expand Up @@ -9,10 +9,10 @@ def __init__(self):

def on_grid_key(self, x, y, s):
print("key:", x, y, s)
self.grid.led_level_set(x, y, s*15)
self.grid.led_level_set(x, y, s * 15)

if __name__ == '__main__':
loop = asyncio.get_event_loop()
async def main():
loop = asyncio.get_running_loop()
grid_studies = GridStudies()

def serialosc_device_added(id, type, port):
Expand All @@ -22,5 +22,8 @@ def serialosc_device_added(id, type, port):
serialosc = monome.SerialOsc()
serialosc.device_added_event.add_handler(serialosc_device_added)

loop.run_until_complete(serialosc.connect())
loop.run_forever()
await serialosc.connect()
await loop.create_future()

if __name__ == '__main__':
asyncio.run(main())
49 changes: 32 additions & 17 deletions files/grid-studies-2-1.py
Expand Up @@ -6,37 +6,49 @@
class GridStudies(monome.GridApp):
def __init__(self):
super().__init__()
self.width = 0
self.height = 0
self.step = [[0 for col in range(16)] for row in range(16)]
self.play_task = asyncio.ensure_future(self.play())

# when grid is plugged in via USB:
def on_grid_ready(self):
self.step = [[0 for col in range(self.grid.width)] for row in range(6)]
self.width = self.grid.width
self.height = self.grid.height
self.sequencer_rows = self.height-2
self.connected = True
self.draw()

asyncio.async(self.play())
# when grid is physically disconnected:
def on_grid_disconnect(self, *args):
self.connected = False

async def play(self):
while True:
await asyncio.sleep(0.1)

self.draw()

await asyncio.sleep(0.1)
def on_grid_key(self, x, y, s):
# toggle steps
if s == 1 and y < self.sequencer_rows:
self.step[y][x] ^= 1
self.draw()

def draw(self):
buffer = monome.GridBuffer(self.grid.width, self.grid.height)
buffer = monome.GridBuffer(self.width, self.height)

# display steps
for x in range(self.grid.width):
for y in range(6):
for x in range(self.width):
for y in range(self.sequencer_rows):
buffer.led_level_set(x, y, self.step[y][x] * 11)

# update grid
buffer.render(self.grid)
if self.connected:
buffer.render(self.grid)

def on_grid_key(self, x, y, s):
# toggle steps
if s == 1 and y < 6:
self.step[y][x] ^= 1
self.draw()

if __name__ == '__main__':
loop = asyncio.get_event_loop()
async def main():
loop = asyncio.get_running_loop()
grid_studies = GridStudies()

def serialosc_device_added(id, type, port):
Expand All @@ -46,5 +58,8 @@ def serialosc_device_added(id, type, port):
serialosc = monome.SerialOsc()
serialosc.device_added_event.add_handler(serialosc_device_added)

loop.run_until_complete(serialosc.connect())
loop.run_forever()
await serialosc.connect()
await loop.create_future()

if __name__ == '__main__':
asyncio.run(main())
45 changes: 30 additions & 15 deletions files/grid-studies-2-2.py
Expand Up @@ -6,49 +6,61 @@
class GridStudies(monome.GridApp):
def __init__(self):
super().__init__()
self.width = 0
self.height = 0
self.step = [[0 for col in range(16)] for row in range(16)]
self.play_position = -1
self.play_task = asyncio.ensure_future(self.play())

# when grid is plugged in via USB:
def on_grid_ready(self):
self.step = [[0 for col in range(self.grid.width)] for row in range(6)]
self.play_position = 0
self.width = self.grid.width
self.height = self.grid.height
self.sequencer_rows = self.height-2
self.connected = True
self.draw()

asyncio.async(self.play())
# when grid is physically disconnected:
def on_grid_disconnect(self,*args):
self.connected = False

async def play(self):
while True:
if self.play_position == self.grid.width - 1:
await asyncio.sleep(0.1)

if self.play_position == self.width - 1:
self.play_position = 0
else:
self.play_position += 1

self.draw()

await asyncio.sleep(0.1)
if self.connected:
self.draw()

def draw(self):
buffer = monome.GridBuffer(self.grid.width, self.grid.height)
buffer = monome.GridBuffer(self.width, self.height)

# display steps
for x in range(self.grid.width):
for x in range(self.width):
# highlight the play position
if x == self.play_position:
highlight = 4
else:
highlight = 0

for y in range(6):
for y in range(self.sequencer_rows):
buffer.led_level_set(x, y, self.step[y][x] * 11 + highlight)

# update grid
buffer.render(self.grid)

def on_grid_key(self, x, y, s):
# toggle steps
if s == 1 and y < 6:
if s == 1 and y < self.sequencer_rows:
self.step[y][x] ^= 1
self.draw()

if __name__ == '__main__':
loop = asyncio.get_event_loop()
async def main():
loop = asyncio.get_running_loop()
grid_studies = GridStudies()

def serialosc_device_added(id, type, port):
Expand All @@ -58,5 +70,8 @@ def serialosc_device_added(id, type, port):
serialosc = monome.SerialOsc()
serialosc.device_added_event.add_handler(serialosc_device_added)

loop.run_until_complete(serialosc.connect())
loop.run_forever()
await serialosc.connect()
await loop.create_future()

if __name__ == '__main__':
asyncio.run(main())
53 changes: 34 additions & 19 deletions files/grid-studies-2-3.py
Expand Up @@ -6,64 +6,76 @@
class GridStudies(monome.GridApp):
def __init__(self):
super().__init__()
self.width = 0
self.height = 0
self.step = [[0 for col in range(16)] for row in range(16)]
self.play_position = -1
self.play_task = asyncio.ensure_future(self.play())

# when grid is plugged in via USB:
def on_grid_ready(self):
self.step = [[0 for col in range(self.grid.width)] for row in range(6)]
self.play_position = 0
self.width = self.grid.width
self.height = self.grid.height
self.sequencer_rows = self.height-2
self.connected = True
self.draw()

asyncio.async(self.play())
# when grid is physically disconnected:
def on_grid_disconnect(self,*args):
self.connected = False

async def play(self):
while True:
if self.play_position == self.grid.width - 1:
await asyncio.sleep(0.1)

if self.play_position == self.width - 1:
self.play_position = 0
else:
self.play_position += 1

# TRIGGER SOMETHING
for y in range(6):
for y in range(self.sequencer_rows):
if self.step[y][self.play_position] == 1:
self.trigger(y)

self.draw()

await asyncio.sleep(0.1)
if self.connected:
self.draw()

def trigger(self, i):
print("triggered", i)

def draw(self):
buffer = monome.GridBuffer(self.grid.width, self.grid.height)
buffer = monome.GridBuffer(self.width, self.height)

# display steps
for x in range(self.grid.width):
for x in range(self.width):
# highlight the play position
if x == self.play_position:
highlight = 4
else:
highlight = 0

for y in range(6):
for y in range(self.sequencer_rows):
buffer.led_level_set(x, y, self.step[y][x] * 11 + highlight)

# draw trigger bar and on-states
for x in range(self.grid.width):
buffer.led_level_set(x, 6, 4)
for x in range(self.width):
buffer.led_level_set(x, self.sequencer_rows, 4)

for y in range(6):
for y in range(self.sequencer_rows):
if self.step[y][self.play_position] == 1:
buffer.led_level_set(self.play_position, 6, 15)
buffer.led_level_set(self.play_position, self.sequencer_rows, 15)

# update grid
buffer.render(self.grid)

def on_grid_key(self, x, y, s):
# toggle steps
if s == 1 and y < 6:
if s == 1 and y < self.sequencer_rows:
self.step[y][x] ^= 1
self.draw()

if __name__ == '__main__':
async def main():
loop = asyncio.get_event_loop()
grid_studies = GridStudies()

Expand All @@ -74,5 +86,8 @@ def serialosc_device_added(id, type, port):
serialosc = monome.SerialOsc()
serialosc.device_added_event.add_handler(serialosc_device_added)

loop.run_until_complete(serialosc.connect())
loop.run_forever()
await serialosc.connect()
await loop.create_future()

if __name__ == '__main__':
asyncio.run(main())

0 comments on commit 5cd21e0

Please sign in to comment.