diff --git a/__init__.py b/__init__.py index 3a5e696..0a54971 100755 --- a/__init__.py +++ b/__init__.py @@ -124,6 +124,12 @@ def speak(text, interupt = True): s.speak(text, interrupt=True) +def check_for_exit(): + for event in pygame.event.get(): + if event.type == pygame.KEYDOWN and event.key in [pygame.K_ESCAPE, pygame.K_q]: + exit_game() + pygame.event.pump() + def exit_game(): if speechProvider == "speechd": spd.close() pygame.mixer.music.stop() @@ -154,18 +160,19 @@ def initialize_gui(gameTitle): pygame.mixer.set_num_channels(32) # Reserve the cut scene channel pygame.mixer.set_reserved(0) - # Load sounds from the sound directory and creates a list like that {'bottle': 'bottle.ogg'} + # Load sounds from the sound directory and creates a list like {'bottle': 'bottle.ogg'} try: soundFiles = [f for f in listdir("sounds/") if isfile(join("sounds/", f)) and (f.split('.')[1].lower() in ["ogg","wav"])] - #lets make a dict with pygame.mixer.Sound() objects {'bottle':} - soundData = {} - for f in soundFiles: - soundData[f.split('.')[0]] = pygame.mixer.Sound("sounds/" + f) - soundData['game-intro'].play() - time.sleep(soundData['game-intro'].get_length()) - return soundData except Exception as e: - return False + print("No sounds found.") + speak("No sounds found.", False) + #lets make a dict with pygame.mixer.Sound() objects {'bottle':} + soundData = {} + for f in soundFiles: + soundData[f.split('.')[0]] = pygame.mixer.Sound("sounds/" + f) + soundData['game-intro'].play() + time.sleep(soundData['game-intro'].get_length()) + return soundData def generate_tone(frequency, duration=0.1, sample_rate=44100, volume = 0.2): t = np.linspace(0, duration, int(sample_rate * duration), False) @@ -178,23 +185,27 @@ def generate_tone(frequency, duration=0.1, sample_rate=44100, volume = 0.2): def x_powerbar(): clock = pygame.time.Clock() - position = -50 - direction = 1 + position = -50 # Start from the leftmost position + direction = 1 # Move right initially while True: frequency = 440 # A4 note - left_volume = (position + 50) / 100 - right_volume = (50 - position) / 100 + left_volume = (50 - position) / 100 + right_volume = (position + 50) / 100 tone = generate_tone(frequency) channel = tone.play() channel.set_volume(left_volume, right_volume) for event in pygame.event.get(): if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE: channel.stop() - return position + return position # This will return a value between -50 and 50 position += direction - if position >= 50 or position <= -50: - direction *= -1 - clock.tick(45) # Speed of bar + if position > 50: + position = 50 + direction = -1 + elif position < -50: + position = -50 + direction = 1 + clock.tick(40) # Speed of bar def y_powerbar(): clock = pygame.time.Clock() @@ -211,7 +222,8 @@ def y_powerbar(): power += direction if power >= 100 or power <= 0: direction *= -1 # Reverse direction at limits - clock.tick(45) + check_for_exit() + clock.tick(40) def cut_scene(sounds, soundName): pygame.event.clear() @@ -274,6 +286,22 @@ def obj_stop(x): except: return x +def play_ambiance(sounds, soundNames, probability, randomLocation = False): + # Check if any of the sounds in the list is already playing + for soundName in soundNames: + if pygame.mixer.find_channel(True) and pygame.mixer.find_channel(True).get_busy(): + return + if random.randint(1, 100) > probability: + return + # Choose a random sound from the list + ambianceSound = random.choice(soundNames) + channel = sounds[ambianceSound].play() + if randomLocation and channel: + left_volume = random.random() + right_volume = random.random() + channel.set_volume(left_volume, right_volume) + return channel # Return the channel object for potential further manipulation + def play_random(sounds, soundName, pause = False, interrupt = False): key = [] for i in sounds.keys(): @@ -343,7 +371,7 @@ def learn_sounds(sounds): loop = True pygame.mixer.music.pause() i = 0 - soundFiles = [f for f in listdir("sounds/") if isfile(join("sounds/", f)) and (f.split('.')[1].lower() in ["ogg","wav"]) and (f.split('.')[0].lower() not in ["game-intro", "music_menu"])] + soundFiles = [f for f in listdir("sounds/") if isfile(join("sounds/", f)) and (f.split('.')[1].lower() in ["ogg","wav"]) and (f.split('.')[0].lower() not in ["game-intro", "music_menu"]) and (not f.lower().startswith("_"))] # j keeps track of last spoken index so it isn't voiced on key up. j = -1 while loop == True: