Started debuging sound settings

This commit is contained in:
Adastram 2024-01-10 20:37:04 +01:00
parent a86d89c563
commit e2671cb203
4 changed files with 43 additions and 13 deletions

View file

@ -1,7 +1,6 @@
# Classe animation adaptée depuis ESG Engine : # Classe animation adaptée depuis ESG Engine :
# https://github.com/yannis300307/ESG_Engine/blob/main/ESG_Engine/client/animation.py # https://github.com/yannis300307/ESG_Engine/blob/main/ESG_Engine/client/animation.py
import os import os
import pygame import pygame

View file

@ -38,7 +38,7 @@ class Engine:
self.event_sheduler = EventSheduler(self) self.event_sheduler = EventSheduler(self)
self.dialogs_manager = DialogsManager(self.event_handler) self.dialogs_manager = DialogsManager(self.event_handler)
self.menu_manager = MenuManager(self) self.menu_manager = MenuManager(self)
self.sound_manager = SoundManager(60) self.sound_manager = SoundManager()
def loop(self): def loop(self):
"""Fonction à lancer au début du programme et qui va lancer les updates dans une boucle. """Fonction à lancer au début du programme et qui va lancer les updates dans une boucle.
@ -57,7 +57,7 @@ class Engine:
self.event_handler.update() self.event_handler.update()
self.event_sheduler.update() self.event_sheduler.update()
self.dialogs_manager.update(0.016666666) self.dialogs_manager.update(0.016666666)
self.sound_manager.update(1/60) self.sound_manager.update(1/60, 100, 100, 100)
def stop(self): def stop(self):
"""Arrête le programme.""" """Arrête le programme."""

View file

@ -124,7 +124,7 @@ class Renderer:
True, (255, 0, 0)), (0, 30)) True, (255, 0, 0)), (0, 30))
self.window.blit(font.SysFont("Arial", 20).render(f"Zoom: {round(self.engine.camera.zoom, 2)}", self.window.blit(font.SysFont("Arial", 20).render(f"Zoom: {round(self.engine.camera.zoom, 2)}",
True, (255, 0, 0)), (0, 60)) True, (255, 0, 0)), (0, 60))
self.window.blit(font.SysFont("Arial", 20).render(f"Volume: {self.engine.sound_manager.music_get_volume()}, Pos: {self.engine.sound_manager.music_get_current_song_pos()}s, Index: {self.engine.sound_manager.music_current_index}, Paused: {self.engine.sound_manager.music_is_paused}", self.window.blit(font.SysFont("Arial", 20).render(f"Volume: {self.engine.sound_manager.music_get_volume()}, Pos: {self.engine.sound_manager.music_get_current_song_pos()}s, Index: {self.engine.sound_manager.music_current_index}, Paused: {self.engine.sound_manager.music_is_paused}, Shuffled: {self.engine.sound_manager.music_shuffle_playlist}",
True, (255, 0, 0)), (0, 90)) True, (255, 0, 0)), (0, 90))
self.window.blit(font.SysFont("Arial", 20).render(f"Track: {self.engine.sound_manager.music_current_song}", self.window.blit(font.SysFont("Arial", 20).render(f"Track: {self.engine.sound_manager.music_current_song}",
True, (255, 0, 0)), (0, 120)) True, (255, 0, 0)), (0, 120))

View file

@ -5,18 +5,22 @@ from math import sqrt
from time import time from time import time
class SoundManager: class SoundManager:
def __init__(self, music_base_volume: float): def __init__(self):
self.__tick = 0 # Compteur de la valeur d'un tick (Utilisé pour le comptage de tick) self.__tick = 0 # Compteur de la valeur d'un tick (Utilisé pour le comptage de tick)
self.tick = 0 # Compteur de tick self.tick = 0 # Compteur de tick
self.time = 0 # Temps local a la class (en s) self.time = 0 # Temps local a la class (en s)
self.music_master_volume = 60
self.sound_global_master_volume = 100
self.sound_master_volume = 100
self.music_playlist = [] self.music_playlist = []
self.music_current_song = "" self.music_current_song = ""
self.music_play_playlist = False self.music_play_playlist = False
self.music_current_index = 0 self.music_current_index = 0
self.music_shuffle_playlist = True self.music_shuffle_playlist = True
self.music_next_request = False self.music_next_request = False
self.music_set_volume(music_base_volume) self.music_set_volume(self.music_master_volume)
self.music_before_pause_pos = 0 self.music_before_pause_pos = 0
self.music_before_pause_song = "" self.music_before_pause_song = ""
@ -32,6 +36,16 @@ class SoundManager:
self.sound_hears_anchor = None self.sound_hears_anchor = None
self.do1 = True
self.do2 = True
self.do3 = True
self.do4 = True
self.music_add_to_playlist(".\\assets\\OST\\Vampire Killer.mp3")
self.music_add_to_playlist(".\\assets\\OST\\Hyrule Field - The Legend of Zelda Ocarina of Time.mp3")
self.music_add_to_playlist(".\\assets\\OST\\Lost Woods - The Legend of Zelda Ocarina of Time.mp3")
self.music_add_to_playlist(".\\assets\\OST\\Title Theme - The Legend of Zelda Ocarina of Time.mp3")
self.music_start_playlist()
def update(self, delta: float, music_master_volume: float, sound_global_master_volume: float, sound_master_volume: float): def update(self, delta: float, music_master_volume: float, sound_global_master_volume: float, sound_master_volume: float):
self.__tick += delta self.__tick += delta
self.tick = int(self.__tick / delta) self.tick = int(self.__tick / delta)
@ -65,15 +79,13 @@ class SoundManager:
sound.set_volume(max(0, int((round(sound_master_volume / 100 * max_volume / 100, 3)) - sqrt((pos_x - self.sound_hears_x) ** 2 + (pos_y - self.sound_hears_y) ** 2))) / (round(sound_master_volume / 100 * max_volume / 100, 3))) sound.set_volume(max(0, int((round(sound_master_volume / 100 * max_volume / 100, 3)) - sqrt((pos_x - self.sound_hears_x) ** 2 + (pos_y - self.sound_hears_y) ** 2))) / (round(sound_master_volume / 100 * max_volume / 100, 3)))
if self.music_play_playlist and not self.music_is_paused: # Musique de fond if self.music_play_playlist and not self.music_is_paused: # Musique de fond
if not mixer.music.get_busy() or self.music_next_request: if not mixer.music.get_busy():
if self.music_next_request:
self.music_next_request = False
mixer.music.fadeout(1)
if len(self.music_playlist) == 0: if len(self.music_playlist) == 0:
pass pass
elif self.music_current_song == "": elif self.music_current_song == "":
self.__music_play(self.music_playlist[0]) self.__music_play(self.music_playlist[0])
else: else:
if self.music_current_song in self.music_playlist: if self.music_current_song in self.music_playlist:
just_played_index = self.music_playlist.index(self.music_current_song) just_played_index = self.music_playlist.index(self.music_current_song)
@ -100,6 +112,25 @@ class SoundManager:
self.music_current_index = new_index self.music_current_index = new_index
self.__music_play(self.music_playlist[new_index]) self.__music_play(self.music_playlist[new_index])
if self.music_next_request:
self.music_next_request = False
mixer.music.fadeout(1)
if self.do1 and self.time > 5:
self.music_playlist_set_shuffle(False)
self.do1 = False
if self.do2 and self.time > 15:
self.music_next()
self.do2 = False
if self.do3 and self.time > 25:
self.music_pause()
self.do3 = False
if self.do4 and self.time > 35:
self.music_next()
self.do4 = False
def music_get_volume(self): def music_get_volume(self):
return mixer.music.get_volume() * 100 return mixer.music.get_volume() * 100
@ -108,7 +139,7 @@ class SoundManager:
"""Définit le nouveau volume de la musique""" """Définit le nouveau volume de la musique"""
mixer.music.set_volume((round(self.music_master_volume / 100 * new_volume / 100, 3))) mixer.music.set_volume((round(self.music_master_volume / 100 * new_volume / 100, 3)))
def music_pause(self, fade_s: float, restart_tolerance: float = 33): def music_pause(self, fade_s: float = 0, restart_tolerance: float = 33):
"""Met en pause la musique, la musique reprendra à la fin de la musique moin la tolérance (en pourcentage)""" """Met en pause la musique, la musique reprendra à la fin de la musique moin la tolérance (en pourcentage)"""
self.music_is_paused = True self.music_is_paused = True
self.music_before_pause_pos = self.music_get_current_song_pos() + fade_s * restart_tolerance / 100 # Récupère la position a laquelle le son doit reprendre lors du .resume() self.music_before_pause_pos = self.music_get_current_song_pos() + fade_s * restart_tolerance / 100 # Récupère la position a laquelle le son doit reprendre lors du .resume()
@ -116,7 +147,7 @@ class SoundManager:
mixer.music.fadeout(fade_s * 1000) mixer.music.fadeout(fade_s * 1000)
def music_resume(self, fade_s: float): def music_resume(self, fade_s: float = 0):
self.__music_play(self.music_before_pause_song, fade_s, self.music_before_pause_pos) self.__music_play(self.music_before_pause_song, fade_s, self.music_before_pause_pos)
self.music_before_pause_pos = 0 self.music_before_pause_pos = 0
self.music_before_pause_song = "" self.music_before_pause_song = ""