Все.Наконец-то пришло время добавить аудио в мой игровой движок.
У меня есть простые функции 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](https://i.stack.imgur.com/rXkFg.png)
Возможно ли, что исходный голос не удаетсябыть выделенным для экземпляра звука?
ОБНОВЛЕНИЕ 2:
Изображение все выглядит правильно, но нет звука: ![Debug](https://i.stack.imgur.com/QKpTf.png)