Exemple #1
0
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()
Exemple #2
0
    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)
Exemple #3
0
    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)
Exemple #4
0
    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)
Exemple #5
0
    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]
Exemple #6
0
    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))