|
JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
|
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 | |
| AudioEngine & | operator= (const AudioEngine &)=delete |
| AudioEngine (AudioEngine &&)=delete | |
| AudioEngine & | operator= (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). | |
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.
|
strong |
| 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.
|
explicit |
Construit un moteur déjà muet, sans toucher au périphérique réel (tests, ForceMuted::Yes).
|
default |
|
delete |
|
delete |
|
inlinenodiscardnoexcept |
|
delete |
|
delete |
| 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.
| id | Identifiant préchargé par 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.
| id | Identifiant logique (ex. "saut"). Un second appel avec le même identifiant remplace la réserve précédente. |
| file | Chemin du fichier WAV. Un fichier absent ne fait pas échouer l'appel : la lecture ultérieure de cet identifiant restera silencieuse. |
| void hmi::AudioEngine::setVolume | ( | float | volume | ) |
Règle le volume global, appliqué immédiatement à tous les échantillons préchargés.
| volume | Volume 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). |
|
inlinenodiscardnoexcept |
|
private |
|
private |
|
private |
|
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).