summaryrefslogtreecommitdiff
path: root/public/sfmobjects/sfmphonemeextractor.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/sfmobjects/sfmphonemeextractor.h')
-rw-r--r--public/sfmobjects/sfmphonemeextractor.h161
1 files changed, 161 insertions, 0 deletions
diff --git a/public/sfmobjects/sfmphonemeextractor.h b/public/sfmobjects/sfmphonemeextractor.h
new file mode 100644
index 0000000..1a1383b
--- /dev/null
+++ b/public/sfmobjects/sfmphonemeextractor.h
@@ -0,0 +1,161 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef SFMPHONEMEEXTRACTOR_H
+#define SFMPHONEMEEXTRACTOR_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "phonemeextractor/PhonemeExtractor.h"
+#include "tier1/UtlString.h"
+#include "sentence.h"
+#include "dme_controls/logpreview.h"
+
+
+//-----------------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------------
+class CDmeSoundClip;
+class CDmeGameSound;
+class CDmeAnimationSet;
+
+
+//-----------------------------------------------------------------------------
+// Info about a particular phoneme to extract
+//-----------------------------------------------------------------------------
+class CExtractInfo
+{
+public:
+ CExtractInfo();
+ CExtractInfo( const CExtractInfo& src );
+ ~CExtractInfo();
+
+ void ClearTags();
+
+ // Filled in by caller
+ CDmeSoundClip *m_pClip;
+ CDmeGameSound *m_pSound;
+ CUtlString m_sHintText;
+ bool m_bUseSentence;
+
+ // Filled in by Extract()
+ CSentence m_Sentence;
+ float m_flDuration;
+ bool m_bSentenceValid;
+
+ // Must be passed in when calling for Apply, will be created and passed back for Extract
+ CUtlVector< CBasePhonemeTag * > m_ApplyTags;
+};
+
+
+//-----------------------------------------------------------------------------
+// Extraction type
+//-----------------------------------------------------------------------------
+enum SFMPhonemeExtractType_t
+{
+ EXTRACT_WIPE_RANGE = 0, // Wipe logs from start of first selected clip to end of last selected clip
+ EXTRACT_WIPE_CLIP, // Wipe all log entries (for facial controls) over entire clip
+ EXTRACT_WIPE_SOUNDS, // Leave logs untouched, except underneath each selected .wav file
+
+ NUM_EXTRACT_WIPE_TYPES,
+};
+
+//-----------------------------------------------------------------------------
+// Filter type
+//-----------------------------------------------------------------------------
+enum SFMPhonemeFilterType_t
+{
+ EXTRACT_FILTER_HOLD, // hold for phoneme duration
+ EXTRACT_FILTER_LINEAR, // linearly blend from phoneme start to next phoneme
+ EXTRACT_FILTER_FIXED_WIDTH, // hold and linearly falloff before and after
+
+ NUM_EXTRACT_FILTER_TYPES,
+};
+
+//-----------------------------------------------------------------------------
+// Extraction information
+//-----------------------------------------------------------------------------
+struct ExtractDesc_t
+{
+ SFMPhonemeExtractType_t m_nExtractType;
+ SFMPhonemeFilterType_t m_nFilterType;
+ bool m_bCreateBookmarks;
+ CUtlVector< CExtractInfo > m_WorkList; // One or more .wavs to extract from
+ CUtlVector< LogPreview_t > m_ControlList; // List of facial controls
+ CDmeFilmClip *m_pMovie;
+ CDmeFilmClip *m_pShot;
+ CDmeAnimationSet *m_pSet;
+ float m_flSampleRateHz;
+ float m_flSampleFilterSize;
+};
+
+
+//-----------------------------------------------------------------------------
+// Main interface for phoneme extraction
+//-----------------------------------------------------------------------------
+class ISFMPhonemeExtractor
+{
+public:
+ virtual ~ISFMPhonemeExtractor() {};
+
+ virtual bool Init() = 0;
+ virtual void Shutdown() = 0;
+
+ virtual int GetAPICount() = 0;
+ virtual void GetAPIInfo( int nIndex, CUtlString* pPrintName, PE_APITYPE *pAPIType ) = 0;
+
+ virtual void Extract( const PE_APITYPE& apiType, ExtractDesc_t& info, bool bWritePhonemesToWavFiles = false ) = 0;
+ virtual void ReApply( ExtractDesc_t& info ) = 0;
+ virtual bool GetSentence( CDmeGameSound *pGameSound, CSentence& sentence ) = 0;
+};
+
+extern ISFMPhonemeExtractor *sfm_phonemeextractor;
+
+
+//-----------------------------------------------------------------------------
+// inline methods of CExtractInfo
+//-----------------------------------------------------------------------------
+inline CExtractInfo::CExtractInfo() : m_pClip( 0 ), m_pSound( 0 ),
+ m_bSentenceValid( false ), m_bUseSentence( false ), m_flDuration( 0.0f )
+{
+}
+
+inline CExtractInfo::CExtractInfo( const CExtractInfo& src )
+{
+ m_pClip = src.m_pClip;
+ m_pSound = src.m_pSound;
+ m_sHintText = src.m_sHintText;
+ m_Sentence = src.m_Sentence;
+ m_bSentenceValid = src.m_bSentenceValid;
+ m_bUseSentence = src.m_bUseSentence;
+ m_flDuration = src.m_flDuration;
+
+ ClearTags();
+
+ for ( int i = 0; i < src.m_ApplyTags.Count(); ++i )
+ {
+ CBasePhonemeTag *newTag = new CBasePhonemeTag( *src.m_ApplyTags[ i ] );
+ m_ApplyTags.AddToTail( newTag );
+ }
+}
+
+inline CExtractInfo::~CExtractInfo()
+{
+ ClearTags();
+}
+
+inline void CExtractInfo::ClearTags()
+{
+ for ( int i = 0; i < m_ApplyTags.Count(); ++i )
+ {
+ delete m_ApplyTags[ i ];
+ }
+ m_ApplyTags.RemoveAll();
+}
+
+
+#endif // PHONEMEEXTRACTOR_H