Exemplo n.º 1
0
void FmodEventDesc::Init( const char * a_guid )
{
	TRACE( "FmodEventDesc::Init() - %s\n", a_guid );

	m_guid = a_guid;
	m_valid = true;

	FMOD_ERROR_CHECK( m_desc.getUserPropertyCount(&m_num_user_properties) );
	FMOD_ERROR_CHECK( m_desc.getLength(&m_length) );
	FMOD_ERROR_CHECK( m_desc.getMaximumDistance(&m_max_distance) );
	FMOD_ERROR_CHECK( m_desc.isOneshot(&m_is_oneshot) );
	FMOD_ERROR_CHECK( m_desc.is3D(&m_is_3d) );
}
Exemplo n.º 2
0
void FmodEventDesc::Release()
{
	if ( m_valid )
	{
		// release instances
		for( auto it : m_instances ) it->Release();
		m_instances.clear();

		TRACE( "FmodEventDesc::Release() - %s\n", m_guid.c_str() );
		FMOD_ERROR_CHECK( m_desc.releaseAllInstances() );

		m_valid = false;
	}
}
Exemplo n.º 3
0
StrongHandle<FmodEventInst> FmodEventDesc::SpawnInst()
{
	ASSERT(m_valid);

	StrongHandle<FmodEventInst> result = new FmodEventInst;

	// init the instance
	FMOD::Studio::EventInstance & inst = result->GetInst();
	FMOD_ERROR_CHECK( m_desc.createInstance( &inst ) );

	result->Init( GetGuid().c_str(), this->GetHandle() );
	RegisterInst(result);

	return result;
}
Exemplo n.º 4
0
FMODAudioSystem::FMODAudioSystem()
:	m_FMODSystem( NULL )
,	m_ReverbGroup( NULL )
,	m_ReverbDSP( NULL )
,	m_ReverbCategories()
{
	DEBUGPRINTF( "Initializing FMOD audio system...\n" );

	STATICHASH( AudioSystem );

	STATICHASH( MaxChannels );
	const int MaxChannels = ConfigManager::GetInt( sMaxChannels, 32, sAudioSystem );

	// Create FMOD system
	FMOD_RESULT Result;
	Result = FMOD::System_Create( &m_FMODSystem );
	FMOD_ERROR_CHECK( System_Create );

	FMOD_OUTPUTTYPE FMODOutput = FMOD_OUTPUTTYPE_AUTODETECT;
	Result = m_FMODSystem->getOutput( &FMODOutput );
	FMOD_ERROR_CHECK( getOutput );
	PRINTF( "FMOD: Default output type: 0x%08X\n", FMODOutput );

	int NumDrivers = 0;
	Result = m_FMODSystem->getNumDrivers( &NumDrivers );
	FMOD_ERROR_CHECK( getNumDrivers );

#if BUILD_LINUX
	// Seems like FMOD's attempt to evaluate audio outputs isn't working right. So try ALSA, then OSS.
	ASSERT( FMODOutput == FMOD_OUTPUTTYPE_PULSEAUDIO );

	if( Result != FMOD_OK )
	{
		Result = m_FMODSystem->setOutput( FMOD_OUTPUTTYPE_ALSA );
		FMOD_ERROR_CHECK( setOutput );

		Result = m_FMODSystem->getNumDrivers( &NumDrivers );
		FMOD_ERROR_CHECK( getNumDrivers );
	}

	if( Result != FMOD_OK )
	{
		Result = m_FMODSystem->setOutput( FMOD_OUTPUTTYPE_OSS );
		FMOD_ERROR_CHECK( setOutput );

		Result = m_FMODSystem->getNumDrivers( &NumDrivers );
		FMOD_ERROR_CHECK( getNumDrivers );
	}
#endif

	ASSERT( NumDrivers > 0 );
	if( NumDrivers <= 0 )
	{
		PRINTF( "FMOD: No sound drivers available.\n" );
		Result = m_FMODSystem->setOutput( FMOD_OUTPUTTYPE_NOSOUND );
		FMOD_ERROR_CHECK( setOutput );
	}

	Result = m_FMODSystem->init( MaxChannels, FMOD_INIT_NORMAL, NULL );	// First parameter is maxchannels, up to 4093
	FMOD_ERROR_CHECK( init );

	// Create reverb channel group
	Result = m_FMODSystem->createChannelGroup( "Reverb", &m_ReverbGroup );
	FMOD_ERROR_CHECK( createChannelGroup );

	// Create reverb DSP unit
	Result = m_FMODSystem->createDSPByType( FMOD_DSP_TYPE_SFXREVERB, &m_ReverbDSP );
	FMOD_ERROR_CHECK( createDSPByType );

	// Set up DSP chain
	Result = m_ReverbGroup->addDSP( m_ReverbDSP, NULL );
	FMOD_ERROR_CHECK( addDSP );

	STATICHASH( DefaultReverb );
	const SimpleString DefaultReverb = ConfigManager::GetString( sDefaultReverb, "", sAudioSystem );
	SetReverbParams( DefaultReverb );

	STATICHASH( NumReverbCategories );
	const uint NumReverbCategories = ConfigManager::GetInt( sNumReverbCategories, 0, sAudioSystem );
	for( uint ReverbCategoryIndex = 0; ReverbCategoryIndex < NumReverbCategories; ++ReverbCategoryIndex )
	{
		const HashedString ReverbCategory = ConfigManager::GetSequenceHash( "ReverbCategory%d", ReverbCategoryIndex, "", sAudioSystem );
		m_ReverbCategories.PushBack( ReverbCategory );
	}
}