OpenAL и Vista: устройство всегда «универсальное программное обеспечение» - PullRequest
4 голосов
/ 26 апреля 2010

Я пишу аудио часть игры и использую OpenAL. Я хочу использовать некоторые расширения, но тесты всегда терпят неудачу:

TRACE: AudioManager - Sound device: 'Generic Software'
TRACE: AudioManager - Enabling OpenAL extensions...
TRACE: AudioManager - Compressor support: NO
TRACE: AudioManager - Reverb support: YES
TRACE: AudioManager - Chorus support: NO
TRACE: AudioManager - Distortion support: NO
TRACE: AudioManager - Echo support: NO
TRACE: AudioManager - Flanger support: NO
TRACE: AudioManager - Frequency shifter support: NO
TRACE: AudioManager - Vocal morpher support: NO
TRACE: AudioManager - Pitch shifter support: NO
TRACE: AudioManager - Ring modulator support: NO
TRACE: AudioManager - AutoWAH support: NO
TRACE: AudioManager - Equalizer support: NO
TRACE: AudioManager - EAX Reverb support: YES

Это потому, что я получаю только драйвер Generic Software, который поддерживает только реверберацию и реверберацию EAX. И не только на моей машине, но и на других.

Вот как я могу определить драйверы для OpenAL:

ALchar device[256];
ZeroMemory(device, 256);
if (alcIsExtensionPresent(NULL, "ALC_ENUMERATE_ALL_EXT"))
{
    strcpy_s(device, 256, alcGetString(NULL, ALC_ALL_DEVICES_SPECIFIER));
}
else if (alcIsExtensionPresent(NULL, "ALC_ENUMERATION_EXT"))
{
    strcpy_s(device, 256, alcGetString(NULL, ALC_DEVICE_SPECIFIER));
}

TRACE_AUDIOMANAGER("Sound device: '%s'", device);

g_System = alcOpenDevice(device);

Согласно спецификации, спецификатор устройства должен возвращать два драйвера: «Универсальное оборудование» и «Универсальное программное обеспечение», разделенные нулевым терминатором.

Моя звуковая карта - это устройство NVIDIA High Definition Audio, использующее драйвер nvhda32v.sys (версия 1.0.0.63, обновлено 11-11-2009).

Почему OpenAL не обнаруживает мое оборудование?

Ответы [ 4 ]

2 голосов
/ 12 июня 2012

OpenAL всегда должен возвращать аудиоустройство по умолчанию, если только вы не используете звуковую карту Creative. Все расширения являются специфичными для Creative. Это то же самое, что ожидать получить специфичное для Intel расширение OpenGL на видеокарте NVIDIA.

Для справки, вот как вы настроили OpenAL:

// create a default device
ALCdevice* device = alcOpenDevice("");
if (!device)
{
    LOG_ERROR("Could not create OpenAL device.");
    return false;
}

// context attributes, 2 zeros to terminate 
ALint attribs[6] = {
    0, 0
};

ALCcontext* context = alcCreateContext(device, attribs);
if (!context)
{
    LOG_ERROR("Could not create OpenAL context.");
    alcCloseDevice(device);
    return false;
}

if (!alcMakeContextCurrent(context))
{
    LOG_ERROR("Could not enable OpenAL context.");
    alcDestroyContext(context);
    alcCloseDevice(device);
    return false;
}

LOG_INFO("[OpenAL] Version: %s", alGetString(AL_VERSION));
LOG_INFO("[OpenAL] Vendor: %s", alGetString(AL_VENDOR));
LOG_INFO("[OpenAL] Renderer: %s", alGetString(AL_RENDERER));
1 голос
/ 03 ноября 2014

для тех, кто все еще ищет способ получить все устройства // кроме вывода - все еще универсальный, хорошо работает для ввода //

public: int * CHECK_DEVICES_IN (int MAX_DEVICES) {int devices = 0; char * device [MAX_DEVICES]; проверено = 0; в то время как (устройства

  public:ALchar* DEVICES_IN(int REQUIRED)
   { ALchar* result="0";
     ALchar* device=(ALchar*)alcGetString(NULL,ALC_CAPTURE_DEVICE_SPECIFIER);
     int POS=0;
     while(device && device!=NULL && strlen(device)>0 && POS<=REQUIRED)
      { if(POS==REQUIRED)
         { result=device; }
        device+=strlen(device)+1;
        POS++; 
      }
     return result;
   }
1 голос
/ 29 июля 2010

вы уверены, что проверяете следующую строку, потому что alcGetString(NULL, ALC_DEVICE_SPECIFIER) возвращает массив строк, попробуйте так:

char* devices = (char*)alcGetString(NULL, ALC_DEVICE_SPECIFIER);
while(devices && *devices !=NULL)
{
    ALCdevice* device = alcOpenDevice(devices);
    ...
    ...
    devices += strlen(devices) + 1; //next device
}
0 голосов
/ 03 августа 2010

В Vista нет устройства «Универсальное оборудование»: http://connect.creativelabs.com/openal/OpenAL%20Wiki/OpenAL%C2%AE%20and%20Windows%20Vista%E2%84%A2.aspx

Ура! * * 1004

...