DirectXTK SoundEffect-> CreateInstance () Возвращает NULL - PullRequest
0 голосов
/ 04 марта 2019

Все.Наконец-то пришло время добавить аудио в мой игровой движок.

У меня есть простые функции SoundEffect-> Play (), которые отлично работают, но я хочу иметь SoundEffectInstances, чтобы я мог применять 3D-эффекты и тому подобное.

Когда я вызываю SoundEffect-> CreateInstance (), он возвращает нулевой указатель.Я попытался включить слой отладки в аудио движке, но он не дал мне никакой информации.

В противном случае базовые эффекты SoundEffects работают правильно.Я могу воспроизвести звук, и они загрузили свои файлы (не указатели NULL).

Насколько я могу судить, я следую инструкциям в руководстве.Я что-то упустил или есть какая-то причина, по которой вызов CreateInstance () не будет выполнен?Я могу подтвердить, что нет проблем с использованием указателя на структуру в векторе, так как я могу получить эту ссылку и затем SoundEffect-> Play () через ссылку.

Спасибо.

Фрагмент кода:

struct SoundEffectWrapper
{
    unique_ptr<SoundEffect> sound;
    string soundName;
};

struct SoundEffectInstanceWrapper
{
    unique_ptr<SoundEffectInstance> sound;
    string soundName;
};

vector<SoundEffectWrapper> Sounds;
vector<SoundEffectInstanceWrapper> SoundInstances;

SoundEffectInstanceWrapper* SoundManagerClass::GetSoundInstance(string soundName)
{
//Returns an instance of a non-3D sound
SoundEffectWrapper* pSEW = GetSoundEffectWrapper(soundName);

if (pSEW != NULL)
{
    //DEBUG trying to create the sound directly from the sound instead of through a pointer 
    //to the vector to remove as many layers of abstraction as possible.
    unique_ptr<SoundEffectInstance> testSound = Sounds[2].sound->CreateInstance(); //still returns NULL pointer


    //VVVVcode is supposed to do this VVVVVVV
    SoundInstances.push_back(SoundEffectInstanceWrapper());

    int ind = SoundInstances.size() - 1;

    SoundInstances[ind].sound = pSEW->sound->CreateInstance(); //Returns NULL pointer
    SoundInstances[ind].soundName = pSEW->soundName;

    return &SoundInstances[ind];
}
else
{
    return NULL;
}

}

ОБНОВЛЕНИЕ 03/05/19 Для Чака: Спасибо за ответ, Чак.Я мог ошибиться, когда сказал, что он возвращает ноль.В частности, параметр mBase {voice = null.Я создал некоторый код, чтобы исключить вектор, являющийся проблемой, и я скачал проект и вошел в функцию создания экземпляра.В соответствии с локальной переменной tab голос имел значение NULL до вызова return.Вот фрагмент кода и рисунок, показывающий то, что я увидел на моем экране:

wstring filepath = L"..//Resources/Audio/Player/FootStepWalk.wav";
auto sound = make_unique<SoundEffect>(audioEngine.audEngine.get(), filepath.c_str());

auto soundInstance = sound->CreateInstance();

if (!soundInstance)
{
    //This doesn't occur even though voice is null
    MessageBox(NULL, "Failed to create sound instance", "Derp", MB_OK);
}
//This sound doesn't play, but it doesn't throw an exception either.
soundInstance->Play();

DebuggerView

Возможно ли, что исходный голос не удаетсябыть выделенным для экземпляра звука?

ОБНОВЛЕНИЕ 2:

Изображение все выглядит правильно, но нет звука: Debug

...