very basic 'generative' patch

This commit is contained in:
Mikayla Dobson
2023-04-10 16:51:49 -05:00
parent 7b80529ef8
commit c88e757461

43
main.py
View File

@@ -1,8 +1,9 @@
from machine import Pin, ADC, PWM from machine import Pin, ADC, PWM
from random import randint
from math import floor, ceil from math import floor, ceil
from time import sleep_ms from time import sleep
__SYSTEM_PWM_FREQUENCY__ = 500 __SYSTEM_PWM_FREQUENCY__ = 1000
WAVEFORMS = ['sine', 'square', 'saw', 'triangle'] WAVEFORMS = ['sine', 'square', 'saw', 'triangle']
@@ -78,15 +79,15 @@ def blink(controller: type[ADC], target=Pin(25, Pin.OUT), sleep_duration = 1000)
# POT.read_u16() / 65535 approaches 0 as potentiometer approaches max, # POT.read_u16() / 65535 approaches 0 as potentiometer approaches max,
# approaches 1 as potentiometer approaches min # approaches 1 as potentiometer approaches min
modulated_sleep = max(floor(sleep_duration * (controller.read_u16()) / 65535), 5) modulated_sleep = max(floor(sleep_duration * (controller.read_u16()) / 65535), 5) / 1000
target.value(1) target.value(1)
sleep_ms(modulated_sleep) sleep(modulated_sleep)
modulated_sleep = max(floor(sleep_duration * (controller.read_u16()) / 65535), 5) modulated_sleep = max(floor(sleep_duration * (controller.read_u16()) / 65535), 5)
target.value(0) target.value(0)
sleep_ms(modulated_sleep) sleep(modulated_sleep)
""" " " " " " " " " " " " " " " " " " " " " " " """ " " " " " " " " " " " " " " " " " " " " " "
@@ -126,6 +127,9 @@ class PWMOutput:
new_pwm = PWM(Pin(PIN)) new_pwm = PWM(Pin(PIN))
self.PWM = new_pwm self.PWM = new_pwm
self.PWM.freq(__SYSTEM_PWM_FREQUENCY__)
self.duty = duty
def set_duty(self, duty: int): def set_duty(self, duty: int):
self.PWM.duty_u16(duty) self.PWM.duty_u16(duty)
return self.PWM.duty_u16() return self.PWM.duty_u16()
@@ -133,6 +137,12 @@ class PWMOutput:
def get_duty(self): def get_duty(self):
return self.PWM.duty_u16() return self.PWM.duty_u16()
def get_freq(self):
return self.PWM.freq()
def set_freq(self, freq: int):
self.PWM.freq(freq)
class DigitalOut: class DigitalOut:
def __init__(self, PIN: int): def __init__(self, PIN: int):
self.PIN = Pin(PIN, Pin.OUT) self.PIN = Pin(PIN, Pin.OUT)
@@ -150,7 +160,7 @@ class Oscillator:
def step(self): def step(self):
current_step = SINE_WAVE[self.current_tick] current_step = SINE_WAVE[self.current_tick]
self.current_tick = self.current_tick + 1 if self.current_tick + 1 < len(SINE_WAVE) else 0 self.current_tick = self.current_tick + 1 if self.current_tick + 1 < len(SINE_WAVE) else 0
sleep_ms(self.tick_interval_ms) sleep(self.tick_interval_ms / 1000)
return current_step return current_step
def out(self, cb): def out(self, cb):
@@ -161,7 +171,7 @@ class Oscillator:
current_step = SINE_WAVE[self.current_tick] current_step = SINE_WAVE[self.current_tick]
self.current_tick = current_step + 1 if current_step + 1 < len(SINE_WAVE) else 0 self.current_tick = current_step + 1 if current_step + 1 < len(SINE_WAVE) else 0
sleep_ms(ceil(self.tick_interval_ms)) sleep(self.tick_interval_ms / 1000)
return self.out(cb) return self.out(cb)
class Synthesizer: class Synthesizer:
@@ -211,9 +221,22 @@ class Synthesizer:
def __init__(self, config): def __init__(self, config):
self.config = config self.config = config
pot = Potentiometer(0) gate_out = PWM(Pin(15))
cv_out = PWMOutput(1, 512) voct_out = PWM(Pin(16))
gate_out.freq(__SYSTEM_PWM_FREQUENCY__)
voct_out.freq(__SYSTEM_PWM_FREQUENCY__)
values = [0.1, 0.2, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7]
# values[x] * 65535 = our random pitch
while True: while True:
cv_out.set_duty(pot.read()) random_value = values[randint(0, len(values) - 1)] * 65535
print(int(random_value))
print('go')
gate_out.duty_u16(65535)
voct_out.duty_u16(int(random_value))
sleep(0.25)
gate_out.duty_u16(0)
sleep(1.5)