JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
hmi::AudioEngine Class Reference

Lecture d'échantillons courts à faible latence, avec volume global et repli muet. More...

#include <AudioEngine.h>

Classes

struct  Sample

Public Types

enum class  ForceMuted { Yes }
 Étiquette du constructeur qui force l'état « muet », sans tenter d'ouvrir de périphérique — réservé aux tests : le comportement en l'absence de périphérique doit être vérifiable sans dépendre du matériel audio réel de la machine qui exécute les tests. More...

Public Member Functions

 AudioEngine ()
 Ouvre le périphérique de sortie par défaut.
 AudioEngine (ForceMuted)
 Construit un moteur déjà muet, sans toucher au périphérique réel (tests, ForceMuted::Yes).
 ~AudioEngine ()
 AudioEngine (const AudioEngine &)=delete
AudioEngineoperator= (const AudioEngine &)=delete
 AudioEngine (AudioEngine &&)=delete
AudioEngineoperator= (AudioEngine &&)=delete
bool muted () const noexcept
void setVolume (float volume)
 Règle le volume global, appliqué immédiatement à tous les échantillons préchargés.
float volume () const noexcept
void preload (const std::string &id, const std::filesystem::path &file)
 Précharge un échantillon sous un identifiant logique.
void play (const std::string &id)
 Joue l'échantillon préchargé sous cet identifiant.

Private Attributes

std::unordered_map< std::string, Sample_samples
float _volume = 1.0f
bool _muted = false

Static Private Attributes

static constexpr std::size_t MAX_INSTANCES_PER_EVENT = 3
 Nombre d'instances préchargées par événement — plafonne le recouvrement audible d'un même son déclenché en rafale, sans l'empêcher complètement (TACHE-02).

Detailed Description

Lecture d'échantillons courts à faible latence, avec volume global et repli muet.

Enveloppe fine autour de QSoundEffect (Qt Multimedia) : ouverture du périphérique de sortie à la construction, un QSoundEffect par échantillon préchargé, arrêt propre à la destruction (RAII, EX-NFR-041). Aucune exception ne franchit cette frontière (EX-NFR-040) : un périphérique absent, un fichier introuvable ou une lecture demandée alors que le moteur est « muet » ne font jamais rien de plus qu'un avertissement journalisé une seule fois.

Aucune dépendance dans Core : cette classe vit exclusivement dans HMI (EX-ARCH-012, EX-NFR-010). La simulation expose des transitions d'état ; c'est ce moteur, piloté par HMI/Audio/SoundTriggers (LOT-60 TACHE-03), qui décide qu'une transition fait du bruit.

Member Enumeration Documentation

◆ ForceMuted

enum class hmi::AudioEngine::ForceMuted
strong

Étiquette du constructeur qui force l'état « muet », sans tenter d'ouvrir de périphérique — réservé aux tests : le comportement en l'absence de périphérique doit être vérifiable sans dépendre du matériel audio réel de la machine qui exécute les tests.

Enumerator
Yes 

Constructor & Destructor Documentation

◆ AudioEngine() [1/4]

hmi::AudioEngine::AudioEngine ( )

Ouvre le périphérique de sortie par défaut.

Un échec (aucun périphérique) place le moteur en état muet et journalise un avertissement une seule fois — jamais une exception.

◆ AudioEngine() [2/4]

hmi::AudioEngine::AudioEngine ( ForceMuted )
explicit

Construit un moteur déjà muet, sans toucher au périphérique réel (tests, ForceMuted::Yes).

◆ ~AudioEngine()

hmi::AudioEngine::~AudioEngine ( )
default

◆ AudioEngine() [3/4]

hmi::AudioEngine::AudioEngine ( const AudioEngine & )
delete

◆ AudioEngine() [4/4]

hmi::AudioEngine::AudioEngine ( AudioEngine && )
delete

Member Function Documentation

◆ muted()

bool hmi::AudioEngine::muted ( ) const
inlinenodiscardnoexcept
Returns
true si le moteur ne produira aucun son (périphérique absent, ou forcé pour les tests).

◆ operator=() [1/2]

AudioEngine & hmi::AudioEngine::operator= ( AudioEngine && )
delete

◆ operator=() [2/2]

AudioEngine & hmi::AudioEngine::operator= ( const AudioEngine & )
delete

◆ play()

void hmi::AudioEngine::play ( const std::string & id)

Joue l'échantillon préchargé sous cet identifiant.

Sans effet si le moteur est muet, si id n'a jamais été préchargé, ou si le fichier associé n'a pas pu être chargé — jamais une erreur pour l'appelant (EX-NFR-040). Choisit une instance parmi la réserve préchargée (tourniquet) : un même événement déclenché plus de MAX_INSTANCES_PER_EVENT fois dans le même instant réutilise la plus ancienne plutôt que d'empiler indéfiniment des lectures superposées.

Parameters
idIdentifiant préchargé par preload.

◆ preload()

void hmi::AudioEngine::preload ( const std::string & id,
const std::filesystem::path & file )

Précharge un échantillon sous un identifiant logique.

À appeler au démarrage pour chaque son du catalogue (HMI/Audio/SoundCatalog, TACHE-02) : QSoundEffect charge son fichier de façon asynchrone, jouer immédiatement après construction ne produit rien. Précharger ici, jamais au premier déclenchement. Prépare en réalité MAX_INSTANCES_PER_EVENT échantillons identiques (une petite réserve), pour qu'un même événement déclenché en rafale se recouvre sans s'interrompre lui-même de façon audible.

Parameters
idIdentifiant logique (ex. "saut"). Un second appel avec le même identifiant remplace la réserve précédente.
fileChemin du fichier WAV. Un fichier absent ne fait pas échouer l'appel : la lecture ultérieure de cet identifiant restera silencieuse.

◆ setVolume()

void hmi::AudioEngine::setVolume ( float volume)

Règle le volume global, appliqué immédiatement à tous les échantillons préchargés.

Parameters
volumeVolume voulu. Hors [0, 1], ramené à l'extrémité la plus proche — jamais propagé tel quel (une valeur négative ou explosée ne doit jamais atteindre QSoundEffect).

◆ volume()

float hmi::AudioEngine::volume ( ) const
inlinenodiscardnoexcept
Returns
Le volume global courant, toujours dans [0, 1].

Member Data Documentation

◆ _muted

bool hmi::AudioEngine::_muted = false
private

◆ _samples

std::unordered_map<std::string, Sample> hmi::AudioEngine::_samples
private

◆ _volume

float hmi::AudioEngine::_volume = 1.0f
private

◆ MAX_INSTANCES_PER_EVENT

std::size_t hmi::AudioEngine::MAX_INSTANCES_PER_EVENT = 3
staticconstexprprivate

Nombre d'instances préchargées par événement — plafonne le recouvrement audible d'un même son déclenché en rafale, sans l'empêcher complètement (TACHE-02).


The documentation for this class was generated from the following files:
  • /home/runner/work/JustAnotherDnDGame/JustAnotherDnDGame/Source/HMI/Audio/AudioEngine.h
  • /home/runner/work/JustAnotherDnDGame/JustAnotherDnDGame/Source/HMI/Audio/AudioEngine.cpp