开发者

FMOD - Unhandled Exception with no source code avaiable

开发者 https://www.devze.com 2023-04-06 01:04 出处:网络
I\'m trying to get my audio track to play using FMOD but I keep getting an unhandled exception and then it says there\'s no source code available, and shows me disassembly code.

I'm trying to get my audio track to play using FMOD but I keep getting an unhandled exception and then it says there's no source code available, and shows me disassembly code.

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

I put break points in the see where it stopped, which was in the initialise function. It even goes into the initialise function and then just randomly breaks. I think I have every include file for fmod as I used it last year no problem.

I'll post my sound.h/.cpp files too.

.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); 

};

.cpp

#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) 开发者_如何学Go
    {
        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;
}

Hit a brick wall here, anyone have any ideas?


You are calling FMOD_Channel_SetVolume(channel,1.0f) in initialise, but the channel variable isn't hasn't been initialized yet, it gets initialized by the FMOD_System_PlaySound(fmodsystem,FMOD_CHANNEL_FREE, sound, pause, &channel); in Sound::play

0

精彩评论

暂无评论...
验证码 换一张
取 消