Main Menu

Open GL/AL drivers and crashes on Win7

Started by margotbean, July 28, 2014, 10:24:24 PM

Previous topic - Next topic

margotbean

I was having constant problems with the game freezing and crashing, always with the message that the OpenAL drivers had stopped responding.  I had applied the Win7 patch that comes with the game, so I was confused and more than a bit frustrated.  I gave up on finishing the game, and that was years ago. 

Recently, I decided to revisit the game.  I tried saving frequently, and that helped, but I couldn't get through many of the extra-long cutscenes without a freeze.

After each instance of the driver not responding, Windows 7 asked me if I wanted it to search for a solution to the problem.  I never said "yes" before.  Windows sucks, compatibility mode is useless, and I thought this would be more of the same.  However, today I said "yes, go ahead and search."  The dialog indicated it was searching, then it disappeared with no messages.  I figured it gave up.

I restarted the game, and lo and behold, I found no freezing or crashes!  When I looked up "programs & features" (from the Start Menu) I saw that "OpenAL" had been installed. 

I can't tell you any more than that.  How the patch differs from what Windows did, I can't say.  I just thought I would post this for others experiencing the same chronic driver problems.  Go ahead and let the Operating System try to fix it. 

thx.  ;)

k3n

Assuming OpenAL is already installed, the problem is more likely the underlying audio device driver since OpenAL is simply a wrapper. Try updating your audio device drivers. Note instability may also be due to overclocking or bios bugs so try disabling overclocking and updating the bios. Also try Windows Update since Microsoft works with hardware vendors to address bugs.

and for those interested in debugging...

Task:
   Investigate actions of OpenAL installer:
Observed:
   No sys kernel driver files were installed so openal must be a wrapper. The file name "wrap_oal.dll" also supports this hypothesis.
   Details:
      Ran process monitor while running oalinst.exe
         http://openal.org/creative-installers/oalinst.zip
         http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx
      Found CreatedFile where Result=SUCCESS and Path excludes .tmp and .new:
         C:\Program Files (x86)\OpenAL\oalinst.exe
         c:\windows\system32\openal32.dll
         c:\windows\system32\wrap_oal.dll
         C:\windows\SysWOW64\openal32.dll
         C:\windows\SysWOW64\wrap_oal.dll
      Found RegCreateKey:
         HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\OpenAL
         HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\OpenALW
            "DisplayIcon"="C:\\Program Files (x86)\\OpenAL\\oalinst.exe"
            "UninstallString"="\"C:\\Program Files (x86)\\OpenAL\\oalinst.exe\" /U"
            "DisplayName"="OpenAL"

Task:
   Investigate wrap_oal.dll imports
Observed:
   wrap_oal.dll is the wave output wrapper based on winmm.dll.
   Details:
      Ran
         powershell.exe "get-command c:\windows\system32\wrap_oal.dll | format-list"
         dumpbin.exe /imports c:\windows\system32\wrap_oal.dll
            Note dumpbin.exe requires developer command prompt for microsoft visual studio
      wrap_oal.dll dll imports (dll filename "FileDescription" and noteworthy functions):
         kernel32.dll "Windows NT BASE API Client DLL"
         winmm.dll "OpenAL32"
            waveOutGetNumDevs
            waveOutWrite
            waveOutReset
            waveOutUnprepareHeader
            waveOutPrepareHeader
            waveOutOpen
            waveOutClose
         user32.dll "Multi-User Windows USER API Client DLL"
         ole32.dll "Microsoft OLE for Windows"

Task:
   Investigate winmm.dll waveOutOpen
Observed:
   Wave out devices enumerated are the sound playback devices in the ready or default device state (not headphone in the not plugged in state)
   Code:
#include "windows.h"
#include "mmsystem.h"
#include <iostream>
#include "stdafx.h"
#pragma comment(lib, "winmm.lib")
using namespace std;
int _tmain(int argc, _TCHAR* argv[]) {
   UINT count = waveOutGetNumDevs();
   for (UINT i=0; i < count; ++i)    {
      WAVEOUTCAPS caps;
      MMRESULT result = waveOutGetDevCaps( i, &caps, sizeof(caps) );
      wcout << TEXT("Manufacturer ID: ") << caps.wMid << endl << \
      TEXT("Product ID: ") << caps.wPid << endl << \
      TEXT("Driver Version: ") << caps.vDriverVersion << endl << \
      TEXT("Name: ") << caps.szPname << endl << \
      TEXT("Formats: ") << caps.dwFormats << endl << \
      TEXT("Channels: ") << caps.wChannels << endl << \
      TEXT("Support: ") << caps.dwSupport << endl << \
      endl;      
   }
   return 0;
}

Task:
   Enumerate sound devices
Observed:
   Found Description, DeviceID, DriverName, DriverDate, DriverProvider, DriverVersion, HardWareID for installed sound (media) devices.
   Ran:
      wmic.exe path Win32_PNPSignedDriver where DeviceClass='media' get /all /format:list
Description=High Definition Audio Device
DeviceClass=MEDIA
DeviceID=HDAUDIO\FUNC_01&amp;VEN_10EC&amp;DEV_0889&amp;SUBSYS_14627642&amp;REV_1000\4&amp;8D2B461&amp;0&amp;0201
DeviceName=High Definition Audio Device
DriverDate=20130625000000.******+***
DriverName=HdAudio.sys
DriverProviderName=Microsoft
DriverVersion=6.2.9200.16653

Description=AMD High Definition Audio Device
DeviceClass=MEDIA
DeviceID=HDAUDIO\FUNC_01&amp;VEN_1002&amp;DEV_AA01&amp;SUBSYS_00AA0100&amp;REV_1002\5&amp;3911D606&amp;0&amp;0001
DeviceName=AMD High Definition Audio Device
DevLoader=
DriverDate=20130320000000.******+***
DriverName=AtihdW86.sys
DriverProviderName=Advanced Micro Devices
DriverVersion=8.0.0.8811

Note the Microsoft driver is actually being used for VEN_10EC&amp;DEV_0889 which is really a Realtek HD Audio device.

Thus if I  were having audio problems I would update my AMD & Realtek audio drivers.