2011-09-20 3 views
1

FMOD를 사용하여 오디오 트랙을 재생하려고하지만 계속 처리되지 않은 예외가 발생하고 사용 가능한 소스 코드가 없다고 표시되고 해체 코드가 표시됩니다.FMOD - 소스 코드를 사용할 수없는 처리되지 않은 예외

main.cpp 
     bool AudioProject::initAudio() 
    { 
     // Audio code 
     fmSound = new Sound(); 
     fmSound->initialise(); 
     fmSound->load("Music/Rocky_Theme_Tune.mp3"); 
     fmSound->play(); 
     return true; 
    } 

가 나는 초기화 기능에 있었다가 중지 참조에 포인트를 중단했습니다. 심지어 초기화 함수로 들어가고 무작위로 끊어집니다. 작년에 아무 문제없이 사용했을 때 fmod에 대한 모든 파일을 포함 시켰습니다.

sound.h/.cpp 파일도 게시합니다.

.H는

#include "stdafx.h" 
#pragma once 
#include "fmod.hpp" 
#include "fmod.h" 


class Sound 
{ 
private: 
    bool on; //is sound on? 
    bool possible; //is it possible to play sound? 
    char * currentSound; //currently played sound 
    //FMOD-specific stuff 
    FMOD_RESULT result; 
    FMOD_SYSTEM * fmodsystem; 
    FMOD_SOUND * sound; 
    FMOD_CHANNEL * channel; 

public: 
    Sound(); 
    ~Sound(); 
    void initialise (void); 
    void setVolume (float v); 
    void load (const char * filename); 
    void unload (void); 
    void play (bool pause = false); 
    bool getSound (void); 
    void setPause (bool pause); 
    void setSound (bool sound); 
    void toggleSound (void); 
    void togglePause (void); 

}; 

는 통화 당

#include "stdafx.h" 
#include "Sound.h" 
#include "fmod.h" 
#include "fmod.hpp" 

Sound::Sound() 
{ 
    on = true; //is sound on? 
    possible = true; //is it possible to play sound? 
    currentSound=""; //currently played sound 
    sound=0; 

} 

Sound::~Sound() 
{ 

} 

//initialises sound 
void Sound::initialise (void) 
{ 

    //create the sound system. If fails, sound is set to impossible 
    result = FMOD_System_Create(&fmodsystem); 
    if (result != FMOD_OK) 
     possible = false; 

    //if initialise the sound system. If fails, sound is set to impossible 
    if (possible) 
     result = FMOD_System_Init(fmodsystem,2, FMOD_INIT_NORMAL, 0); 

    if (result != FMOD_OK) 
     possible = false; 

    //sets initial sound volume (mute) 
    if (possible) 
     FMOD_Channel_SetVolume(channel,1.0f); 
} 

//sets the actual playing sound's volume 
void Sound::setVolume (float v) 
{ 
    if (possible && on && v >= 0.0f && v <= 1.0f) 
    { 
     FMOD_Channel_SetVolume(channel,v); 
    } 
} 

//loads a soundfile 
void Sound::load (const char * filename) 
{ 
    currentSound = (char *)filename; 
    if (possible && on) 
    { 
     result = FMOD_Sound_Release(sound); 
     result = FMOD_System_CreateStream(fmodsystem,currentSound, FMOD_SOFTWARE, 0, &sound); 
     if (result != FMOD_OK) 
      possible = false; 
    } 
} 

//frees the sound object 
void Sound::unload (void) 
{ 
    if (possible) 
    { 
     result = FMOD_Sound_Release(sound); 
    } 
} 

//plays a sound (no argument to leave pause as dafault) 
void Sound::play (bool pause) 
{ 
    if (possible && on) 
    { 
     result = FMOD_System_PlaySound(fmodsystem,FMOD_CHANNEL_FREE, sound, pause, &channel); 
     FMOD_Channel_SetMode(channel,FMOD_LOOP_NORMAL); 
    } 
} 

//toggles sound on and off 
void Sound::toggleSound (void) 
{ 
    on = !on; 
    if (on == true) 
    { 
     load(currentSound); 
     play(); 
    } 
    if (on == false) 
    { 
     unload(); 
    } 
} 

//pause or unpause the sound 
void Sound::setPause (bool pause) 
{ 
    FMOD_Channel_SetPaused (channel, pause); 
} 

//turn sound on or off 
void Sound::setSound (bool s) 
{ 
    on = s; 
} 

//toggle pause on and off 
void Sound::togglePause (void) 
{ 
    FMOD_BOOL p; 
    FMOD_Channel_GetPaused(channel,&p); 
    FMOD_Channel_SetPaused (channel,!p); 
} 

//tells whether the sound is on or off 
bool Sound::getSound (void) 
{ 
    return on; 
} 

여기에 벽돌 벽을 명중, 사람이 어떤 아이디어가?

답변

1

당신은 initialise에서 FMOD_Channel_SetVolume(channel,1.0f)을 요구하고 있지만, channel 변수가 그것은 코드 줄에 도달하지 Sound::play

+0

FMOD_System_PlaySound(fmodsystem,FMOD_CHANNEL_FREE, sound, pause, &channel);에 의해 초기화됩니다, 아직 초기화되지 않았습니다, 그것은 두 번째 줄에 중단 Sound :: initialise 함수에 추가합니다. 결과 후 = FMOD_System_Create (& fmodsystem); – Craig