I forgot to mention about OpenAL, this demo uses snapshot of my (always-)work-in-progress engine that normally goes with an installer, but in single-exe mode it doesn't install anything.
@Hodgman, you are correct, there are 4 cube-maps pre-rendered at somewhere near center of each room. Edge artifacts can't be eliminated because cube-map contains limited information about scene and using different AABB's size produces some discontinuities in projection.
@Exorcist, that Ati method sounds very much the same, I've searched current SDK (and that from 2006) and archives but I couldn't find anything similar. Do you remember year (or target hardware) of that demo? (Speaking of Ati, I remember "treasure chest" demo that comes with 8500 model, there was some magical vector passed as fourth component in their env-mapping code, but I don't think that's it)
@Krypt0n, that demo is nVidia only, I will try that at work tomorrow
To explain my (or Ati's :) ) technique I've prepared an image:

where, S is sample point, and Bmin/max defines our AABB (these are 3 extra constants you have to provide). The key is to find PB. Fortunately when using AABB, this can be quickly solved (without digging into math) using this code:
float3 dir = WrlPos - CamPos;
float3 rdir = reflect(dir, WrlTexNorm);
//BPCEM
float3 nrdir = normalize(rdir);
float3 rbmax = (EnvBoxMax - WrlPos)/nrdir;
float3 rbmin = (EnvBoxMin - WrlPos)/nrdir;
float3 rbminmax = (nrdir>0.0f)?rbmax:rbmin;
float fa = min(min(rbminmax.x, rbminmax.y), rbminmax.z);
float3 posonbox = WrlPos + nrdir*fa;
rdir = posonbox - EnvBoxPos;
//PBCEM end
float3 env = texCUBE(envMap, rdir);of course using AABB is not the most convenient way, but most of the scenes (at least in architectural presentations) can be described/approximated as set of AABB. Or you can use more complex description at cost of additional instructions (OBB? half-spaces? distance-maps?)
//edit: fixing code box after forum upgrade