Add Arp music synth
parent
49125fc3d2
commit
fade33fd3d
|
@ -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()
|
Loading…
Reference in New Issue