Skip to content

Audio (DirectSound + WAV)#

Purpose#

DirectSound initialization, WAV loading via MMIO, streaming playback with multimedia timer callbacks.

Key entry points#

Symbol Address Role
lotr2_audio_init_directsound 0x42fc90 DirectSoundCreate, primary buffer
lotr2_audio_lpds 0x4ef810 IDirectSound* global
lotr2_audio_dsound_hr 0x531028 HRESULT for vtable calls
lotr2_audio_load_wav_mmio 0x4d4110 mmioOpenA / RIFF-WAVE load
lotr2_audio_parse_wav_chunk 0x4d43ea Parse fmt chunk
lotr2_audio_create_buffer_from_wav 0x4306b4 Create secondary buffer from WAV
lotr2_audio_start_stream_timer 0x430d12 timeSetEvent playback pump
lotr2_audio_stop_stream_timer 0x430e91 timeKillEvent
lotr2_audio_stream_timer_proc 0x401cdf Timer callback address
lotr2_audio_play_wav 0x431b10 One-shot WAV playback (SFX / speech)
lotr2_audio_load_wav_file 0x4d467f Load WAV into GlobalAlloc buffers
lotr2_audio_mmio_read_chunk 0x4d4482 Read WAVE data chunk via MMIO
lotr2_audio_buffer_is_playing 0x431e1b Query secondary buffer play status
lotr2_audio_release_secondary_buffer 0x431e99 Stop + release one-shot buffer
lotr2_audio_start_stream_from_name 0x43052d Start streaming channel from path
lotr2_audio_hresult_to_code 0x431ef2 Map DSERR HRESULTs to error codes
lotr2_audio_dsb_playback 0x53102c IDirectSoundBuffer* for one-shot playback
lotr2_audio_shutdown_directsound 0x42feb5 Release DirectSound; stop streams and preloaded slots
lotr2_audio_init_primary_waveformat 0x42ff6d Seed primary-buffer WAVEFORMATEX
lotr2_audio_preload_wav_bank 0x42ffcb Load path table into preloaded SFX slots
lotr2_audio_play_preloaded 0x4302a0 Play preloaded slot if not already playing
lotr2_audio_restart_preloaded 0x430396 Stop + replay preloaded slot
lotr2_audio_play_preloaded_slot 0x43044f Wrapper around lotr2_audio_play_preloaded
lotr2_audio_release_preloaded 0x43046b Stop + release preloaded slot buffer
lotr2_audio_stop_preloaded 0x4304e0 Stop preloaded slot without release
lotr2_audio_stream_channel_enabled 0x43062c Stream channel enable gate
lotr2_audio_stream_refill 0x430f55 Streaming buffer refill from MMIO WAV

Dependencies#

  • dsound.dllDirectSoundCreate
  • winmm.dllmmioOpenA, mmioRead, timeSetEvent, timeKillEvent
  • io/MODULE.md — alternate raw file reads for some .wav

Data files#

  • *.wav — sound effects and speech (e.g. ff_msg.wav, s080_01.wav)

Open questions#

  • Two streaming channels (DAT_00531020 / DAT_005310e0 arrays, size 2).