def setup(): global eventBus eventBus = EventBus() global soundHandler soundHandler = SoundHandler() eventBus.addCoinCollectedListener(soundHandler) eventBus.addKeyCollectedListener(soundHandler) eventBus.addDoorOpeningListener(soundHandler) eventBus.addPlayerFootstepListener(soundHandler) eventBus.addMapTransitionListener(soundHandler) eventBus.addEndGameListener(soundHandler) eventBus.addLifeLostListener(soundHandler) eventBus.addWaspZoomingListener(soundHandler) eventBus.addBeetleCrawlingListener(soundHandler) eventBus.addCheckpointReachedListener(soundHandler) eventBus.addPlayerFallingListener(soundHandler) eventBus.addBladesStabbingListener(soundHandler) eventBus.addBoatMovingListener(soundHandler) eventBus.addTitleShownListener(soundHandler) eventBus.addGameStartedListener(soundHandler) global registryHandler registryHandler = RegistryHandler() eventBus.addCoinCollectedListener(registryHandler) eventBus.addKeyCollectedListener(registryHandler) eventBus.addDoorOpenedListener(registryHandler) eventBus.addBoatStoppedListener(registryHandler) eventBus.addCheckpointReachedListener(registryHandler) global musicPlayer musicPlayer = MusicPlayer()
def __init__(self): # APPLICATION VARIABLES self._volume = 100 self._cur_time = 0 self._max_time = 0 self._repeat = False # PLAYLIST self.playlist = Playlist() # GUI self.qapp = QApplication([]) self.mainwindow = MainWindow(self) # MUSIC PLAYER self.player = MusicPlayer(self)
parser.add_argument( "--duration", type=is_valid_duration, default=60, help= "How long to take to transition from the start to end volume, in seconds. Default is 60." ) parser.add_argument("--shuffle", action="store_true", help="Whether to shuffle the playlist.") args = parser.parse_args() if args.start_volume > args.end_volume: raise argparse.ArgumentTypeError( "The start volume must be less than or equal to the end volume.") print("Alarm will ring at " + args.time + ".") wait_until(args.time) print("Alarm ringing!") music_player = MusicPlayer() for dir in args.song_dirs: music_player.enqueue_dir(dir) music_player.play(start_volume=args.start_volume, end_volume=args.end_volume, duration=args.duration, shuffle=args.shuffle)
def __init__(self): log(message="Initializing...") # local_payload_cache uses mac_id ("address") as key, with the value being a dictionary of mac_id and datetime value of last time the api was pinged. # Cache is only used if use_cache is set to True in config.py self.local_payload_cache = {} self.music_player = MusicPlayer() self.waiting_for_input = False self.input_timeout() log(message="Waiting for tcpdump to provide input...") while True: # handle input as network traffic from tcpdump addresses = get_MAC(line=stdin.readline()) self.waiting_for_input = False for address in addresses: ## Pings Hummingbird Django server. If use_cache is set to True, use self.local_payload_cache as a cache. if config.use_cache: if address.lower() in self.local_payload_cache: # payload is a tuple of address and last_checked_datetime payload = self.local_payload_cache[address.lower()] # Set a cache for cache_time_seconds (defaults to 60 seconds) if (datetime.datetime.now() - payload['last_sent_dt'] ).seconds > config.cache_time_seconds: r = requests.get( "http://127.0.0.1:8000/hummingbird/build_user_from_device/", params=payload) payload['last_sent_dt'] = datetime.datetime.now() self.local_payload_cache[address.lower()] = payload cached = False else: cached = True else: payload = { 'mac_id': address.lower(), 'last_sent_dt': datetime.datetime.now() } self.local_payload_cache[address.lower()] = payload r = requests.get( "http://127.0.0.1:8000/hummingbird/build_user_from_device/", params=payload) cached = False else: payload = { 'mac_id': address.lower(), 'last_sent_dt': datetime.datetime.now() } r = requests.get( "http://127.0.0.1:8000/hummingbird/build_user_from_device/", params=payload) cached = False ## Convert the string representation of a dicitonary with user info into a dictionary object. user_dict = r.json() if not cached and user_dict != 0: user = User(system=self, name=user_dict['name'], song=user_dict['song'], length=float(user_dict['length']), arrival=datetime.datetime.strptime( user_dict['last_played'], '%Y-%m-%d %H:%M:%S')) # play the user's song (if theirs hasn't played already) # if user.song != settings.DO_NOT_PLAY and user.has_not_played_today(): if user.has_not_played_today(): if not is_unknown_user( name=user.name) or config.play_unknowns: log(message="Detected activity from {name}.". format(name=user.name)) user.queue_song(music_player=self.music_player) updated = requests.get( "http://127.0.0.1:8000/hummingbird/update_last_played/", params=payload)
def get_player(self, guild: Guild) -> MusicPlayer: if guild.id not in self.players: self.players[guild.id] = MusicPlayer(self.bot, guild) return self.players[guild.id]
def __init__(self, level, notes, goal_values, gear_values, **kwargs): super(LevelEasyMediumScreen, self).__init__(**kwargs) # set up notes for the level self.notes = notes # set up gear values for the levels self.goal_values = goal_values # set up gear values for the levels self.gear_values = gear_values self.level = level # only turn on tutorial for level 1 if self.level == 1: self.use_tutorial = True self.tutorial_screen = 'A' self.goal_play_status = None self.gear_play_status = None self.size_dim = min(Window.width / 6, Window.height / 6) self.tutorial_full_overlay = CRectangle(cpos=(Window.width / 2, Window.height / 2), csize=(Window.width, Window.height)) self.tutorial_options_overlay = Rectangle( pos=(0, 0), size=(Window.width, self.size_dim + Window.height / 25)) self.tutorial_musicbox_overlay = Rectangle( pos=(Window.width // 2, self.size_dim + Window.height / 25), size=(Window.width / 2, Window.height - (self.size_dim + Window.height / 25))) self.tutorial_gearbox_overlay = Rectangle( pos=(0, self.size_dim + Window.height / 25), size=(Window.width / 2, Window.height - (self.size_dim + Window.height / 25))) self.skip_image = CoreImage('images/skip_tutorial.png') self.tutorial_skip_button = Rectangle( pos=(0.98 * Window.width - (self.skip_image.width * self.size_dim / 300), 0.98 * Window.height - self.skip_image.height * self.size_dim / 300), size=(self.skip_image.width * self.size_dim / 300, self.skip_image.height * self.size_dim / 300), texture=self.skip_image.texture) else: self.use_tutorial = False ############################################ ### GOAL MUSIC ### ############################################ self.goal_audio = Audio(2) self.goal_synth = Synth('./data/FluidR3_GM.sf2') # create TempoMap, AudioScheduler self.goal_tempo_map = SimpleTempoMap(120) self.goal_sched = AudioScheduler(self.goal_tempo_map) # connect scheduler into audio system self.goal_audio.set_generator(self.goal_sched) self.goal_sched.set_generator(self.goal_synth) # generate goal music self.goal_music = MusicPlayer(notes=self.notes, sched=self.goal_sched, synth=self.goal_synth, channel=1, tempo_map=self.goal_tempo_map) self.goal_music.update_tempo(self.goal_values[0]) self.goal_music.update_instrument(self.goal_values[1]) self.goal_music.update_pitch(self.goal_values[2]) self.goal_music.update_volume(self.goal_values[3]) self.goal_music_seq = self.goal_music.generate() ############################################ ### GEAR MUSIC ### ############################################ self.gear_audio = Audio(2) self.gear_synth = Synth('./data/FluidR3_GM.sf2') # create TempoMap, AudioScheduler self.gear_tempo_map = SimpleTempoMap(120) self.gear_sched = AudioScheduler(self.gear_tempo_map) # connect scheduler into audio system self.gear_audio.set_generator(self.gear_sched) self.gear_sched.set_generator(self.gear_synth) # generate gear music self.gear_music = MusicPlayer(notes=self.notes, sched=self.gear_sched, synth=self.gear_synth, channel=1, tempo_map=self.gear_tempo_map) self.gear_music_seq = None ############################################ ### BACKGROUND UI COMPONENTS ### ############################################ self.gear_area = GearArea() self.canvas.add(self.gear_area) self.music_box_area = MusicBoxArea() self.canvas.add(self.music_box_area) self.options = LevelOptions( level=level, goal_music_seq=self.goal_music_seq, duration=self.goal_music.duration, edit_goal_play_status=self.edit_goal_play_status) self.canvas.add(self.options) self.label = Label(text=kwargs['name'], font_name='./fonts/PassionOne-Regular', color=(.165, .718, .792, 1)) self.add_widget(self.label) ########################################### ### GEAR LABELS ### ########################################### self.tempo_label = Label(text='Tempo (bpm)', font_name='./fonts/PassionOne-Regular', color=(0.7254901960784313, 0.5529411764705883, 0.8196078431372549, 1), center_x=(Window.width / 4), center_y=(Window.height / 5.25 * (0.5 + 0.5) + self.gear_area.position[1]), font_size=str(Window.width // 50) + 'sp') self.instrument_label = Label( text='Instrument', font_name='./fonts/PassionOne-Regular', color=(0.996078431372549, 0.8431372549019608, 0.4, 1), center_x=(Window.width / 4), center_y=(Window.height / 5.25 * (1.5 + 0.5) + self.gear_area.position[1]), font_size=str(Window.width // 50) + 'sp') self.pitch_label = Label(text='Pitch (semitones)', font_name='./fonts/PassionOne-Regular', color=(1.0, 0.6509803921568628, 0.09019607843137255, 1), center_x=(Window.width / 4), center_y=(Window.height / 5.25 * (2.5 + 0.5) + self.gear_area.position[1]), font_size=str(Window.width // 50) + 'sp') self.volume_label = Label( text='Volume', font_name='./fonts/PassionOne-Regular', color=(0.9254901960784314, 0.32941176470588235, 0.3176470588235294, 1), center_x=(Window.width / 4), center_y=(Window.height / 5.25 * (3.5 + 0.5) + self.gear_area.position[1]), font_size=str(Window.width // 50) + 'sp') self.add_widget(self.volume_label) self.add_widget(self.pitch_label) self.add_widget(self.instrument_label) self.add_widget(self.tempo_label) ########################################### ### GEAR CONSTRUCTION ### ########################################### self.gears = [] self.gear_centers = [] self.gears_group = AnimGroup() self.canvas.add(self.gears_group) ########################################### ### GEARS ### ########################################### self.gear_storage_locations = [] self.gear_music_locations = [] self.gear_labels = [] self.set_up_gears() ########################################### ### PARTICLE EFFECT ### ########################################### self.win_ps = ParticleSystem('particles/star_particle.pex') self.win_ps.emitter_x = Window.width / 2 self.win_ps.emitter_y = Window.height / 2 self.add_widget(self.win_ps) self.you_win_label = Label(text=' ', font_name='./fonts/PassionOne-Regular', color=(0.5843137254901961, 0.796078431372549, 0.37254901960784315, 1), center_x=Window.width / 2, center_y=Window.height / 2, font_size=str(Window.width // 10) + 'sp') self.add_widget(self.you_win_label) self.lose_ps = ParticleSystem('particles/lose_particle.pex') self.lose_ps.emitter_x = Window.width / 2 self.lose_ps.emitter_y = Window.height / 2 self.add_widget(self.lose_ps) self.you_lose_label = Label(text=' ', font_name='./fonts/PassionOne-Regular', color=(0.9254901960784314, 0.32941176470588235, 0.3176470588235294, 1), center_x=Window.width / 2, center_y=Window.height / 2, font_size=str(Window.width // 10) + 'sp') self.add_widget(self.you_lose_label) ########################################### ### ERROR MESSAGE ### ########################################### self.error_msg = Label(text=' ', font_name='./fonts/PassionOne-Regular', color=(0.9254901960784314, 0.32941176470588235, 0.3176470588235294, 1), center_x=Window.width / 2, center_y=Window.height / 2, font_size=str(Window.width // 20) + 'sp') self.add_widget(self.error_msg) # ########################################### # ### ADD TUTORIAL OVERLAYS ### # ########################################### if self.use_tutorial: self.canvas.add(Color(rgba=(0, 0, 0, 0.85))) self.canvas.add(self.tutorial_full_overlay) self.tutorial_label = Label( markup=True, text= "[font=./fonts/lato-bold]Welcome to the\n[/font] [font=./fonts/options-icons]|[/font] [font=./fonts/PassionOne-Regular]Play It By Gear Tutorial[/font] [font=./fonts/options-icons]|[/font] [font=./fonts/lato-bold]\n\nThe goal of this game is to make the \n goal song match the song you create by \nplacing the correct gears in a music box \n\n[/font] [font=./fonts/lato-light] (click to see the next \nstep of the tutorial)[/font]", color=(86 / 255, 189 / 255, 205 / 255, 1), center_x=Window.width / 2, center_y=Window.height / 2, font_size=str(Window.width // 40) + 'sp', halign='center') self.add_widget(self.tutorial_label) self.canvas.add(self.tutorial_skip_button) self.on_layout((Window.width, Window.height))