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