Changeset 329 for trunk/src/fmod


Ignore:
Timestamp:
09/02/14 06:16:30 (11 years ago)
Author:
epyon
Message:
  • audio now based on handles
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/fmod/fmod_audio.cc

    r319 r329  
    3737
    3838
    39 nv::channel* fmod::audio::play_sound( nv::sound* a_sound )
     39nv::channel fmod::audio::play_sound( nv::sound a_sound )
    4040{
    41         FMOD_SYSTEM* system = (FMOD_SYSTEM*)m_system;
    42         FMOD_SOUND* sample  = (FMOD_SOUND*)( down_cast< fmod::sound >( a_sound )->m_sound );
    43         FMOD_RESULT result  = FMOD_System_PlaySound( system, FMOD_CHANNEL_FREE, sample, false, 0 );
    44         if ( result != FMOD_OK )
     41        sound_info* info = m_sounds.get( a_sound );
     42        if ( info )
    4543        {
    46                 NV_LOG( LOG_WARNING, "FMOD failed to play sound -- " << FMOD_ErrorString( result ) );
     44                FMOD_SYSTEM* system = (FMOD_SYSTEM*)m_system;
     45                FMOD_SOUND* sample  = (FMOD_SOUND*)( info->fmod_sound );
     46                FMOD_RESULT result  = FMOD_System_PlaySound( system, FMOD_CHANNEL_FREE, sample, false, 0 );
     47                if ( result != FMOD_OK )
     48                {
     49                        NV_LOG( LOG_WARNING, "FMOD failed to play sound -- " << FMOD_ErrorString( result ) );
     50                }
    4751        }
    48         return nullptr;
     52        return channel();
    4953}
    5054
    51 nv::sound* fmod::audio::load_sound( const std::string& a_path )
     55nv::sound fmod::audio::load_sound( const std::string& a_path )
    5256{
    5357        FMOD_SYSTEM* system = (FMOD_SYSTEM*)m_system;
    5458        FMOD_SOUND* sample;
    55         FMOD_RESULT result = FMOD_System_CreateSound( system, a_path.c_str(), FMOD_DEFAULT, 0, &sample );
    56         if ( result != FMOD_OK )
     59        FMOD_RESULT fm_result = FMOD_System_CreateSound( system, a_path.c_str(), FMOD_DEFAULT, 0, &sample );
     60        if ( fm_result != FMOD_OK )
    5761        {
    58                 NV_LOG( LOG_ERROR, "FMOD failed to load sample '" << a_path << "' -- " << FMOD_ErrorString( result ) );
    59                 return nullptr;
     62                NV_LOG( LOG_ERROR, "FMOD failed to load sample '" << a_path << "' -- " << FMOD_ErrorString( fm_result ) );
     63                return sound();
    6064        }
    61         return new fmod::sound( sample );
     65        sound result = m_sounds.create();
     66        sound_info* info = m_sounds.get( result );
     67        info->fmod_sound = sample;
     68        return result;
     69}
     70
     71void nv::fmod::audio::release( sound a_sound )
     72{
     73        sound_info* info = m_sounds.get( a_sound );
     74        if ( info )
     75        {
     76                FMOD_Sound_Release( (FMOD_SOUND*)info->fmod_sound );
     77                m_sounds.destroy( a_sound );
     78        }
    6279}
    6380
     
    7087fmod::audio::~audio()
    7188{
     89        while ( m_sounds.size() > 0 )
     90                release( m_sounds.get_handle(0) );
    7291        FMOD_System_Release( (FMOD_SYSTEM*)m_system );
    7392}
    7493
    75 fmod::sound::~sound()
    76 {
    77         FMOD_Sound_Release( (FMOD_SOUND*)m_sound );
    78 }
Note: See TracChangeset for help on using the changeset viewer.