123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- import FSM
- import utils as u
- import menus as m
- import os
- import pygame
- #====================================
-
- State = type("State", (object,), {})
- #====================================
- class State(object):
- def __init__(self, FSM):
- self.FSM = FSM
- def Enter(self):
- pass
- def Execute(self):
- pass
- def Exit(self):
- pass
-
- #====================================
-
- class LoadSound(State):
- def __init__(self,FSM):
- super(LoadSound, self).__init__(FSM)
-
- def Enter(self):
- o = self.FSM.owner
- o.header_text = "Load Sound"
- o.pub.register("beat", self)
- self.cur_el = 0
-
- self.press_ticks_up = None
- self.press_ticks_down = None
-
- self.menu = []
-
- self.menu.append("..")
- self.menu += self.get_file_list(o)
-
-
- dirs = u.get_folders(o.load_sound_dir)
- files = u.get_files(o.load_sound_dir, '.wav')
-
- print('directory is ', o.load_sound_dir)
- print('dirs are ', dirs)
- print('files are ', files)
-
-
- if o.last_load_sound_id != None and o.last_load_sound_id <= len(self.menu):
- self.cur_el = o.last_load_sound_id
- print('setting cur_el ', self.cur_el)
- self.last_preview = None
-
- if o.keyState[16] > 0 or o.keyState[17] > 0:
- pass
- else:
- u.draw_header(o)
- self.draw_main(o)
-
- o.update_display(0)
- super(LoadSound, self).Enter()
-
- def Execute(self):
- o = self.FSM.owner
- m.menu1_actions(self, o)
- if o.keyState[16] == 1:
- m.draw_menu1(o)
- o.update_display(0)
- elif o.keyState[16] == 4:
- u.draw_header(o)
- self.draw_footer(o)
- self.draw_main(o)
- o.update_display(0)
-
- if o.keyState[0] == 1 or o.keyState[0] == 3 or o.keyState[1] == 1 or o.keyState[1] == 3 or o.keyState[2] == 1 or o.keyState[2] == 3 or o.keyState[3] == 1 or o.keyState[3] == 3:
- u.draw_header(o)
- self.draw_footer(o)
- self.draw_main(o)
- o.update_display(0)
-
- if o.keyState[16] > 0 or o.keyState[17] > 0:
- pass
- else:
-
- since_up = 0
- if o.keyState[0] == 2:
- if self.press_ticks_up == None:
- self.press_ticks_up = pygame.time.get_ticks()
- since_up = pygame.time.get_ticks() - self.press_ticks_up
- else:
- self.press_ticks_up = None
- self.press_ticks_up = pygame.time.get_ticks()
-
- if o.keyState[0] == 1 or since_up > 250:
- if self.cur_el > 0:
- self.cur_el -= 1
- self.draw_main(o)
- o.update_display(0)
- self.press_ticks_up = pygame.time.get_ticks()
-
- since_down = 0
- if o.keyState[1] == 2:
- if self.press_ticks_down == None:
- self.press_ticks_down = pygame.time.get_ticks()
- since_down = pygame.time.get_ticks() - self.press_ticks_down
- else:
- self.press_ticks_down = None
- self.press_ticks_down = pygame.time.get_ticks()
-
- if o.keyState[1] == 1 or since_down > 250:
- if self.cur_el < (len(self.menu) - 1):
- self.cur_el += 1
- self.draw_main(o)
- o.update_display(0)
- self.press_ticks_down = pygame.time.get_ticks()
-
- if o.keyState[2] == 1:
- if self.is_wav():
- if self.last_preview == self.menu[self.cur_el]:
- pass
- else:
- snd = pygame.mixer.Sound(o.load_sound_dir + self.menu[self.cur_el])
- pygame.mixer.Sound.play(snd)
-
- if o.keyState[3] == 1:
- if self.menu[self.cur_el] == '..':
- print('directory up')
- o.last_load_sound_id = None
- if o.load_sound_dir == '/home/pi/zpc_ct/user/sounds/':
- print('root dir - cant go up')
- else:
- o.load_sound_dir = os.path.dirname(os.path.dirname(o.load_sound_dir))
- o.load_sound_dir += '/'
- print('new up dir is ', o.load_sound_dir)
- self.menu = []
- self.menu.append("..")
- self.menu += self.get_file_list(o)
- self.cur_el = 0
-
- elif os.path.isdir(o.load_sound_dir + self.menu[self.cur_el]):
- print('this is a directory ', o.load_sound_dir + self.menu[self.cur_el])
- o.load_sound_dir = o.load_sound_dir + self.menu[self.cur_el] + '/'
- self.menu = []
- self.menu.append("..")
- self.menu += self.get_file_list(o)
- self.cur_el = 0
-
- else:
- print('this is not a directory ', o.load_sound_dir + self.menu[self.cur_el])
- o.soundSlots[o.eSound].file = o.load_sound_dir + self.menu[self.cur_el]
- o.soundSlots[o.eSound].volume = 16
- o.soundSlots[o.eSound].pitch = 0
- o.soundSlots[o.eSound].create_sound()
- o.soundSlots[o.eSound].set_pitch()
- o.last_load_sound_id = self.cur_el
- self.FSM.ToTransition('toMain')
-
- def get_file_list(self, o):
- dirs = os.listdir(o.load_sound_dir)
- dirs.sort()
- for i in dirs:
- if os.path.isdir(o.load_sound_dir + i):
- i += "/asdfasdfasf"
- print(i, ' is a directory')
- else:
- print(i, ' is not a directory')
- print(dirs)
- return dirs
-
- def draw_main(self, o):
- al = []
- ypos = 30
- if self.cur_el == 0:
- _iter = 0
- while len(al) < 4:
- if _iter < len(self.menu):
- al.append(self.menu[_iter])
- else:
- break
- _iter += 1
-
- elif self.cur_el == 1:
- al.append(self.menu[self.cur_el - 1])
- al.append(self.menu[self.cur_el])
- if (self.cur_el + 1) < len(self.menu):
- al.append(self.menu[self.cur_el + 1])
- if (self.cur_el + 2) < len(self.menu):
- al.append(self.menu[self.cur_el + 2])
-
- elif self.cur_el == (len(self.menu) - 2):
- al.append(self.menu[self.cur_el - 2])
- al.append(self.menu[self.cur_el - 1])
- al.append(self.menu[self.cur_el])
- al.append(self.menu[self.cur_el + 1])
-
- elif self.cur_el == (len(self.menu) - 1):
- al.append(self.menu[self.cur_el - 3])
- al.append(self.menu[self.cur_el - 2])
- al.append(self.menu[self.cur_el - 1])
- al.append(self.menu[self.cur_el])
-
- else:
- al.append(self.menu[self.cur_el - 1])
- al.append(self.menu[self.cur_el])
- al.append(self.menu[self.cur_el + 1])
- al.append(self.menu[self.cur_el + 2])
-
- _iter = 0
- for i in al:
-
- if i == self.menu[self.cur_el]:
- if os.path.isdir(o.load_sound_dir + i):
- i += "/"
- o.draw.rectangle((0, ypos, o.width, ypos + 20), outline=0, fill=o.light_grey)
- o.center_block(i, o.h2, [0, ypos, o.width,ypos + 20], o.blue)
-
- else:
- if os.path.isdir(o.load_sound_dir + i):
- i += "/"
- o.draw.rectangle((0, ypos, o.width, ypos + 20), outline=0, fill=o.blue)
- o.center_block(i, o.h2, [0, ypos, o.width,ypos + 20], o.light_grey)
-
- ypos += 20
- _iter += 1
-
- def draw_footer(self, o):
- _iter = 0
- width = o.width / 4
- xpos = 0
- yposa = 135 - 25
- yposb = 135
- opts = ["Up", "Down", "Play", "Open"]
- while _iter < 4:
-
- o.draw.rectangle((xpos, yposa, xpos + width, yposb), outline=0, fill=o.blue)
- if o.keyState[_iter] == 1:
- o.draw.rectangle((xpos, yposa, xpos + width, yposb), outline=0, fill=o.light_grey)
- o.center_block(opts[_iter], o.h2, [xpos,yposa,xpos + width,yposb], o.blue)
-
- else:
- if _iter == 2:
- if self.is_wav():
- o.center_block(opts[_iter], o.h2, [xpos,yposa,xpos + width,yposb], o.light_grey)
- else:
- o.center_block(opts[_iter], o.h2, [xpos,yposa,xpos + width,yposb], o.dark_grey)
-
- else:
- o.center_block(opts[_iter], o.h2, [xpos,yposa,xpos + width,yposb], o.light_grey)
-
- xpos += width
- _iter += 1
-
- def is_wav(self):
- if len(self.menu[self.cur_el]) > 3 and (self.menu[self.cur_el][-1] == 'V' or self.menu[self.cur_el][-1] == 'v') and (self.menu[self.cur_el][-2] == 'A' or self.menu[self.cur_el][-2] == 'a') and (self.menu[self.cur_el][-3] == 'W' or self.menu[self.cur_el][-3] == 'w'):
- return True
- else:
- return False
-
- def ReceiveMessage(self, message):
- o = self.FSM.owner
- u.play_seq(o, message)
-
- def Exit(self):
- self.FSM.owner.pub.unregister("beat", self)
|