initial
This commit is contained in:
201
public/mouthinfo.h
Normal file
201
public/mouthinfo.h
Normal file
@@ -0,0 +1,201 @@
|
||||
//========= Copyright (c) 1996-2005, Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $Workfile: $
|
||||
// $Date: $
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
// $Log: $
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
#if !defined( MOUTHINFO_H )
|
||||
#define MOUTHINFO_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
class CAudioSource;
|
||||
|
||||
#pragma pack(push,4)
|
||||
class CVoiceData
|
||||
{
|
||||
public:
|
||||
CVoiceData( void )
|
||||
{
|
||||
m_flElapsed = 0.0f;
|
||||
m_pAudioSource = NULL;
|
||||
m_bIgnorePhonemes = false;
|
||||
}
|
||||
|
||||
void SetElapsedTime( float t )
|
||||
{
|
||||
m_flElapsed = t;
|
||||
}
|
||||
|
||||
float GetElapsedTime() const
|
||||
{
|
||||
return m_flElapsed;
|
||||
}
|
||||
|
||||
void SetSource( CAudioSource *source, bool bIgnorePhonemes )
|
||||
{
|
||||
m_pAudioSource = source;
|
||||
m_bIgnorePhonemes = bIgnorePhonemes;
|
||||
}
|
||||
|
||||
bool ShouldIgnorePhonemes() const
|
||||
{
|
||||
return m_bIgnorePhonemes;
|
||||
}
|
||||
|
||||
CAudioSource *GetSource()
|
||||
{
|
||||
return m_pAudioSource;
|
||||
}
|
||||
|
||||
private:
|
||||
float m_flElapsed;
|
||||
CAudioSource *m_pAudioSource;
|
||||
bool m_bIgnorePhonemes;
|
||||
};
|
||||
|
||||
#define UNKNOWN_VOICE_SOURCE -1
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Describes position of mouth for lip syncing
|
||||
//-----------------------------------------------------------------------------
|
||||
class CMouthInfo
|
||||
{
|
||||
public:
|
||||
// 0 = mouth closed, 255 = mouth agape
|
||||
byte mouthopen;
|
||||
// counter for running average
|
||||
byte sndcount;
|
||||
// running average
|
||||
int sndavg;
|
||||
|
||||
public:
|
||||
CMouthInfo( void ) { m_nVoiceSources = 0; m_needsEnvelope = false; }
|
||||
~CMouthInfo( void ) { ClearVoiceSources(); }
|
||||
|
||||
int GetNumVoiceSources( void );
|
||||
CVoiceData *GetVoiceSource( int number );
|
||||
|
||||
void ClearVoiceSources( void );
|
||||
int GetIndexForSource( CAudioSource *source );
|
||||
bool IsSourceReferenced( CAudioSource *source );
|
||||
|
||||
CVoiceData *AddSource( CAudioSource *source, bool bIgnorePhonemes );
|
||||
|
||||
void RemoveSource( CAudioSource *source );
|
||||
void RemoveSourceByIndex( int index );
|
||||
|
||||
bool IsActive( void );
|
||||
bool NeedsEnvelope() { return m_needsEnvelope != 0; }
|
||||
void ActivateEnvelope() { m_needsEnvelope = true; }
|
||||
|
||||
private:
|
||||
enum
|
||||
{
|
||||
MAX_VOICE_DATA = 4
|
||||
};
|
||||
|
||||
short m_nVoiceSources;
|
||||
short m_needsEnvelope;
|
||||
CVoiceData m_VoiceSources[ MAX_VOICE_DATA ];
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
|
||||
inline bool CMouthInfo::IsActive( void )
|
||||
{
|
||||
return ( GetNumVoiceSources() > 0 ) ? true : false;
|
||||
}
|
||||
|
||||
inline int CMouthInfo::GetNumVoiceSources( void )
|
||||
{
|
||||
return m_nVoiceSources;
|
||||
}
|
||||
|
||||
inline CVoiceData *CMouthInfo::GetVoiceSource( int number )
|
||||
{
|
||||
if ( number < 0 || number >= m_nVoiceSources )
|
||||
return NULL;
|
||||
|
||||
return &m_VoiceSources[ number ];
|
||||
}
|
||||
|
||||
inline void CMouthInfo::ClearVoiceSources( void )
|
||||
{
|
||||
m_nVoiceSources = 0;
|
||||
}
|
||||
|
||||
inline int CMouthInfo::GetIndexForSource( CAudioSource *source )
|
||||
{
|
||||
for ( int i = 0; i < m_nVoiceSources; i++ )
|
||||
{
|
||||
CVoiceData *v = &m_VoiceSources[ i ];
|
||||
if ( !v )
|
||||
continue;
|
||||
|
||||
if ( v->GetSource() == source )
|
||||
return i;
|
||||
}
|
||||
|
||||
return UNKNOWN_VOICE_SOURCE;
|
||||
}
|
||||
|
||||
inline bool CMouthInfo::IsSourceReferenced( CAudioSource *source )
|
||||
{
|
||||
if ( GetIndexForSource( source ) != UNKNOWN_VOICE_SOURCE )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
inline void CMouthInfo::RemoveSource( CAudioSource *source )
|
||||
{
|
||||
int idx = GetIndexForSource( source );
|
||||
if ( idx == UNKNOWN_VOICE_SOURCE )
|
||||
return;
|
||||
|
||||
RemoveSourceByIndex( idx );
|
||||
}
|
||||
|
||||
inline void CMouthInfo::RemoveSourceByIndex( int index )
|
||||
{
|
||||
if ( index < 0 || index >= m_nVoiceSources )
|
||||
return;
|
||||
|
||||
--m_nVoiceSources;
|
||||
if ( m_nVoiceSources > 0 )
|
||||
{
|
||||
m_VoiceSources[ index ] = m_VoiceSources[ m_nVoiceSources ];
|
||||
}
|
||||
}
|
||||
|
||||
inline CVoiceData *CMouthInfo::AddSource( CAudioSource *source, bool bIgnorePhonemes )
|
||||
{
|
||||
int idx = GetIndexForSource( source );
|
||||
if ( idx == UNKNOWN_VOICE_SOURCE )
|
||||
{
|
||||
if ( m_nVoiceSources < MAX_VOICE_DATA )
|
||||
{
|
||||
idx = m_nVoiceSources++;
|
||||
}
|
||||
else
|
||||
{
|
||||
// No room!
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
CVoiceData *data = &m_VoiceSources[ idx ];
|
||||
data->SetSource( source, bIgnorePhonemes );
|
||||
data->SetElapsedTime( 0.0f );
|
||||
return data;
|
||||
}
|
||||
|
||||
#endif // MOUTHINFO_H
|
||||
Reference in New Issue
Block a user