FMOD playSound выдает ошибку о неверном параметре - PullRequest
1 голос
/ 07 марта 2012

Я попытался создать какой-то аудио менеджер после того, как openAL не смог доставить на некоторых машинах, поэтому я узнал о fmod. Однако после нескольких часов изменений в коде ничего не работает. Мой вызов playSound, похоже, содержит ошибку.

Недопустимый параметр был передан этой функции.

Это именно то, что мне дает вывод errorcheck.

Код ... давайте начнем:

typedef std::map<std::string, FMOD::Sound*> SoundPool; 
SoundPool m_sounds;
FMOD::Channel* m_soundChannels[MAX_SOUNDS];
FMOD::System* m_soundSystem;

, а затем:

FMOD::System_Create(&m_soundSystem);
m_soundSystem->init(32, FMOD_INIT_NORMAL, NULL);
for(int i = 0; i < MAX_SOUNDS; i++)
    m_soundChannels[i] = 0;

и позже:

void CResourceManager::PlaySound(std::string filename, float volume)
{
    for(int i = 0; i < MAX_SOUNDS; i++)
    {
        if(m_soundChannels[i] == 0)
        {
            if(volume > 1.0f) volume = 1.0f;
            FMOD_RESULT result = m_soundSystem->playSound(FMOD_CHANNEL_FREE,
                                 m_sounds[filename], false, &m_soundChannels[i]);
            if(result != FMOD_OK)
            {
                std::cout << FMOD_ErrorString(result); //// here's the error 
            }
            m_soundChannels[i]->setVolume(volume);
            break;
       }
   }
}

void CResourceManager::Update()
{
    m_soundSystem->update();

    for(int i = 0; i < MAX_SOUNDS; i++)
    {
        if(m_soundChannels[i] != 0)
        {
            bool playing;
            m_soundChannels[i]->isPlaying(&playing);

            if(!playing)
                m_soundChannels[i] = 0;
        }
    }
}

bool CResourceManager::AddSound( std::string filename )
{
    FMOD_RESULT result = m_soundSystem->createSound(filename.c_str(),
                            FMOD_LOOP_NORMAL, NULL, &m_sounds[filename]);

    if(result == FMOD_OK)
        return true;

    return false;
}
...