123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- import random
- import time
- import pygame
- import sys
- import pyaudio
- import wave
- import glob
- import os
- from itertools import cycle
- from datetime import datetime
- from datetime import date
- import ast
- import random
- from pathlib import Path
- #import socket
- import FSM
-
- import utils as u
- import menus as m
-
- #states
- from sMain import Main
- from sSelectSound import SelectSound
- from sSelectPattern import SelectPattern
- from sEditSong import EditSong
- from sEditSoundSequence import EditSoundSequence
- from sFile import File
- from sUtil import Util
- from sBall import Ball
- from sExit import Exit
- from sReboot import Reboot
- from sClock import Clock
- from sShutdown import Shutdown
- from sSelTheme import SelTheme
- from sOpenSong import OpenSong
- from sEnterText import EnterText
- from sLoadSound import LoadSound
- from sPing import Ping
- from sWifi import Wifi
- from sDefender import Defender
- from sCalculator import Calculator
- from sAbout import About
- from sUpdate import Update
- from sSelectFolder import SelectFolder
- from sNewDir import NewDir
- from sWifiSSID import WifiSSID
- from sDeleteSound import DeleteSound
-
- #====================================
-
- State = type("State", (object,), {})
- #====================================
- class State(object):
- def __init__(self, FSM):
- self.FSM = FSM
- self.timer = 0
- self.startTime = 0
- def Enter(self):
- self.timer = 0
- self.startTime = 0
- def Execute(self):
- print('Executing')
- def Exit(self):
- print('Exiting')
-
-
- #====================================
-
-
- class Example(State):
- def __init__(self,FSM):
- super(Example, self).__init__(FSM)
-
- def Enter(self):
- self.FSM.stateLife = 1
- super(Example, self).Enter()
-
- def Execute(self):
- self.FSM.stateLife += 1
-
- def Exit(self):
- pass
-
- #====================================
-
- class Startup(State):
- def __init__(self,FSM):
- super(Startup, self).__init__(FSM)
-
- def Enter(self):
- self.FSM.stateLife = 1
- self.birth = time.perf_counter()
- super(Startup, self).Enter()
-
- def Execute(self):
- self.FSM.stateLife += 1
- print('startup state')
-
- if hasattr(self, 'birth'):
- pass
- else:
- self.birth = time.perf_counter()
-
- self.FSM.ToTransition('toIntro')
-
- def Exit(self):
- pass
-
- #====================================
-
- class Intro(State):
- def __init__(self,FSM):
- super(Intro, self).__init__(FSM)
-
- def Enter(self):
- self.FSM.stateLife = 1
- o = self.FSM.owner
- o.header_text = "Starting up..."
-
- o.draw.rectangle((0, 0, self.FSM.owner.width, self.FSM.owner.height), outline=0, fill=o.blue)
- #u.draw_header(o)
- #o.draw.rectangle((0, 0, o.width, o.height), outline=0, fill=o.blue)
- o.center_block("zpc_ct", o.h4, [0, 0, o.width, o.height-40], o.light_grey)
- o.center_block("Starting up...", o.h2, [0, 0, o.width, o.height+60], o.light_grey)
- #o.display_thread.start()
- o.update_display(0)
- #o.update_display(0)
- super(Intro, self).Enter()
-
- def Execute(self):
- self.FSM.stateLife += 1
- o = self.FSM.owner
- self.FSM.ToTransition('toLoadDefault')
-
- def Exit(self):
- pass
-
- #====================================
-
- class LoadDefault(State):
- def __init__(self,FSM):
- super(LoadDefault, self).__init__(FSM)
-
- def Enter(self):
- self.FSM.stateLife = 1
-
-
- o = self.FSM.owner
- o.init_slots()
- o.load_song()
-
-
-
- self.bank = 0
- self.sounds = []
- self.globbed = glob.glob('/home/pi/skull/*.wav') + glob.glob('/home/pi/skull/*.mp3')
- self.globbed.sort()
- obj_id = 0
-
- # for s in o.sconf['sounds']:
- # p1 = self.FSM.owner.SoundSlot(s, obj_id, o)
- # self.FSM.owner.soundSlots.append(p1)
- # obj_id += 1
-
- # _iter = 0
-
- # lst = ast.literal_eval(o.sconf['notes'][0])
- # print('length ', len(lst))
-
- # for n in o.soundSlots:
- # m = []
- # if _iter < (len(o.sconf.as_list('notes')) - 1):
- # lst = ast.literal_eval(o.sconf.as_list('notes')[_iter])
- # n.notes = lst
- # _iter += 1
-
- super(LoadDefault, self).Enter()
-
- def Execute(self):
- self.FSM.stateLife += 1
- self.FSM.ToTransition('toMain')
-
- def Exit(self):
- pass
-
- #====================================
-
- #====================================
-
- class PadPlayer(State):
- def __init__(self,FSM):
- super(PadPlayer, self).__init__(FSM)
-
- def Enter(self):
- self.FSM.stateLife = 1
- print('entering pad player')
- super(PadPlayer, self).Enter()
-
- def Execute(self):
- self.FSM.stateLife += 1
-
-
- _id = 0
- for k in self.FSM.owner.keyState:
- if _id < 16 and k == 1:
- self.FSM.owner.soundSlots[_id].play()
- _id += 1
- if self.FSM.owner.keys:
-
- print("Pressed: ", self.FSM.owner.keys)
- #self.FSM.ToTransition('toLand')
-
- def Exit(self):
- pass
-
- #====================================
-
- class SeqPlayer(State):
- def __init__(self,FSM):
- super(SeqPlayer, self).__init__(FSM)
-
- def Enter(self):
- self.FSM.stateLife = 1
- self.beat = 0
- self.FSM.owner.pub.register("beat", self)
- print('entering seq player')
- o = self.FSM.owner
- o.draw.rectangle((0, 0, o.width, o.height), outline=0, fill=o.blue)
- o.draw.text((20, 0), 'SeqPlayer', font=o.h1, fill="#FFFFFF")
- o.update_display(0)
- super(SeqPlayer, self).Enter()
-
- def Execute(self):
- self.FSM.stateLife += 1
- o = self.FSM.owner
-
- if o.keyState[12] == 1:
- o.start_playback()
- u.play_seq(o, [o.curPattern, 0])
- if o.keyState[13] == 1:
- o.stop_playback()
- #self.beat = o.playhead
- #print('key0 ', o.keyState[16])
- if o.keyState[16] == 2:
- #print('key0 ', o.keyState[16])
- if o.keyState[0] == 1:
- print('to main')
- self.FSM.ToTransition('toMain')
-
- def ReceiveMessage(self, message):
- #print(self.name, 'got message', message)
- o = self.FSM.owner
- o.draw.rectangle((0, 0, o.width, o.height), outline=0, fill=o.blue)
- o.draw.text((20, 0), str(message[0]) + ' - ' + str(message[1]), font=o.h1, fill="#FFFFFF")
- o.update_display(0)
- u.play_seq(o, message)
-
- def Exit(self):
- self.FSM.owner.pub.unregister("beat", self)
-
- #====================================
|