[openal] OpenAL soft on win32: AL lib: (EE) ALCmmdevPlayback_open: Device init failed: 0x80004005
chris.kcat at gmail.com
Mon Oct 13 09:19:20 EDT 2014
On 10/12/2014 11:29 AM, Chris Robinson wrote:
> Looking at cAudio's source for the fromUTF8 method, though, it seems a
> bit iffy to me.
> It first converts the UTF-8 string to a WideChar string using Windows'
> MultiByteToWideChar function, then it tries to convert the WideChar
> string back to a multi-byte string using wcstombs (and for added
> confusion, cAudioString may be a basic_string<wchar_t> if UNICODE or
> _UNICODE is set, so it gets converted back to a WideChar string again;
> also, it leaks the 'convert' buffer).
> The problem here is that wcstombs does the conversion based on the
> current locale, and also stops converting when it encounters a character
> that can't be represented in that locale. So if the locale is set to
> something that can't handle some characters in the device name, cAudio
> will truncate the name, and so won't get recognized.
Thinking about it more, I think there may even be a more serious issue
with cAudio here. If the locale isn't UTF-8, the byte representation of
the characters may be different. So even if it successfully converts all
characters from UTF-8 to the current locale, specifying that converted
string as a device name can still fail since it may not match what
OpenAL Soft originally gave it.
So either cAudioString needs to store UTF-8 strings (recommended, for
previously specified reasons), or it at least needs to convert back to
UTF-8 before passing it back to alcOpenDevice.
More information about the openal