From fade33fd3d90e551a57ef74519852fa8095f35cb Mon Sep 17 00:00:00 2001 From: Molive Date: Wed, 12 Sep 2018 22:17:02 +0100 Subject: [PATCH] Add Arp music synth --- soundsarecool/main.py | 97 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 soundsarecool/main.py diff --git a/soundsarecool/main.py b/soundsarecool/main.py new file mode 100644 index 0000000..fea225a --- /dev/null +++ b/soundsarecool/main.py @@ -0,0 +1,97 @@ +''' +A small N channel music player a la 8088 MPH +(Demo is only two channels) + +By Molive^SLP +''' + +___name___ = "Arp Music Player" +___title___ = "Arp Music Player" +___license___ = "WTFPL" +___dependencies___ = ["ugfx_helper", "speaker"] +___categories___ = ["Demo","Sound"] + +import speaker +import utime + +from app import restart_to_default +from tilda import Buttons + +channels = [ #Supports up to n simultaneous channels. + #Each channel will loop it's data independently from the others + [ #and channels do not need the same length of data in them. + ('F4',2), #No. of channels is decided on startup, and all channels are running at any one time. + ('D#4',2), + ('D4',2), + ('C#4',1), + ('D#4',1), + ], + + ##[ + ##('A#3',4), + ##], + + ##[ + ##('C4',4), + ##], + + [ + ('F5',0.125), + ('G#5',0.25), + ('F5',0.125), + ('A#5',0.25), + ('F5',0.125), + ('C6',0.25), + ('F5',0.125), + ('A#5',0.25), + ('F5',0.25), + ('G#5',0.25), + ], + + ] + +def prt(s): + ugfx.clear() + ugfx.text(5,5,str(s),0) + +import ugfx +ugfx.init() + +prt("RUNNING SOUND TEST") + +utime.sleep(1) + +prt("Use menu to reboot") + +speaker.enabled(True) + +channel_waits = [ #Add more of these to increase the max channel count + [-1,utime.ticks_ms()], + [-1,utime.ticks_ms()], + [-1,utime.ticks_ms()], + [-1,utime.ticks_ms()], + ] + +current_channel = 0 + +while True: #Main awesome loop which handles all music channels. Can handle and arbitrary amount, but lags at high numbers. + for channel in channels: + ##print(channel_waits[current_channel][1]) #Uncomment some of these for more debug info :P + if channel_waits[current_channel][1] == 0 or channel_waits[current_channel][1] <= utime.ticks_ms(): + print("CHANGING CHANNEL "+str(current_channel)) + channel_waits[current_channel][0] += 1 + if channel_waits[current_channel][0] == len(channel): + channel_waits[current_channel][0] = 0 + channel_waits[current_channel][1] += (channels[current_channel][channel_waits[current_channel][0]][1]*1000.0) + speaker.note(channel[channel_waits[current_channel][0]][0]) + ##print(channel[channel_waits[current_channel][0]]) + if Buttons.is_pressed(Buttons.BTN_Menu): + print("BAIL BAIL BAIL") + restart_to_default() + current_channel += 1 + if current_channel == len(channels): + current_channel = 0 + ##print(current_channel) + utime.sleep(0.03) #Decrease this for more accurate but weirder arps. Comment it out for insane madness + +restart_to_default() \ No newline at end of file