1

在 openAL 无法在某些机器上交付之后,我尝试构建某种音频管理器,所以我发现了 fmod。然而,经过几个小时的代码更改,没有任何效果。我的 playSound 电话似乎在窃听。

向此函数传递了一个无效参数。

这正是错误检查输出给我的。

代码...让我们从头开始:

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;
}
4

0 回答 0