Ten moduł zapewnia lekką warstwę zarządzania dźwiękiem opartą na Web Audio API. Obsługuje:
Jest przeznaczony do środowisk przeglądarkowych, w których odtwarzanie audio musi zostać odblokowane poprzez interakcję użytkownika.
Tworzenie → Aktualizacja → Zniszczenie
Tworzenie (createAudioState)
AudioContextGainNode do kontroli głośności muzykiAktualizacja (użycie w czasie działania)
loadAudio)Zniszczenie
Wymagałoby ręcznego czyszczenia:
AudioContext.close()musicSource, połączenia musicGain)createAudioState(): AudioStateInicjalizuje i zwraca stan systemu audio.
AudioContextGainNode dla wyjścia muzykiloadAudio(state, name, url): Promise<void>Ładuje plik audio i przechowuje go w pamięci.
AudioBufferstate.buffers pod nameplaySound(state, name): voidOdtwarza jednorazowy efekt dźwiękowy.
playMusic(state, name, volume?): voidOdtwarza zapętloną muzykę tła.
musicGain do kontroli głośnościstate.musicSourcestopMusic(state): voidZatrzymuje aktualnie odtwarzaną muzykę.
AudioBufferSourceNodemusicSourcesetMusicVolume(state, volume): voidDostosowuje globalną głośność muzyki.
GainNode.gain.valueplayMusicAfterGesture(state, name, volume?): Promise<void>Zapewnia, że audio jest odblokowane przed odtworzeniem muzyki.
AudioContext, jeśli to konieczneNowoczesne przeglądarki blokują audio do momentu wystąpienia gestu użytkownika. Ten moduł obsługuje to poprzez:
Jednorazowe listenery na:
clickkeydownPrzy pierwszej interakcji:
AudioContext, jeśli jest wstrzymanystate.unlocked = trueMap<string, AudioBuffer>Odtwarzanie muzyki używa dedykowanego łańcucha sygnału:
AudioBufferSourceNode → GainNode (musicGain) → AudioContext.destination
Pozwala to na scentralizowaną kontrolę głośności tylko muzyki, bez wpływu na efekty dźwiękowe.
playSound
playMusic
const audio = createAudioState();
await loadAudio(audio, "click", "/sounds/click.mp3");
await loadAudio(audio, "bgm", "/music/theme.mp3");
// Odtwórz efekt dźwiękowy
playSound(audio, "click");
// Uruchom muzykę tła
playMusic(audio, "bgm", 0.5);
// Dostosuj głośność później
setMusicVolume(audio, 0.2);
// Zatrzymaj muzykę
stopMusic(audio);
AudioContext, AudioBuffer, GainNode)